如何在非对称计算机上平衡消费者负载?

时间:2017-01-30 20:44:45

标签: python apache-kafka

我有一个kafka原型,我创建了

  • 1个制作人,
  • 2经纪人,
  • 同一组中的2位消费者,
  • 1个主题,包含2个分区。

为每个消费者分配1个分区。制作人向这两个经纪人发送了100条消息。然后每个消费者拉动并处理50条消息。消费者#2在慢速机器上运行:处理分配的消息所需的时间比消费者#1多两倍。因此消费者#1首先完成处理并且闲置。

我希望消费者#1从消费者#2中提取一些消息,以便加速处理。像multiprocessing.queue这样的常规共享队列本身就是这样做的。

  1. 如何在这样的用例中平衡消费者负载?

1 个答案:

答案 0 :(得分:1)

您可以为已创建的主题添加更多分区,让我们说4个分区。

./kafka-topics.sh --zookeeper zk_host:port --alter --topic <topic-name> --partitions <num-partitions>

然后在使用者一侧,您可以指定要使用的分区。在这种特定情况下,快速消费者可以从分区0到2消耗,而慢速消费者只能从分区3消耗。

在消费者上执行手动分区分配的过程因您使用的库而异。

在Java中,您可以查看assign()函数(KafkaConsumer)。