0

我在CDH 5.9上运行卡夫卡0.10.0,群集被kerborized。 我想要做的是将消息从远程机器写入我的卡夫卡经纪人。 群集(其中安装了Kafka)具有内部以及外部IP地址。 集群中机器的主机名解析为私有IP,远程机器将相同的主机名解析为公有IP地址。 我从远程机器打开必要的端口9092(我使用SASL_PLAINTEXT协议)到Kafka Broker,验证了使用telnet。Kafka远程制作人 - advertised.listeners

第一步 - 除了对卡夫卡经纪人的标准属性,我配置如下:

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 Broker,/ etc/hosts包括主机名和公共IP。

第二步 - 我修改server.properties:

listeners=SASL_PLAINTEXT://0.0.0.0:9092 
advertised.listeners=SASL_PLAINTEXT://<kafkaBrokerInternalIP>:9092 
  • 消费者&制片人在同一个集群内还在运行(引导现在 服务器内部IP与端口9092)
  • 如预期的远程生产者失败(但很明显,鉴于它不知道内部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} 

我一直在ST在过去的三天里坚持这样做,但我没有想法:/我的理解是,advertised.hostnames服务于这个目的,但无论我做错了什么,或者机器设置有问题。

任何提示都非常感谢!

回答

0

我最近遇到这个问题。 在我的情况下,我启用了Kafka ACL,在通过评论这2个配置禁用它之后,问题就解决了。

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 
super.users=User:kafka 

而一个线程可以帮助你,我想: https://gist.github.com/jorisdevrede/a7933a99251452bb1867

什么在它在最后提到:

如果只使用一个SASL_PLAINTEXT听众对卡夫卡经纪人,你 必须确保您也设置了 security.inter.broker.protocol = SASL_PLAINTEXT,否则您将在客户端中获得LEADER_NOT_AVAILABLE错误。

相关问题