【发布时间】:2017-11-05 02:02:58
【问题描述】:
我在 CDH 5.9 上运行 Kafka 0.10.0,集群是 kerborized。 我想要做的是将消息从远程机器写入我的 Kafka 代理。 集群(安装 Kafka 的地方)具有内部和外部 IP 地址。 集群中机器的主机名解析为私有 IP,远程机器将相同的主机名解析为公共 IP 地址。 我打开了从远程机器到 Kafka Broker 的必要端口 9092(我使用的是 SASL_PLAINTEXT 协议),并验证了使用 telnet。
第一步 - 除了 Kafka Broker 的标准属性之外,我还配置了以下内容:
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
- 同一集群中的消费者和生产者仍然可以正常运行(引导 服务器现在是内部 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}
过去三天我一直在努力让它发挥作用,但是我没有想法:/我的理解是,adverted.hostnames 正是为了这个目的,但是要么我做错了,要么有机器设置有问题。
非常感谢任何提示!
【问题讨论】:
标签: apache-kafka cloudera kafka-consumer-api kafka-producer-api