【问题标题】:Reconnecting to Kafka with node-rdkafka is slow & inconsistent使用 node-rdkafka 重新连接到 Kafka 速度慢且不一致
【发布时间】:2022-01-28 21:16:33
【问题描述】:

我在一些本地 docker 容器中运行 kafka 和 zookeeper。

我有一个 node.js 代码库,它使用 node-rdkafka 作为消费者连接到 kafka。我们将此代码库称为“消费者”

消费者使用此处显示的代码连接到 kafka: https://github.com/Blizzard/node-rdkafka/blob/master/examples/consumer-flow.md

当尝试连接到现有的 Kafka 实例时,我得到以下输出:

consumer ready.{"name":"rdkafka#consumer-1"}

但是我接收和处理消息的代码永远不会触发,或者在开始触发之前需要几分钟(有时显然是 5 到 10 分钟)。

为了确保消息正在生成,我使用kafka 附带的脚本kafka-console-consumer.sh 来观察消息流。果然,大量数据即将到来。

似乎连接有时会失败,有时需要很长时间才能连接。

这是这段时间的 kafka 日志:

kafka_1      | [2017-04-27 20:55:37,963] INFO [Group Metadata Manager on Broker 1001]: Removed 0 expired offsets in 1 milliseconds. (kafka.coordinator.GroupMetadataManager)
kafka_1      | [2017-04-27 20:55:48,576] WARN Attempting to send response via channel for which there is no open connection, connection id 1 (kafka.network.Processor)
kafka_1      | [2017-04-27 20:55:53,185] INFO [GroupCoordinator 1001]: Preparing to restabilize group video-caption-consumer with old generation 24 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 20:56:18,577] INFO [GroupCoordinator 1001]: Stabilized group video-caption-consumer generation 25 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 20:56:18,626] INFO [GroupCoordinator 1001]: Assignment received from leader for group video-caption-consumer for generation 25 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 20:58:24,951] INFO [GroupCoordinator 1001]: Preparing to restabilize group video-caption-consumer with old generation 25 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 20:58:51,643] INFO [GroupCoordinator 1001]: Stabilized group video-caption-consumer generation 26 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 20:58:51,648] INFO [GroupCoordinator 1001]: Assignment received from leader for group video-caption-consumer for generation 26 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 21:01:14,231] INFO [GroupCoordinator 1001]: Preparing to restabilize group video-caption-consumer with old generation 26 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 21:01:16,414] INFO [GroupCoordinator 1001]: Stabilized group video-caption-consumer generation 27 (kafka.coordinator.GroupCoordinator)
kafka_1      | [2017-04-27 21:01:16,419] INFO [GroupCoordinator 1001]: Assignment received from leader for group video-caption-consumer for generation 27 (kafka.coordinator.GroupCoordinator)

它只是无限重复这种模式。

想法?

对于它的价值,我也使用了一段时间的 kakfa-node 模块;有类似的问题,但我不能确定是否是同样的问题。

【问题讨论】:

  • 您使用哪种配置选项?这看起来消费者组正在努力重新平衡,这可能表明您正在一次轮询许多消息,或者由于某些消息处理而可能没有足够频繁地轮询。如果可以的话,分享您的配置和代码可能会有所帮助。
  • 我的确切代码可以在这里看到 (github.com/Blizzard/node-rdkafka/blob/master/examples/…),我设置的唯一配置是你在新的 Kafka.KafkaConsumer() 构造函数中看到的。至于 zookeeper 和 kafka 中的配置,我使用的是完全开箱即用的快速入门设置 kafka.apache.org/quickstart
  • 嗯,这是一个开箱即用的例子。你在消费者方面得到了什么来进行日志记录?如果您包含调试启用代码,您在等待建立连接时是否看到任何重复的内容?可能是 docker 容器没有足够的内存,并且在建立连接时出现了问题。也许将代理的容器提升到 1G 并确保 Xmx 至少为 512M 并给客户端 512M?
  • group.max.session.timeout.msgroup.min.session.timeout.ms 的 Kafka 服务器值是多少?当我的消费者 session.timeout.msheartbeat.interval.ms 不在服务器范围内时,我无法让消费者连接(使用与您类似的日志输出)
  • 更新:这个问题在发布后不久就消失了,我不知道是什么解决了它。没有回复这里的 cmets 我感到有点内疚,但由于我无法再重现我自己的问题......我无法提供可靠的诊断反馈:(

标签: node.js apache-kafka


【解决方案1】:

只要没人有好的答案,我会分享我的解决方案...

最终我停止在 docker 容器中运行 kafka,这似乎是原因。相反,我按照The Quick Start Guide 运行它。

这解决了我的问题,所以问题可能根本不是node-rdkafka 的错。事实上,我们已经在生产环境中成功运行node-rdkafka 将近一年了,没有任何问题。

最后我没有很难的、令人满意的答案,只有怀疑和许多试图让 kafka 在容器中工作的痛苦回忆。当我最终放弃 dockerized kafka 时,我感到如释重负。似乎只有我的一些同事分享了我的问题。

【讨论】:

    【解决方案2】:

    我在将 Kafka 作为 docker 容器运行时遇到了类似的问题。这都是关于 docker 网桥类型的。我的拓扑是在同一个 Docker 桥接网络上运行 Kafka、生产者和消费者。我认为拥有 Kafka 环境来处理开发事务是最好的方式。

    但是,消费者和生产者都无法正确连接到 Kafka 服务器。经过一番试探,我意识到生产者和消费者都必须运行在宿主网络上。

    因此,在 Docker 上运行消费者或生产者时,只需输入 --net host 参数即可。然后你就可以通过localhost指向正确的端口连接到Kafka。

    $ docker run -d --net host --name kafka-consumer kafka-consumer 
    $ docker run -d --net host --name kafka-producer kafka-producer 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多