一个 Java Kafka Consumer 需要多少操作系统资源?

How many operating system resources is needed for one Java Kafka Consumer?

我要用几十万KafkaConsumer。例如,对于某些架构模式,我需要 100_000 个消费者。我在想,可以吗?或者我应该重构我的系统并为整个系统使用很少的消费者(例如,10 消费者而不是 100_000)。

所以,我的问题是:

  1. KafkaConsumer 中是否有 connection pool,或者每个消费者都创建自己与 kafka broker 的连接?
  2. KafkaConsumer中是否有thread pool,或者每个消费者创建自己的线程(我希望没有)。
  3. 每个 KafkaConsumer 的平均内存消耗是多少?
  4. 您如何看待这样的架构模式?

1,2) 消费者从作为分区领导者的代理之一请求元数据。每个消费者都能够处理来自单个线程的所有 IO,因为 Java 客户端是围绕一个由 poll() 驱动的事件循环设计的。您还可以构建多线程消费者,但您需要注意偏移量管理。有关 Java 客户端实施的更多详细信息,请参阅 Confluent's documentation

3) 根据Apache Kafka and Confluent Enterprise Reference architecture,

Consumers use at least 2MB per consumer and up to 64MB in cases of large responses from brokers (typical for bursty traffic)

4) 您提到的消费者数量庞大,因此您需要一个很好的理由来吸引 100,000 名消费者。虽然这取决于场景,但即使是 Netflix 也应该比这少得多。