java - 如何改变消费者之间的领导者?

标签 java apache-kafka

如果我有一个主题和多个具有相同 groupId 的消费者,则只有一个消费者(领导者)应该接收消息。我想选择哪个消费者将成为领导者并在java中接收消息,但我不知道该怎么做。

这是我的一位消费者的代码。是否有一些属性可以选择领导者?

@KafkaListener(topics = {"topic_kafka","topic_kafkaaa"}, groupId = "group_id")
    public void consume(String message) throws IOException {
        log.info("Consumed message in {} : {}", TOPIC, message);
    }

最佳答案

我认为 Kafka 消费者组的工作方式可能与您预期的不同。卡夫卡消费者组没有领导者。一个消费者组订阅了主题,这些主题的分区总数为 X。然后 Kafka 会将该组中的所有消费者视为一个逻辑实体(假设如果一条消息传递给其中任何一个,则其交付给实体)并将 X 个分区划分为组中可用数量的消费者。如果消费者的数量多于分区的数量,则多余的部分将闲置。它是一个动态分配系统。

您可能正在考虑领导者,因为您正在考虑代理模型,其中一个主题的副本分布在多个代理中,并且其中一个代理是该主题的领导者。这不是消费者的工作方式。

如果您想确保特定消费者是唯一接收消息的消费者,那么您需要为其提供自己的消费者组。

关于java - 如何改变消费者之间的领导者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606790/

相关文章:

java - 在 LibGDX 中移动 Sprite

android - 移动消费者的消息传递方法

node.js - 如何在Nodejs中检查Kafka主题是否存在

python - 如何在Kafka中发布字典?

go - Kafka 0.11/Golang Sarama 版本支持

apache-kafka - Kafka 不会删除主题中的旧消息

java - Apache POI XSSF 读取 excel 文件

java - 产生错误输出的多级静态嵌套类

java - 使用 RabbitMq MessageListenerContainer 的 Reactor Flux 超时

java - Java 中的动画 GIF?