【问题标题】:Kafka topic per producer每个生产者的 Kafka 主题
【发布时间】:2017-02-05 17:59:09
【问题描述】:

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

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

如果我采用第一种情况,我们将为每个设备创建主题,然后,

设备1(传感器A、B、C)->主题1

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

  1. 我可以创建多少个主题?
  2. 此模型可以缩放吗?

案例2:哪里,向一个主题发送数据

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

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

  2. 这个模型可以缩放吗?

编辑

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

说我在关注

设备1

-> 传感器 A - Topic1 分区 1

-> 传感器 B - Topic1 分区 2

设备2

-> 传感器 A - Topic2 分区 1

-> 传感器 B - Topic2 分区 2

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

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

【问题讨论】:

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


    【解决方案1】:

    这取决于你的语义:

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

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

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

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

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

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

    更新

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

    【讨论】:

    • 同意。最好的方法是在每条消息中包含多路分解元数据。
    【解决方案2】:

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

    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.
    

    等等。

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

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

    【讨论】:

    • 我喜欢最后一行。在我的例子中,传感器已经统一以 1 为时间索引,所有时间间隔都相同。我需要用传感器的值标记每一行。如:如果 A> 5 且 B
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2021-10-22
    • 1970-01-01
    • 2020-06-25
    • 2021-08-26
    • 2018-07-27
    相关资源
    最近更新 更多