我已经在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读取?是否有任何选项或命令行或默认文件从中读取;我可以改变它吗?
任何帮助将不胜感激!
答案 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
答案 3 :(得分:0)
我已经将Kafka和Zookeeper设置为类似(甚至更复杂)的安排,而kafka-console-consumer.sh确实可以像宣传的那样工作。
这很可能是一个配置错误的Kafka实例(在服务器配置中指定了它的zookeeper节点)。
检查Kafka配置。 默认情况下,如果未指定zookeeper实例,则会假定为单个localhost实例。否则必须使用“server.1”... 2等约定来定义zookeeper实例(建议至少使用3个实例) /需要获得适当的法定人数。)