Kafka架构-许多分区或许多主题?

62lalag4  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(356)

我期待设置Kafka作为一个中介之间的数据来自物联网机器和服务,将处理这些数据。我有一些问题,以确定正确的方式来设计我的主题基于我的用例,并希望得到一些建议。
我期待从许多机器读取传感器数据,每台机器可以有许多传感器。例如(温度、压力、零件等)我的消费者将阅读的这些信息的顺序是重要的,需要按顺序排列。
我已经想出了三种可能的设计,但我不确定哪种是最好的,如果有的话?

**a)**每台机器将用一个分区写入一个特定的主题,以保证顺序。因此,machine100将写入名为machine100温度传感器1、machine100温度传感器2、machine100压力传感器1等的主题。。
b)所有机器将写入单个主题,但分区将基于机器/传感器,因此使用与上述相同的示例,机器100将写入名为“温度”的主题,但将键入机器和传感器。

如。
(主题:温度,分区:机器100温度传感器1)
(主题:温度,分区:机器100温度传感器2)
(主题:温度,分区:机器200温度传感器1)

**c)**生成所有与温度主题相关的消息,并在处理数据时过滤消息。

我对所有解决方案的担忧,

a)-kafka只保证分区级别的顺序,所以用一个分区创建一个主题是一个好主意还是违背了主题应该是什么?

-如果我想读取所有机器的“温度”,我就必须知道名称并从特定主题而不是一般的“温度”主题请求数据。
-kafka声明只有一个消费组可以从单个分区读取数据,因此我必须创建许多消费组。

b)-如果不考虑缩放,单个“温度”主题可能有30+个分区(如果不是100s/1000s)(但我可以一次读取所有分区)

-因为只有一个消费者组能够从一个分区读取数据,所以我将为每个消费者创建一个消费者组。

c)-我觉得过滤成千上万条无用的消息可能会带来很大的性能成本。

-我会遇到同样的问题,当涉及到把处理后的数据Kafka。
需要考虑的是,我希望有能力处理某些机器/传感器。
希望我能解释清楚一切。

ckx4rj1h

ckx4rj1h1#

你对Kafka的整体理解不是100%正确。
1) kafka基本上是在分区上扩展的——因此,对于代理来说,如果使用1个主题和1000个分区,那么(从性能的Angular 来看)没有什么区别(如果您计划使用kafka streams(aka streams api),那么使用一个有1000个分区的主题会更好,因为kafka streams不能很好地跨主题扩展。)
2) 创建单分区主题以保证排序(如果基本上完全正确的话)。为了一次订阅多个主题,如果相应地命名主题,则可以使用模式订阅。
3) 一个代理可以承载数千个分区。因此,即使考虑到复制,您也不需要庞大的集群。
4) 这种说法听起来不正确(或许我不理解):
kafka声明只有一个消费组可以从单个分区读取数据,因此我必须创建许多消费组。
也许你的意思是,一个消费群体中只有一个消费者。这是正确的。如果您有一个使用者组,则可以将每个分区(手动或使用内置的使用者组管理)分配给组中最多一个使用者。如果多个应用程序要读取同一分区,则只需要多个使用者组。
5) 你对(c)的担心似乎是正确的。

相关问题