我对卡夫卡有一个概念性的问题。
我们有很多机器在一个主题上充当消费者,有许多分区。这些机器在不同的硬件设置上运行,并且消费者的吞吐量将高于其他设备。
现在,消费者与一个或多个分区之间存在直接关联。
如何防止一个分区(慢速消费者)比其他分区(快速消费者)更快地累积未使用的消息,从而为分区带来不平衡。
我的一个想法就是定期强制重新平衡,但似乎这通常会将相同的消费者再次分配到同一个队列。如果他们被随机重新分配,将解决我的问题。
我很欣赏这方面的任何暗示。
谢谢你, 来自柏林的问候, 丹尼斯
答案 0 :(得分:2)
您不必为生产者使用默认分区程序,也不必在您的使用者中使用动态分区分配。您可以拥有一个高速分区池和一个单独的低速分区池,并手动(或随机)为每个分区池分配消息和使用者。
" ...而不是使用subscribe订阅主题,只需使用您要使用的完整分区列表调用assign(Collection)。
String topic = "foo";
TopicPartition partition0 = new TopicPartition(topic, 0);
TopicPartition partition1 = new TopicPartition(topic, 1);
consumer.assign(Arrays.asList(partition0, partition1));
"