Python 如何平衡不对称计算机上的用户负载?
我有一个卡夫卡原型,我在那里创作Python 如何平衡不对称计算机上的用户负载?,python,apache-kafka,Python,Apache Kafka,我有一个卡夫卡原型,我在那里创作 1制片人 2名经纪人 同一组中的2名消费者 1个主题和2个分区 每个使用者分配一个分区。制作人将100条消息推送到两个代理。然后,每个消费者分别提取和处理50条消息。consumer#2在速度较慢的机器上运行:处理分配给它的消息所需的时间是consumer#1的两倍。因此,消费者#1首先完成其处理,然后空闲 我希望consumer#1从consumer#2中提取一些消息,以加快处理速度。一个常规的共享队列,如多处理。队列以本机方式执行此操作 在这样的用例中,
- 1制片人
- 2名经纪人
- 同一组中的2名消费者
- 1个主题和2个分区
多处理。队列
以本机方式执行此操作
您可以向已经创建的主题添加更多分区,比如说4个分区
./kafka-topics.sh --zookeeper zk_host:port --alter --topic <topic-name> --partitions <num-partitions>
/kafka-topics.sh--zookeeper zk_host:port--alter--topic--partitions
然后在使用者方面,您可以指定要从哪个分区使用。在这种特定情况下,快速消费者可以从分区0到2消费,而慢速计算机只能从分区3消费
对使用者执行手动分区分配的过程因使用的库而异
在Java中,您可以检查函数(KafkaConsumer)。
assign
似乎确实可以完成这项工作,但它与subscribe
不兼容。卡夫卡没有自动负载平衡吗?作为一种解决方法,我考虑创建与消息批大小(16)一样多的分区。因此,最慢的机器最多只会在一条消息中减慢速度。在我看来,Kafka中实现的负载平衡逻辑不是基于使用者的性能,而是基于使用者和分区的数量,您可以控制在生产者端发布消息的分区,也可以在使用者端重新分配分区。最后一个选项是(这是一个解决方法,而不是其他方法),下面是我的4个分区示例,它是在快速机器上生成3个处理进程,在慢速机器上生成1个处理进程,这样您就可以强制Kafka遵循所需的行为。是的,根据cpu计数启动进程