Apache Kafka:无法更新 Metadata/java。nio.channels.ClosedChannelException
Apache Kafka: Failed to Update Metadata/java.nio.channels.ClosedChannelException
我刚刚开始使用 Apache Kafka/Zookeeper,在尝试在 AWS 上设置集群时遇到了 运行 问题。目前我有三台服务器:
一个 运行 Zookeeper 和两个 运行 Kafka。
我可以毫无问题地启动 Kafka 服务器,并且可以在它们上创建主题。但是,当我尝试在一台机器上启动生产者并在另一台机器上启动消费者时,麻烦就来了:
关于 Kafka 生产者:
kafka-console-producer.sh --broker-list <kafka server 1 aws public dns>:9092,<kafka server 2 aws public dns>:9092 --topic samsa
在 Kafka 消费者上:
kafka-console-consumer.sh --zookeeper <zookeeper server ip>:2181 --topic samsa
我在生产者 ("hi") 上输入了一条消息,但有一段时间没有任何反应。然后我收到这条消息:
ERROR Error when sending message to topic samsa with key: null, value: 2 bytes
with error: Failed to update metadata after 60000 ms.
(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
在消费者方面,我收到这条定期重复的消息:
WARN Fetching topic metadata with correlation id # for topics [Set(samsa)] from broker [BrokerEndPoint(<broker.id>,<producer's advertised.host.name>,9092)] failed (kafka.client.ClientUtils$)
java.nio.channels.ClosedChannelException
at kafka.network.BlockingChannel.send(BlockingChannel.scala:110)
at kafka.producer.SyncProducer.liftedTree1(SyncProducer.scala:75)
at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:74)
at kafka.producer.SyncProducer.send(SyncProducer.scala:119)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:59)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:94)
at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)
一段时间后,生产者将开始快速抛出此错误消息,# 递增:
WARN Error while fetching metadata with correlation id # : {samsa=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
不确定从这里去哪里。如果需要有关我的配置文件的更多详细信息,请告诉我
这是配置问题。
为了得到它 运行 必须对 config
文件进行几处更改:
在每个 Kafka 服务器上的 config/server.properties
中:
host.name: <Public IP>
advertised.host.name: <AWS Public DNS Address>
在每个 Kafka 服务器上的 config/producer.properties
中:
metadata.broker.list: <Producer Server advertised.host.name>:<Producer Server port>,<Consumer Server advertised.host.name>:<Consumer Server port>
在每个Kafka服务器上的/etc/hosts中,将127.0.0.1 localhost localhost.localdomain
改为:
<Public IP> localhost localhost.localdomain
我刚刚开始使用 Apache Kafka/Zookeeper,在尝试在 AWS 上设置集群时遇到了 运行 问题。目前我有三台服务器:
一个 运行 Zookeeper 和两个 运行 Kafka。
我可以毫无问题地启动 Kafka 服务器,并且可以在它们上创建主题。但是,当我尝试在一台机器上启动生产者并在另一台机器上启动消费者时,麻烦就来了:
关于 Kafka 生产者:
kafka-console-producer.sh --broker-list <kafka server 1 aws public dns>:9092,<kafka server 2 aws public dns>:9092 --topic samsa
在 Kafka 消费者上:
kafka-console-consumer.sh --zookeeper <zookeeper server ip>:2181 --topic samsa
我在生产者 ("hi") 上输入了一条消息,但有一段时间没有任何反应。然后我收到这条消息:
ERROR Error when sending message to topic samsa with key: null, value: 2 bytes
with error: Failed to update metadata after 60000 ms.
(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
在消费者方面,我收到这条定期重复的消息:
WARN Fetching topic metadata with correlation id # for topics [Set(samsa)] from broker [BrokerEndPoint(<broker.id>,<producer's advertised.host.name>,9092)] failed (kafka.client.ClientUtils$)
java.nio.channels.ClosedChannelException
at kafka.network.BlockingChannel.send(BlockingChannel.scala:110)
at kafka.producer.SyncProducer.liftedTree1(SyncProducer.scala:75)
at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:74)
at kafka.producer.SyncProducer.send(SyncProducer.scala:119)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:59)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:94)
at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)
一段时间后,生产者将开始快速抛出此错误消息,# 递增:
WARN Error while fetching metadata with correlation id # : {samsa=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
不确定从这里去哪里。如果需要有关我的配置文件的更多详细信息,请告诉我
这是配置问题。
为了得到它 运行 必须对 config
文件进行几处更改:
在每个 Kafka 服务器上的 config/server.properties
中:
host.name: <Public IP>
advertised.host.name: <AWS Public DNS Address>
在每个 Kafka 服务器上的 config/producer.properties
中:
metadata.broker.list: <Producer Server advertised.host.name>:<Producer Server port>,<Consumer Server advertised.host.name>:<Consumer Server port>
在每个Kafka服务器上的/etc/hosts中,将127.0.0.1 localhost localhost.localdomain
改为:
<Public IP> localhost localhost.localdomain