amazon-web-services - Kafka 用于单包物联网集群

我有一些物联网设备将原始数据发送到 Kafka 中的 store,然后与消费者一起处理并将其保存到数据库中。

设想:

物联网设备以数据包(字节)的形式发送传感器数据,您需要 10 个原始数据包来解码它的 value (我可以在物联网中强制发送 10 个数据包组合为一个数据包,但我希望物联网只关注单个数据包,所以将来我可以修改算法以在云上处理 20、30 个数据包)。如果我对所有物联网使用相同的主题,那么消费者必须等到它收到 10 个数据包才能开始处理,我认为这可能会导致一些问题。

问题:

  • 最初,我想为每个物联网设备创建一个带有分区的主题,但 Kafka 不支持动态分区。 (可以在运行时添加或移除更多物联网设备。)

  • 另一种解决方案是为每个具有 1 个分区的 IoT 设备创建一个主题。

  • 此外,每个 IoT 设备的 1 个主题的上述方法可能会强制为每个添加的 IoT 设备使用一个消费者(这可以改进吗?)

如果可能的话,我正在寻找一个更好、更有效的实施方案来解决这个问题。

回答1

简而言之,Kafka 主题作为文件日志进行物理处理。分区用于改进并行计算,因此您可以在消费者组中拥有更多客户端 ID,每个客户端 ID 从其自己的分区中读取。在全球范围内,您正在从消费者组读取,而不是从附加到分区的单个客户端 ID 读取。因此,例如,如果您在一个主题中有 4 个分区,您可以使用相同的组 ID 设置 4 个线程使用者(每个都有自己唯一的客户端 ID)。不要像你说的那样试图用分区管理你的问题。如果要将消息关联到设备,可以考虑以下 3 种方式:

  • 使用设备 ID 为每个数据包设置一种标头(如果需要,还可以提供其他信息,例如序列号)
  • 使用 Kafka 消息的 key 特性(例如,如果您有一个由 10 个数据包组成的消息,这 10 个数据包中的每一个都可以具有相同的 key 来标识相同的整个消息)
  • 您可以为每个设备使用一个主题,但在我看来,这不是一个好主意,特别是如果您有很多设备(并且您必须订阅动态消费者)

最后,如果我真的理解了你的问题,我建议你把包头和消息keys结合起来。

相似文章

随机推荐

最新文章