【问题标题】:How to stop concurrent consumer consuming message in KAFKA?如何在 KAFKA 中停止并发消费者消费消息?
【发布时间】:2022-01-12 00:08:06
【问题描述】:

我有一个简单的 Kafka 消费者微服务应用程序,它使用来自某个主题的消息,并且同一个应用程序在两个不同的池中运行。

因此,当消息从生产者生成时,我的应用程序尝试使用来自主题的消息,并且仅由一个池中的一个使用。

如何停止从消费者 kafka 读取并发消息。我想在两个池中使用相同的消息。

这种情况的可能解决方案是什么

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

    如果你的主题只有一个分区,那么只有一个相同group.id 设置的消费者可以读取这个分区。如果您必须有一个分区来进行排序,那么您需要唯一的组 ID 来在多个消费者中读取此数据。

    否则,如果主题有多个分区,那么应该有 2 个消费者在积极阅读它们。

    如果不打电话给poll(),你会“停止”阅读。

    【讨论】:

    • 感谢@OneCricketeer,是的,主题有多个分区,然后2个消费者同时部署在云上阅读。您能否通过不调用 poll() 来详细说明停止阅读
    • 好吧,那我不明白你说的“只被一个池消耗”是什么意思。一条记录只会进入一个分区,因此只有一个消费者会获得该记录。关于停止,而不是做while (true) { consumer.poll(); },你不能使用循环,或者你可以通过替换布尔条件来停止它。你甚至可以拨打consumer.close()
    • @LearnThings 消费者组不会跨消费者实例共享数据。这只是 Kafka Streams API 的一个功能,用于 KTable 访问,而不是普通的消费者流
    • "仅由一个池消耗" - 因此该应用程序在云中部署了两个实例。因此,当生产者现在在消费者端基于分区发布消息时,将发生分区的重新平衡。但我不想在这里重新平衡我想要的是我希望我的消费者都消费该记录,不应该发生并发
    • @LearnThings 生产者不会引起再平衡。永远不可能让同一组中的多个消费者阅读同一事件。
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多