【问题标题】:Kafka Remote Producer - advertised.listenersKafka 远程生产者-adverted.listeners
【发布时间】: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


    【解决方案1】:

    我最近遇到了这个问题。 就我而言,我启用了 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 错误。

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 2013-02-19
      • 1970-01-01
      • 2013-01-23
      • 2019-10-31
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多