Kafka如何向多消费者发送消息

时间:2015-09-16 08:14:53

标签: java apache-kafka

我正在测试Kafka如何在具有高级Java APIS的多用户上工作。

创建了1个主题,包含5个分区,1个生产者和2个消费者(C1C2)。每个消费者只有一个帖子,partition.assignment.strategy设置为range

C1开始,它声称所有分区。然后C2开始,ZK将触发重新平衡。在此之后,C1将声明(0, 1, 2)C2将声明(3, 4)。它现在很好用。

然后我检查C1收到的消息,我希望消息只来自分区(0, 1, 2)。但是在我的日志文件中,我可以找到来自所有分区的消息,这也发生在C2中。就像partition.assignment.strategy设置为roundrobin一样。这是Kafka如何发送消息。或者那一定是个错误?

1 个答案:

答案 0 :(得分:0)

首先,只是为了纠正您的方法,与主题相比,拥有相同数量的消费者总是更好。通过这种方式,每个消费者只会声明一个分区,并且只会坚持使用该分区,您将从该分区获得准确的数据,并且也可以按顺序获取,而不是来自其他分区。

现在回答您的问题为什么要从消费者中的几乎所有分区获取数据,因为与分区相比,消费者的消费者较少,因此每个消费者线程都会尝试访问分区。

还有一种理论认为,如果与每个主题的分区数相比,消费者的数量更多,则有可能某些消费者永远不会获取任何数据。