繁体   English   中英

Kafka架构有很多分区或很多主题?

[英]Kafka architecture many partitions or many topics?

我希望将Kafka设置为来自IoT机器的数据和将处理该数据的服务之间的中介。 我有一些问题,根据我的用例确定设计主题的正确方法,并且会喜欢一些建议。

我期待从许多机器读取传感器数据,每台机器可能有许多传感器。 例如(温度,压力,零件等)。消费者将阅读的这些消息的顺序是有意义的,需要是顺序的。

我想出了三个可能的设计,但我不确定哪个是最好的,如果有的话?

a)每台机器将写入具有1个分区的特定主题以保证序列。 因此机器100将写入名为的主题:machine100TempSensor1,machine100TempSensor2,machine100PressureSensor1等。

b )所有机器将写入单个主题,但分区将基于机器/传感器,因此使用与上述相同的示例,机器100将写入称为“温度”的主题,但将在机器和传感器上进行键控。

例如。
(主题:温度,分区:machine100TempSensor1)
(主题:温度,分区:machine100TempSensor2)
(主题:温度,分区:machine200TempSensor1)

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

我对所有解决方案的关注,

a) - Kafka只保证分区级别的序列,所以用单个分区创建一个主题是个好主意还是与主题应该是什么相反?
- 如果我想从所有机器上读取“温度”,我必须知道特定主题的名称和请求数据,而不是一般的“温度”主题。
- Kafka说只有一个消费者群体可以从一个分区读取,所以我必须创建许多消费者群体。

b) - 如果考虑缩放,单个“温度”主题可能有30多个分区,如果不是100s / 1000s。 (但我会立即阅读所有分区的好处)
- 由于只有一个消费者群体能够从单个分区中读取,因此我将为每个消费者提供一个消费者群组。

c) - 我觉得过滤成千上万条无用的消息会有很大的性能成本。
- 当需要将处理后的数据推送到kafka时,我会遇到同样的问题。

需要考虑的是我希望能够处理某些机器/传感器。

希望我能够清楚地解释一切。

您对卡夫卡的整体理解并非100%正确。

1)Kafka基本上可以扩展分区 - 因此,对于经纪人而言,如果您使用1个主题,1000个主题的1000个分区,每个分区1个分区,则没有区别(从性能角度来看)。 (如果您计划使用Kafka Streams(又名Streams API),使用带有1000个分区的单个主题会更好,因为Kafka Streams在各个主题上的扩展性不是很好。)

2)创建单个分区主题,以保证订购,如果基本绝对罚款。 要一次订阅多个主题,如果您相应地命名主题,则可以使用模式订阅。

3)单个代理可以托管多个分区。 因此,即使考虑到复制,您也不需要庞大的集群。

4)这个说法听起来不正确(或者我想念它):

Kafka声称只有一个消费者群体可以从一个分区读取,所以我必须创建许多消费者群体。

也许你的意思是, 一个消费者群体中只有一个消费者。 这是正确的。 如果您有一个使用者组,则可以将每个分区(手动或使用内置使用者组管理)分配给组内最多一个使用者。 如果多个应用程序想要读取同一分区,则只需要多个使用者组。

5)你对(c)的关注似乎是合法的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM