如果使用 node-rdkafka 创建的消费者实例超过 3 个,则出现网络超时错误

Network timeout error if more than 3 consumer instances created using node-rdkafka

我正在使用 node-rdkafka 连接到云虚拟​​机上托管的 Kafka 实例。 我有多个消费者,每个消费者都使用以下 Kafka 配置:

"group.id": "librd-test",
"metadata.broker.list": `${process.env.KAFKA_HOST}:9092`,
"socket.keepalive.enable": true,
'enable.auto.commit': true,
"debug": "all"

只有 5 个主题,只有当我创建的消费者实例少于 4 个时,我的消费者代码才能正常工作。如果我添加超过 3 个,我的 nodejs express 服务器 returns 任何外部请求都会超时。 像例如。我正在其中一个消费者中进行虚拟 api 调用提取:

 const tmp = await fetch('https://jsonplaceholder.typicode.com/todos/1', {timeout: 10000})
                .then(response => response.json());

如果我创建了 3 个以上的消费者实例,这段代码会莫名其妙地超时。虽然,如果有 3 个或少于 3 个消费者实例,它工作得很好。上面的获取调用在消费者的数据事件中被调用:

 consumer.on("data", async function (m) {
        counter++;
        consumer.commit(m);
        // Fetch Call
        const tmp = await fetch('https://jsonplaceholder.ty....
       

为什么我在添加更多消费者时出现这些网络超时?

我尝试过的事情:

对于托管 Kafka:我正在使用 https://lenses.io/box/ 和免费许可证密钥。

对于将来遇到这个问题的人: 请在您的节点应用程序中将 UV_THREADPOOL_SIZE 设置为大于 4 的值作为环境变量。

解释:

Each node process will have at least UV_THREADPOOL_SIZE + v8_thread_pool_size + 1 threads running.

the current default for both UV_THREADPOOL_SIZE and v8_thread_pool_size is 4.

来源:Link Link2