每个制片人的卡夫卡主题

big*_*big 3 scalability real-time publish-subscribe bigdata apache-kafka

可以说我有多个设备.每个设备都有不同类型的传感器.现在我想将每个传感器的每个设备的数据发送到kafka.但我对卡夫卡主题感到困惑.用于处理此实时数据

每个设备都有kafka主题并且该设备的所有传感器都会将数据发送到特定的kafka主题,或者我应该创建一个主题并让所有设备将数据发送到该主题.

如果我选择第一个案例,我们将在每个设备上创建主题,

Device1(传感器A,B,C) - > topic1

Device2(传感器A,B,C) - > topic2

  1. 我可以创建多少主题?
  2. 这个模型会扩展吗?

案例2:在哪里,将数据发送到一个主题

Device1(传感器A,B,C),Device2(传感器A,B,C)...... DeviceN .... - >主题

  1. 这不会成为数据的瓶颈.因为它将表现为来自某个传感器的队列数据将在队列中落后并且不会被实时处理.

  2. 这个模型会扩展吗?

编辑

让我们说每个设备都与用户(多对一)相关联.所以我想根据设备处理数据.因此,我想处理数据的方式是,每个设备及其传感器数据将在经过一些处理后发送给用户.

说我做了以下

DEVICE1

- >传感器A - 主题1分区1

- >传感器B - 主题1分区2

设备2

- >传感器A - 主题2分区1

- >传感器B - 主题2分区2

我想要一些pub/sub类型的行为.由于可以添加或移除设备,因此也可以添加或移除传感器.有没有办法创建这些主题和动态分区.

如果不是kafka,那么pub/sub将适合这种行为.

Mat*_*Sax 5

这取决于你的语义:

  • 主题是逻辑抽象,应包含"统一"数据,即具有相同语义含义的数据
  • 可以通过分区数量轻松扩展主题

例如,如果您有不同类型的传感器收集不同的数据,则应为每种类型使用主题.

由于可以添加或移除设备,因此也可以添加或移除传感器.有没有办法创建这些主题和动态分区.

如果在每条消息中嵌入了设备元数据(以区分日期来源),则应使用具有多个分区的单个主题进行扩展.可以添加新主题或分区,但必须手动完成.对于添加新分区,问题可能是它可能会更改您的数据分布,从而可能会破坏语义.因此,最佳做法是从头开始对主题进行过度分区,以避免添加新分区.

如果没有嵌入的元数据,则需要多个主题(例如,每个用户或每个设备)来区分消息来源.

作为替代方案,也许具有多个分区的单个主题从设备/传感器到分区的固定映射(通过使用自定义分区器)也可以工作.对于这种情况,添加新分区没有问题,因为您可以控制数据分布并保持稳定.

更新

有一篇博客文章讨论这个问题:https://www.confluent.io/blog/put-several-event-types-kafka-topic/