【问题标题】:Kafka consumer fetching metadata for topics failedKafka 消费者获取主题元数据失败
【发布时间】:2015-08-16 20:34:48
【问题描述】:

我正在尝试为第三方的 Kafka 和 ZooKeeper 服务器编写 Java 客户端。我能够列出和描述主题,但是当我尝试阅读任何主题时,会引发 ClosedChannelException。我在这里使用命令行客户端重现它们。

$ bin/kafka-console-consumer.sh --zookeeper 255.255.255.255:2181 --topic eventbustopic
[2015-06-02 16:23:04,375] WARN Fetching topic metadata with correlation id 0 for topics [Set(eventbustopic)] from broker [id:1,host:SOME_HOST,port:9092] failed (kafka.client.ClientUtils$)
java.nio.channels.ClosedChannelException                                       
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)           
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73)        
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72)
    at kafka.producer.SyncProducer.send(SyncProducer.scala:113)                
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:58)        
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)        
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)         
[2015-06-02 16:23:04,515] WARN Fetching topic metadata with correlation id 0 for topics [Set(eventbustopic)] from broker [id:0,host:SOME_HOST,port:9092] failed (kafka.client.ClientUtils$)
java.nio.channels.ClosedChannelException                                       
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)           
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73)        
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72)
    at kafka.producer.SyncProducer.send(SyncProducer.scala:113)                
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:58)        
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)        
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)         

替代命令成功:

$ bin/kafka-topics.sh --describe --zookeeper 255.255.255.255:2181 --topic eventbustopic
Topic:eventbustopic   PartitionCount:2        ReplicationFactor:1     Configs:
    Topic: eventbustopic  Partition: 0    Leader: 1       Replicas: 1     Isr: 1
    Topic: eventbustopic  Partition: 1    Leader: 0       Replicas: 0     Isr: 0

$ bin/kafka-topics.sh --list --zookeeper 255.255.255.255:2181 --topic eventbustopic
eventbustopic

(ips 被编辑并替换为 255.255.255.255)

当我在谷歌上搜索这个异常时,我看到了生产者方面的问题——事实上,ClientUtils.fetchTopicMetadata 的来源表明这主要由生产者使用。

我担心的一个问题是,这可能是网络布局的产物:数据包被 Haproxy 破坏并通过 VPN 发送。

究竟是什么在起作用?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    代理告诉客户端应该使用哪个主机名来生成/使用消息。默认情况下,Kafka 使用运行它的系统的主机名。如果客户端无法解析此主机名,则会出现此异常。

    您可以尝试将 Kafka 配置中的 advertised.host.name 设置为客户端应使用的主机名/地址。

    【讨论】:

    • 似乎所有用 java 编程的中间件都必须设置 /etc/hosts 才能正常运行。您必须将生产者和消费者 ip 配置到主机文件中。谢谢约翰内斯。
    • 对于遇到此问题的其他任何人,也可能是 JVM 具有 -Xmx 或资源限制 (Docker) 太低。你得到完全相同的错误。
    • @DonovanMuller 您的评论可能应该作为对这个问题的完整答案发布。这是解决我问题的一个答案,我怀疑它可能会以同样的方式帮助其他人,但作为评论很容易错过
    【解决方案2】:

    这是我解决这个问题的方法:

    1. 运行 bin/kafka-server-stop.sh 停止运行 kafka 服务器。
    2. 通过添加一行修改属性文件config/server.propertieslisteners=PLAINTEXT://{ip.of.your.kafka.server}:9092
    3. 重启kafka服务器。

    由于没有设置lisener,kafka会使用java.net.InetAddress.getCanonicalHostName()来获取socket服务器监听的地址。

    【讨论】:

    • 如果使用像0.8.1.x这样的旧版本,同样的属性名为host.nameadvertised.port
    • 遇到了同样的问题,listeners=PLAINTEXT://{ip.of.your.kafka.server}:9092 帮助了我。
    【解决方案3】:

    您的 Zookeeper 有问题。 255.255.255.255:2181 不是有效的 Zookeeper 地址;这是您网络上的广播地址或子网掩码。为了使事情正常运行,请找到运行 Zookeeper 的机器的 IP 地址或主机名。

    【讨论】:

    • ips 被编辑并替换为 255.255.255.255。我本来可以更清楚的。
    【解决方案4】:

    在 AWS 上遇到此错误。问题是我对安全组的限制过于严格,并将端口 2181 和 9092 设置为“我的 IP”。这意味着 kafka 实例找不到在同一个盒子上运行的 ZK。

    解决方案 - 打开它 - 一点。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2016-04-23
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2017-10-17
      • 2019-09-20
      • 2017-01-26
      相关资源
      最近更新 更多