【问题标题】:Network timeout error if more than 3 consumer instances created using node-rdkafka如果使用 node-rdkafka 创建超过 3 个消费者实例,则网络超时错误
【发布时间】:2020-06-29 00:10:19
【问题描述】:

我正在使用 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/

【问题讨论】:

  • 我建议使用npmjs.com/package/kafkajs
  • 你说得对,我将包括 kafka 实例在内的所有内容都更改为版本。发现我们需要增加 libuv 线程池大小

标签: node.js express apache-kafka kafka-consumer-api librdkafka


【解决方案1】:

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

说明:

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

UV_THREADPOOL_SIZE 和 v8_thread_pool_size 为 4。

来源:LinkLink2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2015-02-18
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多