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錯誤。