首页 文章

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

提问于
浏览
0

我需要消费来自不同kafka主题的消息,

  • 我应该为每个主题创建不同的消费者实例,然后根据分区数启动新的处理线程 . 要么

  • 我应该订阅来自单个消费者实例的所有主题,并且应该启动不同的处理线程

感谢和问候,梅加

2 回答

  • 1

    唯一的规则是你必须考虑 Kafka 的做法,而不是保证:

    • Kafka仅保证单个主题/分区的消息顺序 . 编辑:这也意味着如果您的单个主题Consumer因某种原因切换分区,您可能会无序地收到消息 .

    • 当您使用单个使用者订阅多个主题时,将为每个请求的主题为该使用者分配一个主题/分区对 .

    • 这意味着任何一个主题的传入消息的顺序都是正确的,但您不能保证主题之间的顺序是按时间顺序排列的 .

    • 您也无法保证在任何给定的时间段内您都会收到来自任何特定订阅主题的消息 .

    我最近遇到了一个错误,因为我的应用程序使用单个Consumer订阅了许多主题 . 每个主题是每个消息一个图像的实时图像馈送 . 由于所有主题始终都有新图像,因此每个poll()仅返回从第一个主题到注册的图像 .

    如果处理所有消息很重要,则需要确保每个消费者可以比创建消息更快地处理来自其所有订阅主题的消息 . 如果它不能,你需要更多的消费者提交同一组的读取,或者你必须对某些消息可能永远不会被处理的事实感到满意 .

    显然,一个消费者/主题是最简单的,但它确实增加了一些额外消费者的开销 . 你必须根据自己的需要确定这是否重要 .

    正确回答您的问题的唯一方法是评估您的应用程序的特定要求和功能,并构建一些在Kafka的限制范围内工作的东西 .

  • 3

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

相关问题