0

我正在使用 node-rdkafka 连接到托管在云 vm 上的 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 服务器会在任何外部请求上返回超时。就像例如。我正在其中一个消费者中进行虚拟 api 调用获取:

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

如果我创建了 3 个以上的消费者实例,这段代码就会神秘地超时。虽然,如果有 3 个或少于 3 个消费者实例,它工作得非常好。上面的 fetch 调用在消费者的数据事件中被调用:

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

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

我尝试过的事情:

  • 更改消费者组名称。
  • 为特定主题添加更多分区。

对于托管 Kafka:我使用带有免费许可证密钥的https://lenses.io/box/ 。

4

1 回答 1

0

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

说明:

每个节点进程将至少运行 UV_THREADPOOL_SIZE + v8_thread_pool_size + 1 个线程。

UV_THREADPOOL_SIZE 和 v8_thread_pool_size 的当前默认值为 4。

来源:链接 Link2

于 2020-06-28T16:10:19.893 回答