【发布时间】:2018-07-22 03:24:30
【问题描述】:
我希望将 Kafka 设置为来自 IoT 机器的数据和将处理该数据的服务之间的中介。 我在确定根据我的用例设计主题的正确方法时遇到了一些问题,希望得到一些建议。
我希望从多台机器上读取传感器数据,每台机器都可以有许多传感器。例如(温度、压力、零件等) 我的消费者将阅读的这些消息的顺序很重要,需要按顺序排列。
我想出了三种可能的设计,但我不确定哪个最好,如果有的话?
a) 每台机器将写入具有 1 个分区的特定主题以保证顺序。所以机器 100 将写入名为:machine100TempSensor1、machine100TempSensor2、machine100PressureSensor1 等的主题。
b) 所有机器都将写入单个主题,但分区将基于机器/传感器,因此使用与上述相同的示例, 机器 100 将写入名为“温度”的主题,但将键入机器和传感器。
例如。
(主题:温度,分区:machine100TempSensor1)
(主题:温度,分区:machine100TempSensor2)
(主题:温度,分区:machine200TempSensor1)
c) 为温度主题生成所有与温度相关的消息,并在我处理数据时过滤这些消息。
我对所有解决方案的担忧,
a)
- Kafka 仅保证分区级别的顺序,因此创建具有单个分区的主题是一个好主意,还是违背了主题应该是什么?
- 如果我想从所有机器上读取“温度”,我必须知道特定主题的名称和请求数据,而不是一般的“温度”主题。
- Kafka 声明只有一个消费者组可以从单个分区读取,所以我必须创建许多消费者组。
b)
- 如果我考虑扩展,如果不是 100 秒/1000 秒,单个“温度”主题可能有 30 多个分区。 (但我将受益于一次读取所有分区)
- 由于只有一个消费者组能够从单个分区中读取数据,因此我将为每个消费者创建一个消费者组。
c)
- 我觉得过滤数千条无用消息可能会带来很大的性能成本。
- 在将处理后的数据推送到 kafka 时,我会遇到同样的问题。
需要考虑的是,我希望能够处理某些机器/传感器。
希望我能够清楚地解释一切。
【问题讨论】:
标签: design-patterns apache-kafka