我正在将node-rdkafka作为Node.js应用程序运行。使用者无限期地挂起,而没有从kafka提取任何消息(在localhost上运行)。
发出以下错误,
{ Error: Local: Host resolution failure
origin: 'local',
message: 'host resolution failure',
code: -1,
errno: -1,
stack: 'Error: Local: Host resolution failure' }
该应用程序可以从kafka接收数据。 kafka实例很好,可以通过使用控制台生成和使用消息来进行验证。
非常感谢您提供调试原因的帮助。
此处是消费者代码示例-https://github.com/Blizzard/node-rdkafka/blob/master/examples/consumer-flow.md
答案 0 :(得分:0)
使用https://kafka.apache.org/quickstart中的快速入门说明在本地运行kafka时,我遇到了这个确切的问题
对我来说,在启动kafka-server之前,将以下两行添加到config/server.properties
已解决了该问题-
listeners=PLAINTEXT://localhost:9092
advertised.listeners=PLAINTEXT://localhost:9092
答案 1 :(得分:0)
发生此问题的原因是您的客户和经纪人的网络不同。
简单的hack是让adverted.listeners的主机入口
例如,
advertised.listeners=PLAINTEXT://kafka:9092
然后使用您的 kafka-broker-IP 在 /etc/hosts
中添加一个条目。例如kafka-borker-IP 是 192.168.1.1
192.168.1.1 kafka
您可以使用 kafkacat
实用程序来检查您的经纪人的 IP。
kafkacat -b kafka:9092 -L
它将返回有关经纪人的元数据。
您需要检查您的机器是否可以访问返回的代理的 IP。
为了更好地理解这个问题。 您可以参考https://www.confluent.io/blog/kafka-listeners-explained/