每个制片人的卡夫卡主题

时间:2016-09-27 23:40:02

标签: apache-kafka real-time scalability publish-subscribe bigdata

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

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

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

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

Device2(传感器A,B,C) - >标题2

  1. 我可以创建多少主题?
  2. 这个模型会缩放吗?
  3. 案例2:将数据发送到一个主题的位置

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

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

    2. 此模型会扩展吗?

    3. 修改

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

      说我做了以下

      Device1

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

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

      Device2

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

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

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

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

2 个答案:

答案 0 :(得分:5)

这取决于你的语义:

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

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

  

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

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

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

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

<强>更新

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

答案 1 :(得分:0)

我会根据设备创建基于传感器和分区的主题:

A sensor on Device 1 -> topic A, partition 1.
A sensor on Device 2 -> topic A, partition 2.
B sensor on Device 2 -> topic B, partition 2.

等等。

我不知道你有什么样的传感器,但它们似乎在语义上属于同一组数据。在分区的帮助下,您可以进行并行处理。

但这取决于您希望如何处理数据:将传感器一起处理或设备更重要吗?