每个生产者的 Kafka 主题
Kafka topic per producer
假设我有多个设备。每个设备都有不同类型的传感器。现在我想将每个传感器的每个设备的数据发送到 kafka。但我对卡夫卡主题感到困惑。用于处理此实时数据
每个设备都有 kafka 主题并且来自该设备的所有传感器将数据发送到特定的 kafka 主题是否很好,或者我应该创建一个主题并让所有设备将数据发送到该主题。
如果我选择第一种情况,我们将为每个设备创建主题,那么,
设备 1(传感器 A、B、C)-> 主题 1
设备 2(传感器 A、B、C)-> 主题 2
- 我可以创建多少个主题?
- 这个模型会扩展吗?
案例2:其中,向一个主题发送数据
Device1(传感器 A、B、C),Device2(传感器 A、B、C)....DeviceN....-> 主题
这会不会成为数据的瓶颈。因为它会表现为来自某些传感器的队列数据将在队列中落后并且不会被实时处理。
这个模型会缩放吗?
编辑
假设每个设备都与用户关联(多对一)。所以我想根据设备处理数据。所以我想处理数据的方式是,每个设备和它的传感器数据都会经过一些处理后交给用户。
说我关注
设备 1
-> 传感器 A - 主题 1 分区 1
-> 传感器 B - 主题 1 分区 2
设备 2
-> 传感器 A - 主题 2 分区 1
-> 传感器 B - 主题 2 分区 2
我想要一些 pub/sub 类型的行为。由于可以添加或删除设备,因此也可以添加或删除传感器。有没有办法动态创建这些主题和分区。
如果不是kafka,什么pub/sub会适合这种行为。
我会创建基于传感器的主题和基于设备的分区:
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.
等等。
我不知道你有什么样的传感器,但它们似乎在语义上属于同一组数据。借助分区,您可以进行并行处理。
但这取决于您希望如何处理数据:是一起处理传感器还是处理设备更重要?
这取决于你的语义:
- 一个主题是一个逻辑抽象,应该包含[=36=]数据,即具有相同语义意义的数据
- 一个主题可以通过其分区数轻松扩展
例如,如果您使用不同类型的传感器收集不同的数据,您应该为每种类型使用一个主题。
Since devices can be added or removed also sensors can be added or removed. Is there a way to create these topics and partition on the fly.
如果在每条消息中嵌入设备元数据(以区分日期的来源),您应该使用具有多个分区的单个主题来横向扩展。可以添加新主题或分区,但必须手动完成。对于添加新分区,一个问题可能是它可能会改变您的数据分布,从而可能破坏语义。因此,最佳做法是从一开始就对主题进行过度分区,以避免添加新分区。
如果没有嵌入的元数据,您将需要多个主题(例如,每个用户或每个设备)来区分消息来源。
作为替代方案,也许具有多个分区的单个主题 和 从 device/sensor 到分区的固定映射——通过使用自定义分区程序——会起作用,也。对于这种情况,添加新分区是没有问题的,因为您可以控制数据分布并保持稳定。
更新
有一个博客 post 讨论这个:https://www.confluent.io/blog/put-several-event-types-kafka-topic/
假设我有多个设备。每个设备都有不同类型的传感器。现在我想将每个传感器的每个设备的数据发送到 kafka。但我对卡夫卡主题感到困惑。用于处理此实时数据
每个设备都有 kafka 主题并且来自该设备的所有传感器将数据发送到特定的 kafka 主题是否很好,或者我应该创建一个主题并让所有设备将数据发送到该主题。
如果我选择第一种情况,我们将为每个设备创建主题,那么,
设备 1(传感器 A、B、C)-> 主题 1
设备 2(传感器 A、B、C)-> 主题 2
- 我可以创建多少个主题?
- 这个模型会扩展吗?
案例2:其中,向一个主题发送数据
Device1(传感器 A、B、C),Device2(传感器 A、B、C)....DeviceN....-> 主题
这会不会成为数据的瓶颈。因为它会表现为来自某些传感器的队列数据将在队列中落后并且不会被实时处理。
这个模型会缩放吗?
编辑
假设每个设备都与用户关联(多对一)。所以我想根据设备处理数据。所以我想处理数据的方式是,每个设备和它的传感器数据都会经过一些处理后交给用户。
说我关注
设备 1
-> 传感器 A - 主题 1 分区 1
-> 传感器 B - 主题 1 分区 2
设备 2
-> 传感器 A - 主题 2 分区 1
-> 传感器 B - 主题 2 分区 2
我想要一些 pub/sub 类型的行为。由于可以添加或删除设备,因此也可以添加或删除传感器。有没有办法动态创建这些主题和分区。
如果不是kafka,什么pub/sub会适合这种行为。
我会创建基于传感器的主题和基于设备的分区:
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.
等等。
我不知道你有什么样的传感器,但它们似乎在语义上属于同一组数据。借助分区,您可以进行并行处理。
但这取决于您希望如何处理数据:是一起处理传感器还是处理设备更重要?
这取决于你的语义:
- 一个主题是一个逻辑抽象,应该包含[=36=]数据,即具有相同语义意义的数据
- 一个主题可以通过其分区数轻松扩展
例如,如果您使用不同类型的传感器收集不同的数据,您应该为每种类型使用一个主题。
Since devices can be added or removed also sensors can be added or removed. Is there a way to create these topics and partition on the fly.
如果在每条消息中嵌入设备元数据(以区分日期的来源),您应该使用具有多个分区的单个主题来横向扩展。可以添加新主题或分区,但必须手动完成。对于添加新分区,一个问题可能是它可能会改变您的数据分布,从而可能破坏语义。因此,最佳做法是从一开始就对主题进行过度分区,以避免添加新分区。
如果没有嵌入的元数据,您将需要多个主题(例如,每个用户或每个设备)来区分消息来源。
作为替代方案,也许具有多个分区的单个主题 和 从 device/sensor 到分区的固定映射——通过使用自定义分区程序——会起作用,也。对于这种情况,添加新分区是没有问题的,因为您可以控制数据分布并保持稳定。
更新
有一个博客 post 讨论这个:https://www.confluent.io/blog/put-several-event-types-kafka-topic/