使用来自多个kafka主题的消息的最佳实践是什么?

3lxsmp7m  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(399)

我需要从不同的Kafka主题中收集信息,
我应该为每个主题创建不同的使用者示例,然后根据分区数启动一个新的处理线程吗。或者
我应该从单个使用者示例订阅所有主题,并且应该启动不同的处理线程
谢谢和问候,梅加

dojqjjoe

dojqjjoe1#

唯一的规则是,你必须说明Kafka做了什么,但不能保证:
kafka只保证单个主题/分区的消息顺序。编辑:这也意味着如果您的单主题使用者出于某种原因切换分区,您可能会使消息无序。
当您使用单个使用者订阅多个主题时,该使用者将为每个请求的主题分配一个主题/分区对。
这意味着任何一个主题的传入消息的顺序都是正确的,但不能保证主题之间的顺序是按时间顺序排列的。
您也不能保证在任何给定的时间段内都会收到来自任何特定订阅主题的消息。
我最近有一个bug,因为我的应用程序订阅了许多主题,只有一个使用者。每个主题都是一个实时的图像源,每条消息有一个图像。因为所有的主题总是有新的图像,所以每个poll()只返回第一个要注册的主题的图像。
如果处理所有消息很重要,则需要确保每个使用者处理来自其所有订阅主题的消息的速度都比创建消息的速度快。如果做不到这一点,你要么需要更多的消费者在同一个组中提交读取,要么你必须接受这样一个事实:有些消息可能永远不会被处理。
显然,一个使用者/主题是最简单的,但它确实会增加额外使用者的开销。你得根据自己的需要来决定这是否重要。
正确回答您的问题的唯一方法是评估您的应用程序的特定需求和功能,并构建在这些需求和功能范围内以及在kafka的限制范围内工作的东西。

7tofc5zh

7tofc5zh2#

这实际上取决于应用程序的逻辑—它是否需要在一个地方同时查看所有消息。有时,根据应用程序的业务逻辑,单个主题的使用可能更容易实现。

相关问题