我在ec2上的一台端口为9092.9094的机器上设置了一个kafka zookeeper和3个代理,并试图从另一台机器上使用主题内容。端口2181(zk)、9092、9093和9094(服务器)对消费者机器开放。我甚至可以做一个bin/kafka-topics.sh --describe --zookeeper 172.X.X.X:2181 --topic remotetopic
,它可以给我
主题:remotetopic分区计数:1复制因子:3配置:主题:remotetopic分区:0 Leader:2个副本:2,0,1 Isr:2,0,1区块报价
然而,当我做bin/kafka-console-consumer.sh --zookeeper 172.X.X.X:2181 --from-beginning --topic remotetopic
时,我会得到
WARN从broker[id:0,host:localhost,port:9092]获取主题[Set(remotetopic)]的相关id为0的主题元数据失败(kafka.client.ClientUtils$)java.nio.channels.ClosedChannelException
消费者为什么要尝试从本地主机读取?有没有任何选项、命令行或默认文件可以从中读取;我可以改变它吗?
任何帮助都将不胜感激!
我也遇到了同样的问题,我正在使用kafka 0.11,我在Ubuntu虚拟机中启动了生产者和经纪人,在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)
也有同样的问题。通过按照kafka配置(config/server.properties)中注释的指示设置属性"advertise.host.name"并重新启动kafka服务器来修复此问题。
我创建了一个python脚本,允许您通过ssh隧道访问kafka/zookeeper,以从本地机器消费和生成消息。
兼容Linux&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
我已经以类似(甚至更复杂)的安排设置了Kafka和Zookeeper,Kafka-console-consumer.sh确实可以像广告中所说的那样工作。
这很可能是一个配置错误的Kafka实例(在服务器配置中指定了它的zookeeper节点)。
检查Kafka配置默认情况下,如果未指定zookeeper实例,则假定为单个localhost实例否则,必须使用"server.1"…2 etc约定来定义zookeeper实例(建议/要求至少三个实例以获得适当的quorum)。