无法使用领导者时无法产生消息

时间:2019-09-03 12:31:26

标签: apache-kafka

领导者不可用时,我无法显示消息。我使用以下命令创建了复制因子为2的新主题

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181  --topic TestTopic202  --partitions 1 --replication-factor 2

然后

~/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic TestTopic202

输出:

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropri
ately using -XX:ParallelGCThreads=N
Topic:TestTopic202      PartitionCount:1        ReplicationFactor:2     Configs:
Topic: TestTopic202     Partition: 0    Leader: 1       Replicas: 1,2   Isr: 1,2

创建主题后,我停止了该主题的负责人broker-1来测试容错能力。我期望broker-2会被选为领导者,但我收到了down down错误消息。

~/kafka/bin/kafka-console-producer.sh --broker-list 34.93.59.30:9092 --topic TestTopic202
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
>Hi

放倒后,

^C[kafka@hgtestsrv1 ~]$ ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TestTopic202
\OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
>Hi
[2019-09-03 12:25:47,305] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2019-09-03 12:25:47,407] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be ava
ilable. (org.apache.kafka.clients.NetworkClient)
[2019-09-03 12:25:47,511] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be ava
ilable. (org.apache.kafka.clients.NetworkClient)
[2019-09-03 12:25:47,765] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be ava
ilable. (org.apache.kafka.clients.NetworkClient)
[2019-09-03 12:25:48,222] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be ava
ilable. (org.apache.kafka.clients.NetworkClient)
^Corg.apache.kafka.common.KafkaException: Producer closed while send in progress
        at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:862)
        at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:839)
        at kafka.tools.ConsoleProducer$.send(ConsoleProducer.scala:75)
        at kafka.tools.ConsoleProducer$.main(ConsoleProducer.scala:57)
        at kafka.tools.ConsoleProducer.main(ConsoleProducer.scala)
Caused by: org.apache.kafka.common.KafkaException: Requested metadata update after close
        at org.apache.kafka.clients.Metadata.awaitUpdate(Metadata.java:200)
        at org.apache.kafka.clients.producer.KafkaProducer.waitOnMetadata(KafkaProducer.java:982)
        at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:859)
        ... 4 more

谁能告诉我如何测试容错能力?

我的 server.properties

default.replication.factor=2
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1

1 个答案:

答案 0 :(得分:1)

在向Kafka发送消息之前,Kafka会获取有关该主题有多少个分区以及哪个代理是哪个分区的领导者等元数据。

方法1。现在,重要的是将生产者的引导服务器(经纪人列表)提供给可访问的经纪人。您说过,您关闭了broker-1,因此不能将它作为仅一个包含在您的Kafka生产者引导服务器中。

以下配置需要更改。

bootstrap.servers=<IP>:<Port>

将此设置为您的broker-2并查看。

关于测试容错性的问题...

您的方法是正确的,但是您必须在生产者/消费者bootstrap.servers属性中包括多个(如果不是全部)经纪人。

您给了localhost:9092,这是您打倒的经纪人吗?另一个经纪人在哪里运行?必须将正在运行的经纪人提供给生产者。

检查其他代理是否正在运行并已在同一Zookeeper中注册。

更新

您给了两个不同的IP 34.93.59.30:9092和下一个localhost:9092,我怀疑它们是两台不同计算机上的两个不同的代理。

方法2。 如果是这种情况,请确保(如前所述)您的localhost:9092经纪人已在{{1 }}代理(如果使用默认端口,则应在34.93.59.30:9092上进行注册)。

因此,在您的34.93.59.30:2181的{​​{1}}中(您的第二个经纪人应该给与您的经纪人1个相同的动物园管理员)。

server.properties

最重要的是,请确保您的localhost:9092可以首先连接到该端口。

方法3。。如果您仍然无法弄清这一点,请检查描述主题的输出。

zookeeper.connect=34.93.59.30:2181

在降低broker-1之后。它应该向您显示领导者。