Kafka 消费者获取主题的元数据失败
Kafka consumer fetching metadata for topics failed
我正在尝试为第三方的 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(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(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)
当我 google 这个异常时,我看到了生产者方面的问题——实际上,ClientUtils.fetchTopicMetadata
的来源表明这主要由生产者使用。
我担心的一个问题是,这可能是网络布局的产物:数据包被 Haproxy 破坏并通过 VPN 发送。
到底是什么在起作用?
代理告诉客户端哪个主机名应该用于 produce/consume 消息。默认情况下,Kafka 使用它运行的系统的主机名。如果客户端无法解析此主机名,则会出现此异常。
您可以尝试将 Kafka 配置中的 advertised.host.name
设置为客户端应使用的 hostname/address。
Zookeeper 有问题。 255.255.255.255:2181
不是有效的 Zookeeper 地址;这是您网络上的广播地址或子网掩码。要使一切正常,请找到机器的 IP 地址或主机名 运行 Zookeeper。
这是我解决这个问题的方法:
- 运行
bin/kafka-server-stop.sh
停止 运行ning kafka 服务器。
- 修改属性文件
config/server.properties
添加一行:
listeners=PLAINTEXT://{ip.of.your.kafka.server}:9092
- 重启卡夫卡服务器。
由于没有设置lisener,kafka会使用java.net.InetAddress.getCanonicalHostName()
获取socket服务器监听的地址
运行 在 AWS 上进入此错误。问题是我对安全组的限制过于严格,并将端口 2181 和 9092 设置为 "my IP"。这意味着 kafka 实例无法在同一个盒子上找到 ZK 运行。
解决办法——打开它——一点点。
我正在尝试为第三方的 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(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(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)
当我 google 这个异常时,我看到了生产者方面的问题——实际上,ClientUtils.fetchTopicMetadata
的来源表明这主要由生产者使用。
我担心的一个问题是,这可能是网络布局的产物:数据包被 Haproxy 破坏并通过 VPN 发送。
到底是什么在起作用?
代理告诉客户端哪个主机名应该用于 produce/consume 消息。默认情况下,Kafka 使用它运行的系统的主机名。如果客户端无法解析此主机名,则会出现此异常。
您可以尝试将 Kafka 配置中的 advertised.host.name
设置为客户端应使用的 hostname/address。
Zookeeper 有问题。 255.255.255.255:2181
不是有效的 Zookeeper 地址;这是您网络上的广播地址或子网掩码。要使一切正常,请找到机器的 IP 地址或主机名 运行 Zookeeper。
这是我解决这个问题的方法:
- 运行
bin/kafka-server-stop.sh
停止 运行ning kafka 服务器。 - 修改属性文件
config/server.properties
添加一行:listeners=PLAINTEXT://{ip.of.your.kafka.server}:9092
- 重启卡夫卡服务器。
由于没有设置lisener,kafka会使用java.net.InetAddress.getCanonicalHostName()
获取socket服务器监听的地址
运行 在 AWS 上进入此错误。问题是我对安全组的限制过于严格,并将端口 2181 和 9092 设置为 "my IP"。这意味着 kafka 实例无法在同一个盒子上找到 ZK 运行。
解决办法——打开它——一点点。