如何管理 librdkafka 消费者的线程和内存?
How to manage threads and memory of librdkafka consumer?
我尝试使用 librdkafka C++ 库。我注意到我的消费者 (RdKafka::KafkaConsumer
) 订阅的每个新主题都会生成 4 个新线程。每个订阅的主题还使用大约 30 MB 的虚拟内存。
我的客户 application/consumer 需要使用大约 2000 个主题。然后这些将转换为我的应用程序使用大约 8000 个线程和 60 GB 的虚拟内存。假设我需要大约 20 个分区来实现所需的吞吐量,我将需要大约 20 个应用程序实例。如果所有应用程序实例都位于单个服务器中,则该服务器需要能够 运行 至少同时运行 8000 x 20 = 160,000 个线程并使用 60 x 20 = 1.2 TB 的虚拟内存。
160,000 个线程和 1.2 TB 的虚拟内存对于单个服务器来说是非常大的。因此,可以使用多个服务器来容纳实例以分配负载。不过,分割出来的数字还是挺让人摸不着头脑的。
有没有办法在使用 librdkafka 库时以某种方式控制客户端应用程序的线程和内存数量?
单个消费者可以从 topics/partitions 的任意数量(嗯,合理数量)消费,您不应该为每个主题创建单独的消费者。
另见https://github.com/edenhill/librdkafka/wiki/FAQ#number-of-internal-threads
我尝试使用 librdkafka C++ 库。我注意到我的消费者 (RdKafka::KafkaConsumer
) 订阅的每个新主题都会生成 4 个新线程。每个订阅的主题还使用大约 30 MB 的虚拟内存。
我的客户 application/consumer 需要使用大约 2000 个主题。然后这些将转换为我的应用程序使用大约 8000 个线程和 60 GB 的虚拟内存。假设我需要大约 20 个分区来实现所需的吞吐量,我将需要大约 20 个应用程序实例。如果所有应用程序实例都位于单个服务器中,则该服务器需要能够 运行 至少同时运行 8000 x 20 = 160,000 个线程并使用 60 x 20 = 1.2 TB 的虚拟内存。
160,000 个线程和 1.2 TB 的虚拟内存对于单个服务器来说是非常大的。因此,可以使用多个服务器来容纳实例以分配负载。不过,分割出来的数字还是挺让人摸不着头脑的。
有没有办法在使用 librdkafka 库时以某种方式控制客户端应用程序的线程和内存数量?
单个消费者可以从 topics/partitions 的任意数量(嗯,合理数量)消费,您不应该为每个主题创建单独的消费者。
另见https://github.com/edenhill/librdkafka/wiki/FAQ#number-of-internal-threads