Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何平衡不对称计算机上的用户负载?_Python_Apache Kafka - Fatal编程技术网

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个分区
每个使用者分配一个分区。制作人将100条消息推送到两个代理。然后,每个消费者分别提取和处理50条消息。consumer#2在速度较慢的机器上运行:处理分配给它的消息所需的时间是consumer#1的两倍。因此,消费者#1首先完成其处理,然后空闲

我希望consumer#1从consumer#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计数启动进程