java - 将新的多线程使用者添加到组时是否会发生重新平衡
问题描述
假设只有一个主题有 20 个分区,一个消费者组只有一个消费者实例从该主题消费。
如果这个消费者实例有 20 个线程,在重新平衡后,Kafka 会将每个分区分配给一个线程,这是理想的(一个线程到一个分区)
但在这一点上;如果将另一个具有 20 个线程的消费者实例添加到此消费者组会发生什么?
我想选项会是这样的;
1 - 不会发生重新平衡,第二个消费者保持空闲状态。(因为 20 个线程已经足够 20 个分区了)
2 - 发生重新平衡,10 个分区分配给第一个使用者,其他 10 个分区分配给第二个使用者。(每个消费者 10 个线程将处于空闲状态)
实际上,我猜第二种选择更理想。因为我们通过添加另一个实例来拆分工作。
那么在这种情况下会发生什么情况呢?卡夫卡能顺利处理这个案子吗?或者添加另一个实例只是浪费?
编辑:我使用“实例”这个词作为微服务实例而不是 KafkaConsumer 实例顺便说一句。
解决方案
添加另一个 Kafka 消费者在这里没有用。第二个消费者中的所有线程都将保持空闲状态。
一个分区只能分配给一个消费者。虽然,反过来是不正确的。一个消费者可以从 n 个分区中读取数据。
虽然我不会说添加第二个消费者完全是浪费。您的第二个消费者将充当 HA。如果您的第一个消费者应用程序死了,第二个消费者应用程序将开始从 Kafka 获取数据。
推荐阅读
- javascript - 来自restapi的图像/ png响应未显示在浏览器中
- python-3.x - asset_url_for() 在烧瓶饼干切割器(flask-webpack)中返回 None
- laravel - 当laravel中的条带支付错误时如何在try/catch中重定向
- python - 为什么我得到 AttributeError: 'numpy.ndarray' 对象在 python 中没有属性 'replace'?
- python - 将两个数据帧存储在 alist 中,对它们执行操作,但原始 df 保持不变
- c# - 在程序生成中对齐生成点
- css - 是否有像 :is-showing-ellipsis 这样的 CSS 选择器?
- capybara - Capybara DayPickerInput 选择?
- css - Angular 材质:突出显示周末的日期选择器
- jakarta-ee - 用作 JCache (JSR-107) 提供程序时的 Infinispan 特定配置?