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

Apache kafka 如何在消费者组kafka中动态添加消费者,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我应该如何知道何时我必须在消费者群体中衡量消费者。当有一个快速生产者时,消费者扩展的触发因素是什么?在卡夫卡中,在创建主题时,需要提供分区的数量和复制因子 假设有一个主题名为TEST,包含10个分区,对于数据的并行消费,需要创建包含10个消费者的消费者组,其中每个消费者将使用各自分区中的数据 这里是一个陷阱,如果主题有10个分区,而消费者组有12个消费者,那么两个消费者将保持空闲状态,直到其中一个消费者死亡 如果主题有10个分区,而消费者组有8个消费者,则6个消费者将使用6个分区(一个消费者->

我应该如何知道何时我必须在消费者群体中衡量消费者。当有一个快速生产者时,消费者扩展的触发因素是什么?

在卡夫卡中,在创建主题时,需要提供分区的数量和复制因子

假设有一个主题名为TEST,包含10个分区,对于数据的并行消费,需要创建包含10个消费者的消费者组,其中每个消费者将使用各自分区中的数据

这里是一个陷阱,如果主题有10个分区,而消费者组有12个消费者,那么两个消费者将保持空闲状态,直到其中一个消费者死亡

如果主题有10个分区,而消费者组有8个消费者,则6个消费者将使用6个分区(一个消费者->一个分区)中的数据,而剩下的两个消费者将负责使用两个分区(一个消费者->两个分区)中的数据。它的意思是最后两个使用者使用来自四个分区的数据

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


无论何时向消费者组添加或删除任何新消费者,重新定位都由卡夫卡负责。

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

卡夫卡文件:

  • 生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果发送了记录M1
    由与记录M2相同的生产者发送,首先发送M1,然后发送M1
    偏移量将低于M2,并在日志中显示得更早
  • 使用者实例按记录在日志中的存储顺序查看记录
如果在分区数量方面添加更多分区和更多使用者,则无法满足消息的排序保证

假设您有10个分区,并且密钥数为102,则此消息将发送到分区:
102%10=2

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

正如您所看到的,使用这种方法不可能保证使用相同密钥对消息进行排序


注意:卡夫卡默认使用
2(record.key())%num分区算法。上面的计算只是一个例子。

一个简单的方法是获得消费者滞后(这可以计算为提交偏移量和开始偏移量之间的差值),如果在最后n次中计算的滞后量增加,则可以放大,反之亦然。你可能需要考虑一些边缘情况,例如,如果消费者已经下降,滞后将增加,自动缩放功能可能产生更多的线程/机器)。需要一个解决方案来动态地自动缩放消费者,而不是在消费者组中预先添加许多消费者。我正在寻找基于负载的动态缩放。