如果我有一个主题和多个具有相同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);
}发布于 2019-08-22 20:58:25
我认为Kafka消费者群体的工作方式可能与你预期的不同。没有一个卡夫卡消费者群体的领导者。消费者组订阅了主题,这些主题具有总数量的分区,X.Kafka然后对待组中的所有这些消费者,就好像它们是一个逻辑实体(假设如果消息被传递到其中的任何一个,那么它被传递到实体),并在组中可用数量的消费者中划分X个分区。如果你有比分区数量更多的消费者,额外的就会闲置。这是一个动态的分配系统。
您可能正在考虑leader,因为您正在考虑代理模型,在该模型中,主题的副本分布在多个代理中,其中一个代理是该主题的领导者。这不是消费者的工作方式。
如果你想确保某个特定的消费者是唯一获得消息的消费者,那么你需要给它自己的消费者组。
https://stackoverflow.com/questions/57606790
复制相似问题