Kafka:如何连接kafka-console-consumer来获取远程代理主题内容?

时间:2015-11-07 14:56:32

标签: amazon-ec2 apache-kafka apache-zookeeper kafka-consumer-api kafka-producer-api

我已经在ec2上的一台机器上设置了一个kafka zookeeper和3个代理,端口为9092..9094,我正在尝试使用另一台机器上的主题内容。端口2181(zk),9092,9093和9094(服务器)对消费者机器开放。我甚至可以做bin/kafka-topics.sh --describe --zookeeper 172.X.X.X:2181 --topic remotetopic给我

  

主题:remotetopic PartitionCount:1 ReplicationFactor:3配置:       主题:remotetopic分区:0领导者:2个复制品:2,0,1 Isr:2,0,1   块引用

然而,当我bin/kafka-console-consumer.sh --zookeeper 172.X.X.X:2181 --from-beginning --topic remotetopic时,我得到了

  

WARN从代理[id:0,主机: localhost ,端口:9092]获取主题[Set(remotetopic)]的相关ID为0的主题元数据失败(kafka.client.ClientUtils $)   java.nio.channels.ClosedChannelException

为什么消费者试图从localhost读取?是否有任何选项或命令行或默认文件从中读取;我可以改变它吗?

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:7)

有同样的问题。通过按照kafka配置(config / server.properties)中的注释设置属性'advertised.host.name'并重新启动kafka服务器来修复它。

答案 1 :(得分:4)

我有同样的问题,我正在使用 kafka 0.11 ,我在我的Ubuntu VM和Windows 10中的消费者中启动了生产者和代理。

我改变了(并且没有注释)

advertised.listeners=PLAINTEXT://your.host.name:9092

advertised.listeners=PLAINTEXT://<myActual IP address>:9092

示例:

advertised.listeners=PLAINTEXT://192.168.150.150:9092

来自服务器/代理端的文件 config / server.properties (即在我的情况下是Ubuntu VM)

答案 2 :(得分:2)

我创建了一个python脚本,允许您通过ssh隧道访问kafka / zookeeper,以便从本地计算机使用和生成消息。

兼容Linux&amp; MAC

Usage: kafkatunnel.py [OPTIONS] COMMAND [ARGS]...

  Access kafka/zookeeper via ssh tunnel to consume and produce messages from
  your local machine

Commands:
  aws     retrieve kafka/zookeeper ip's from AWS...
  manual  provide the IP's of your zookeeper/kafka

尝试一下: https://github.com/simple-machines/kafka-tunnel

答案 3 :(得分:0)

我已经将Kafka和Zookeeper设置为类似(甚至更复杂)的安排,而kafka-console-consumer.sh确实可以像宣传的那样工作。

这很可能是一个配置错误的Kafka实例(在服务器配置中指定了它的zookeeper节点)。

检查Kafka配置。 默认情况下,如果未指定zookeeper实例,则会假定为单个localhost实例。否则必须使用“server.1”... 2等约定来定义zookeeper实例(建议至少使用3个实例) /需要获得适当的法定人数。)