Kafka - 具有不同速度的消费者

5
我对Kafka有一个概念问题。
我们有许多机器在一个主题上充当消费者,这些机器运行在不同的硬件设置上,并且会有吞吐量更高的消费者。现在,一个消费者与一个或多个分区之间存在直接关系。
我该如何防止一个分区(慢速消费者)比其他分区(快速消费者)更快地累积未消费的消息,从而导致分区不平衡?
我想到的一个想法是定期强制重新平衡,但似乎通常会再次将相同的消费者分配给相同的队列。如果它们被随机重新分配,那么我的问题就解决了。
我会感激任何关于此问题的提示。
谢谢, 来自柏林的问候, Dennis

在“如何分区”问题中,看起来同一消费者内的一个分区累积的数据量并不比其他分区少。因此,如果您的快速消费者有更多的分区,那看起来很好。 问题似乎出现在一个消费者中只有一个分区和较慢的机器时,它会轮询大量的消息,但机器没有足够的能力来处理所有这些消息?如果这是问题,可以通过更改“max.partition.fetch.bytes”或“max.poll.records”属性文件来限制轮询完成的消息数量。 - Paresh
如果您在“慢”机器上运行单个消费者,它能处理单个分区的负载吗? - Luciano Afranllie
1个回答

3

您不必为生产者使用默认分区器,也不必在消费者中使用动态分区分配。您可以拥有一个高速分区池和一个低速分区池,并手动(或随机)将消息和消费者分配到每个分区池中。

"...而不是使用subscribe订阅主题,您只需使用assign(Collection)调用并提供要消费的所有分区的完整列表即可。

 String topic = "foo";
 TopicPartition partition0 = new TopicPartition(topic, 0);
 TopicPartition partition1 = new TopicPartition(topic, 1);
 consumer.assign(Arrays.asList(partition0, partition1)); 

"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接