我有一个kafka原型,我创建了
为每个消费者分配1个分区。制作人向这两个经纪人发送了100条消息。然后每个消费者拉动并处理50条消息。消费者#2在慢速机器上运行:处理分配的消息所需的时间比消费者#1多两倍。因此消费者#1首先完成处理并且闲置。
我希望消费者#1从消费者#2中提取一些消息,以便加速处理。像multiprocessing.queue
这样的常规共享队列本身就是这样做的。
答案 0 :(得分:1)
您可以为已创建的主题添加更多分区,让我们说4个分区。
./kafka-topics.sh --zookeeper zk_host:port --alter --topic <topic-name> --partitions <num-partitions>
然后在使用者一侧,您可以指定要使用的分区。在这种特定情况下,快速消费者可以从分区0到2消耗,而慢速消费者只能从分区3消耗。
在消费者上执行手动分区分配的过程因您使用的库而异。
在Java中,您可以查看assign()函数(KafkaConsumer)。