如果我有一个主题和多个具有相同 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/