我正在CDH5.9上运行kafka 0.10.0,集群是kerborized的。我要做的是将消息从远程机器写入我的kafka代理。集群(安装kafka的地方)有内部和外部ip地址。群集中机器的主机名被解析为私有ip,远程机器将相同的主机名解析为公共ip地址。我打开了从远程机器到kafka代理的必要端口9092(我使用的是sasl\u明文协议),验证了使用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>
使用相同的生产者属性。我可以从机器上远程登录kafka代理,/etc/hosts包括主机名和公共ip。
第二步-我修改了server.properties:
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://<kafkaBrokerInternalIP>:9092
同一集群中的消费者和生产者仍然运行良好(引导服务器现在是端口9092的内部ip)
正如预期的那样,远程生产者失败了(但这是显而易见的,因为它不知道内部ip地址)
第三步-头发长的地方:(
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}
在过去的三天里,我一直在努力让它工作,但我的想法是:/我的理解是,广告.hostnames服务正是为了这个目的,但要么我做错了什么,或有什么错误的机器设置。
任何提示都非常感谢!
1条答案
按热度按时间mwngjboj1#
我最近遇到了这个问题。在我的例子中,我启用了kafka acl,在通过comment this 2配置禁用它之后,问题解决了。
一根线也许能帮你我想:https://gist.github.com/jorisdevrede/a7933a99251452bb1867
最后提到:
如果您只在kafka代理上使用sasl\u纯文本侦听器,则必须确保您也设置了security.inter.broker.protocol=sasl\u纯文本,否则您将在客户端中得到一个leader\u not\u available错误。