如何在消费者组kafka中动态添加消费者

时间:2020-03-05 17:20:08

标签: apache-kafka kafka-producer-api

我该如何知道何时必须扩大消费群体中的消费群体。如果有快速的生产者,消费者扩大规模的诱因是什么?

3 个答案:

答案 0 :(得分:0)

在Kafka中创建主题时,需要提供分区复制因子

让我们说一个名为 TEST 的主题,其中包含10个分区,因为要并行使用数据,需要创建具有10个使用方的使用方组,每个使用方将在各自的分区中使用数据。< / p>

这就是问题所在,如果主题具有 10个分区,并且消费者组具有 12个消费者,则两个消费者保持闲置状态,直到其中一位消费者死亡。

如果主题有10个分区,并且使用者组有 8个使用者,则 6个使用者将使用 6个分区(一个使用者->一个分区)中的数据),而其余的两个使用者将负责使用两个分区(一个使用者-> 2个分区)中的数据。这意味着最后两个消费者使用了来自四个分区的数据。

因此,第一件事就是确定您的kafka主题的分区数,更多的分区意味着更多的并行性。

kafka会在将任何新消费者添加到消费者组重新平衡时予以照顾。

答案 1 :(得分:0)

实际上,自动缩放不是一个好主意,因为在Kafka中,消息顺序在分区中得到保证。

来自Kafka文档:

    生产者发送到特定主题分区的
  • 消息将按照发送顺序附加。也就是说,如果发送记录M1
    由同一生产者作为记录M2,并且先发送M1,然后发送M1
    偏移量将小于M2,并在日志中更早显示。
  • 使用者实例按记录在日志中的存储顺序查看记录。

如果就分区数量添加更多的分区和更多的使用者,那么您将无法满足消息的订购保证。

假设您有10个分区,密钥数为102,则此消息将发送到分区:<StackLayout> <Button Text="Delete"/> <StackLayout Orientation="Horizontal"> <Label HorizontalOptions="StartAndExpand" /> <CollectionView WidthRequest="100"> <CollectionView.ItemsSource> <x:Array Type="{x:Type x:String}"> <x:String>Baboon</x:String> <x:String>Capuchin Monkey</x:String> <x:String>Blue Monkey</x:String> <x:String>Squirrel Monkey</x:String> <x:String>Golden Lion Tamarin</x:String> <x:String>Howler Monkey</x:String> <x:String>Japanese Macaque</x:String> </x:Array> </CollectionView.ItemsSource> </CollectionView> <Label HorizontalOptions="EndAndExpand" /> </StackLayout> </StackLayout>

但是,例如,如果您将分区数增加到15,则具有相同密钥(102)的消息将被发送到另一个分区:102 % 10 = 2

如您所见,使用这种方法不可能保证使用相同密钥的消息的顺序。

注意:默认情况下,Kafka使用102 % 15 = 12算法。上面的计算只是一个例子。

答案 2 :(得分:0)

一种简单的方法是获取使用者滞后(可以将其计算为提交的偏移量与Beginning_offset之间的差),如果最近n次计算的滞后在增加,则可以扩大,反之亦然。例如,您可能需要考虑一些极端情况,以防万一消费者下降并且滞后会增加,并且自动缩放功能可能会产生更多线程/机器。