首页 > 解决方案 > 将新的多线程使用者添加到组时是否会发生重新平衡

问题描述

假设只有一个主题有 20 个分区,一个消费者组只有一个消费者实例从该主题消费。

如果这个消费者实例有 20 个线程,在重新平衡后,Kafka 会将每个分区分配给一个线程,这是理想的(一个线程到一个分区)

但在这一点上;如果将另一个具有 20 个线程的消费者实例添加到此消费者组会发生什么?

我想选项会是这样的;

1 - 不会发生重新平衡,第二个消费者保持空闲状态。(因为 20 个线程已经足够 20 个分区了)

2 - 发生重新平衡,10 个分区分配给第一个使用者,其他 10 个分区分配给第二个使用者。(每个消费者 10 个线程将处于空闲状态)

实际上,我猜第二种选择更理想。因为我们通过添加另一个实例来拆分工作。

那么在这种情况下会发生什么情况呢?卡夫卡能顺利处理这个案子吗?或者添加另一个实例只是浪费?

编辑:我使用“实例”这个词作为微服务实例而不是 KafkaConsumer 实例顺便说一句。

标签: javamultithreadingapache-kafkakafka-consumer-api

解决方案


添加另一个 Kafka 消费者在这里没有用。第二个消费者中的所有线程都将保持空闲状态。
一个分区只能分配给一个消费者。虽然,反过来是不正确的。一个消费者可以从 n 个分区中读取数据。
虽然我不会说添加第二个消费者完全是浪费。您的第二个消费者将充当 HA。如果您的第一个消费者应用程序死了,第二个消费者应用程序将开始从 Kafka 获取数据。


推荐阅读