卡夫卡:基于重量的负载均衡消费者

时间:2016-05-04 15:56:25

标签: apache-kafka apache-zookeeper

我对Kafka很新,而且我目前已经被它提供的低得多的API所淹没,而RabbitMQ(我以前使用的消息代理)也是如此。我试图解决的问题如下:

我有3个主题:

  • 主题1:重量为10%
  • 主题2:重量为40%
  • 主题3:重量为50%

这三个主题充满了我必须处理的消息。工作人员阅读消息,进行一些处理并继续使用HTTP POST发送,该POST对所有3个主题共享带宽限制。

我需要什么:

如果队列2& 3是空的,处理后100%的可用带宽应该进入队列1   - 如果有多个队列上有消息,则应使用活动队列之间分配的“权重”来分配可用的带宽。

目前,除了'权重'分布之外,一切正常(现在,它们以循环方式分发)。优先级不是一种选择,因为在使用优先级时,优先级较高的消息将始终在优先级较低的消息之前传递。

Kafka有这样的选择吗?在RabbitMQ中,我解决了它为每个队列分配不同的预取值

1 个答案:

答案 0 :(得分:0)

据我所知,卡夫卡现在已经不太可能了。让我们记下一些事实:

  1. 可以对主题进行分区。
  2. 一个分区仅由单个消费者处理。没有两个消费者可以处理相同的分区。 (这可确保使用相同密钥对两条消息进行排序。)
  3. 结论:为主题获取更多CPU能力的唯一方法是拥有更多分区和相应数量的使用者。

    您可以根据权重设置分区数量:

    • 主题1:2分区
    • 主题2:8个分区
    • 主题3:10分区

    有多少消费者?使用10个消费者,0 ... 9,让他们按如下方式订阅主题:

    • 主题1:消费者0和1
    • 主题2:消费者2至9
    • 主题3:所有消费者

    现在每个消费者必须处理两个主题,当所有主题都有数据时,消费者比率反映了您要求的5:4:1。当前两个主题枯竭时,仍然有10个消费者根据需要研究主题3。