我在CDH 5.9上运行Kafka 0.10.0,群集是kerborized。 我想要做的是将消息从远程机器写入我的Kafka经纪人。 群集(安装Kafka的位置)具有内部和外部IP地址。 群集中的计算机主机名解析为专用IP,远程计算机将相同的主机名解析为公共IP地址。 我从远程机器向Kafka Broker打开了必要的端口9092(我正在使用SASL_PLAINTEXT协议),验证了使用telnet。
第一步 - 除了Kafka代理的标准属性外,我还配置了以下内容:
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://<hostname>:9092
我可以用
启动控制台消费者kafka-console-consumer --new consumer --topic <topicname> --from-beginning --bootstrap-server <hostname>:9092 --consumer.config consumer.properties
我可以在群集中的另一台机器上使用我的自定义生产者。 生产者属性的相关摘录:
security.protocol=SASL_PLAINTEXT
bootstrap.servers=<hostname>:9092
我无法使用远程计算机上的自定义生成器:
Exception org.apache.kafka.common.errors.TimeoutException: Batch containing 1 record(s) expired due to timeout while requesting metadata from brokers for <topicname>-<partition>
使用相同的生产者属性。我可以从机器telnet Kafka Broker,/ etc / hosts包括主机名和公共IP。
第二步 - 我修改了server.properties:
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://<kafkaBrokerInternalIP>:9092
第三步 - 毛茸茸的地方:(
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://<kafkaBrokerPublicIP>:9092
以
开始我的消费者kafka-console-consumer --new-consumer --topic <topicname> --from-beginning --bootstrap-server <hostname>:9092 --consumer.config consumer.properties
给了我一个警告,但我认为这不对......
WARN clients.NetworkClient: Error while fetching metadata with correlation id 1 : {<topicname>=LEADER_NOT_AVAILABLE}
以
开始我的消费者kafka-console-consumer --new-consumer --topic <topicname> --from-beginning --bootstrap-server <KafkaBrokerPublicIP>:9092 --consumer.config consumer.properties
在这些日志消息之后挂起:
INFO utils.AppInfoParser: Kafka version : 0.10.0-kafka-2.1.0
INFO utils.AppInfoParser: Kafka commitId : unknown
似乎无法在正常流程中找到协调器,这将成为下一个日志:
INFO internals.AbstractCoordinator: Discovered coordinator <hostname>:9092 (id: <someNumber> rack: null) for group console-consumer-<someNumber>.
使用bootstrap.servers =:9092在集群节点上启动生产者 我和制片人一样观察:
WARN NetworkClient:600 - Error while fetching metadata with correlation id 0 : {<topicname>=LEADER_NOT_AVAILABLE}
使用bootstrap.servers = 9092在集群节点上启动生产者
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
使用bootstrap.servers =:9092或bootstrap.servers =:9092启动我的远程计算机上的生产者
NetworkClient:600 - Error while fetching metadata with correlation id 0 : {<topicname>=LEADER_NOT_AVAILABLE}
过去三天我一直在努力让这个工作起来,但是我没有想法:/我的理解是advertised.hostnames正是为了这个目的而服务,但要么我做错了,要么就是机器设置有问题。
非常感谢任何提示!
答案 0 :(得分:0)
我最近遇到了这个问题。 在我的情况下,我启用了Kafka ACL,并在通过注释这个2配置禁用它后,问题解决了。
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
super.users=User:kafka
我认为一个帖子可以帮助你: https://gist.github.com/jorisdevrede/a7933a99251452bb1867
最后提到的内容:
如果你只在Kafka Broker上使用SASL_PLAINTEXT监听器,那么你 必须确保你已经设置了 security.inter.broker.protocol = SASL_PLAINTEXT,否则你会 在客户端中收到LEADER_NOT_AVAILABLE错误。