【发布时间】:2016-10-07 12:41:57
【问题描述】:
我是 Kafka 0.9 的新手,在测试一些功能时,我发现 Java 实现的 Consumer (KafkaConsumer) 中出现了一个奇怪的行为。
Kafka 代理位于 Ambari 外部机器中。
即使您可以实现生产者并开始向外部代理发送消息,我也不知道为什么当消费者尝试读取事件(轮询)时,它会卡住。
我知道生产者运行良好,因为我确实可以通过控制台消费者(在 ambari 本地工作)来消费消息。但是当我执行 Java Consumer 时,什么都没有发生,只是卡住了。调试代码我可以看到它在poll() 行被阻止:
ConsumerRecords<String, String> records = consumer.poll(100);
顺便说一句,超时没有任何作用。无论您输入 0、100 还是 1000 毫秒,消费者都会在这一行中被阻塞,不会超时也不会抛出异常。
我尝试了各种替代属性,例如 advertised.host.name、advertised.listener 等等,但运气为零。 p>
任何帮助将不胜感激。提前致谢!
【问题讨论】:
-
您能否以不同的方式使用这些消息,例如使用
kafka-console-consumer.sh? -
是的,我是。在托管 ambari 的机器上,我可以通过控制台消费者使用消息
-
那么在您运行消费者的机器上呢?您在那里尝试过控制台消费者吗?
-
我没有,因为我没有安装kafka,也没有安装zookeeper。
-
你不需要在那里安装 Zookeeper,只需将 Kafka 二进制文件解压到某个地方。如果您想排除网络连接问题(防火墙等),那么您几乎必须这样做。否则你无法解决这类问题。您的问题可能很简单,因为您的消费者由于防火墙问题而无法连接到您的 Zookeeper 实例。
标签: apache-kafka polling kafka-consumer-api kafka-producer-api