design-patterns - Kafka 架构很多分区还是很多主题?

标签 design-patterns apache-kafka

我希望将 Kafka 设置为来自 IoT 机器的数据和处理该数据的服务之间的中介。
我在确定基于我的用例设计主题的正确方法时遇到了一些问题,希望得到一些建议。

我希望从多台机器读取传感器数据,每台机器可以有许多传感器。例如(温度、压力、零件等)
我的消费者将阅读的这些消息的顺序很重要,需要按顺序排列。

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

a) 每台机器都会写入一个带有 1 个分区的特定主题以保证顺序。所以机器 100 将写入名为:machine100TempSensor1、machine100TempSensor2、machine100PressureSensor1 等的主题。

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

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

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

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

一种)
- Kafka 仅在分区级别保证序列,所以创建一个带有单个分区的主题是一个好主意还是违背主题应该是什么?
- 如果我想从所有机器读取“温度”,我必须知道特定主题的名称和请求数据,而不是一般的“温度”主题。
- Kafka 声明只有一个消费者组可以从单个分区读取,因此我必须创建许多消费者组。

b)
- 如果我考虑扩展,一个“温度”主题可能有 30 多个分区,如果不是 100s/1000s。 (但我会受益于一次读取所有分区)
- 由于只有一个消费者组能够从单个分区读取,我将为每个消费者设置一个消费者组。

C)
- 我觉得过滤数以千计的无用消息可能会产生很大的性能成本。
- 将处理后的数据推送到 kafka 时,我会遇到同样的问题。

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

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

最佳答案

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

1) Kafka 基本上是跨分区扩展的——因此,对于代理来说,如果你使用 1 个主题和 1000 个主题的 1000 个分区,每个主题有 1 个分区,则没有区别(从性能角度来看)。 (如果您打算使用 Kafka Streams(又名 Streams API),使用具有 1000 个分区的单个主题会更好,因为 Kafka Streams 不能很好地跨主题扩展。)

2)如果基本上绝对没问题,创建单个分区主题以保证排序。对于一次订阅多个主题,如果您相应地命名主题,则可以使用模式订阅。

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

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

Kafka states that only one consumer group can read from a single partition, so I would have to create many consumer groups.



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

5) 您对 (c) 的关注似乎是合理的。

关于design-patterns - Kafka 架构很多分区还是很多主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738326/

相关文章:

mysql - 如何在另一台主机上连接 MySQL 和 kafka?

design-patterns - 高级设计模式或不重新发明轮子

android - 静态变量在 Activity 之间交换数据真的安全吗?

ruby-on-rails - 策略模式文件位置 Rails

java - 无法捕获 Kafka TopicExistsException

java - Flink ParquetSinkWriter FileAlreadyExistsException

design-patterns - 什么时候应该使用复合设计模式?

java - 如何在Swing应用程序中实现JProgressBar?

java - Reactor Flux 上的条件逻辑

apache-kafka - 现有镜像 Kafka 主题方法的主要区别是什么