比如说 - Kafka 主题名称 - topic_X topic_X 在 Kafka Broker 中有 500 个分区
现在我们为 Consumer_X 组设置了 500 个消费者来处理每个分区。
在哪里运行这 500 名消费者?单机500线程?这可能吗 - 因为线程与核心有关系
如何做到这一点?
即使我们在 Consumer_X 组中减少到 100 个消费者(1 个消费者 =5 个分区),那么上述问题也同样有效
请解释一下
比如说 - Kafka 主题名称 - topic_X topic_X 在 Kafka Broker 中有 500 个分区
现在我们为 Consumer_X 组设置了 500 个消费者来处理每个分区。
在哪里运行这 500 名消费者?单机500线程?这可能吗 - 因为线程与核心有关系
如何做到这一点?
即使我们在 Consumer_X 组中减少到 100 个消费者(1 个消费者 =5 个分区),那么上述问题也同样有效
请解释一下
消费者组的主要目的是将工作拆分到多台机器上。每个线程运行一个消费者也是可能的,但在高负载主题场景中,它不会带来任何价值。
从 Kafka 轮询记录非常有效。通常,处理它们是瓶颈。因此,主要思想是将工作拆分到多台机器上,以便每个消费者应用程序都能跟上工作负载。
只有在您的用例中,分区和消费者之间的 1:1 关系才有意义:
除非您正在处理需要尽快处理每条记录的高吞吐量用例,否则分区和消费者之间的 1:1 成本太高,因为每个消费者线程都不是免费的。例如,不建议将它们放在同一个盒子中,因为您可能只有很少的内核可用并且更高的线程数会导致不断的上下文切换,从而降低吞吐量。解决方案是将这些线程分布在多个盒子上,但是它们……成本问题又来了。
我会衡量拥有 100:1 的效率。这似乎是合理的,特别是如果入口吞吐量不高并且一些消费者滞后是可以容忍的。