我为故障转移测试设置了一个由3个代理组成的kafak集群。
我的server.properites如下:
...
offsets.topic.replication.factor=3
default.replication.factor=3
min.insync.replicas=3
zookeeper.connect=host1:2181,host2:2181,host3:2181/kafka
zookeeper.connection.timeout.ms=6000
...
测试主题配置如下:
Partition count: 3
min.insync.replicas: 3
我的测试生成器和使用者命令如下:
kafka-producer-perf-test.sh --topic topic-for-test --num-records 10000 --throughput 10 --payload-file file10KB.txt --producer-props acks=1 bootstrap.servers=...(3 urls) --payload-delimiter A
kafka-console-consumer.sh --bootstrap-server ...(3 urls) --topic topic-for-test
当我关闭broker1时,领导人选举工作,每个分区Map到broker2和broker3,生产者/消费者工作正常。
然后我关闭broker2,领导者选举工作,所有分区只Map到broker3,生产者/消费者仍然工作正常。
然后我搞垮了broker3,这是最后一个,在生产者/消费者的工作方式中发生了一些奇怪的事情。
有时生产者/消费者尝试连接到最后两个可用的代理,如我前面所述,它们是broker2和broker3,有时它们尝试只连接到最后一个代理,即broker3。
这是第一个奇怪的点:我不知道为什么他们的工作方式不同。
然后,当我再次启动broker1(这是第一个被关闭的代理)时,没有任何变化。生产者和消费者只是不断尝试连接,因为他们正在做。在这种情况下,kafka-topics.sh--“描述说”leader:none".
但是,当我启动消费者/生产者尝试连接到的一个代理(broker2或broker3)时,它们有时只在一个代理作为所有分区的领导者的情况下正常工作,有时无法记录以下生产者消息:
WARN [Producer clientId=producer-1] 3 partitions have leader brokers without a matching listener, including [topic-for-test-0, topic-for-test-2, topic-for-test1] (org.apache.kafka.clients.NetworkClient)
在上述消息的情况下,我启动所有其他经纪人关闭和生产者/消费者的工作良好。
这是第二个奇怪的问题:为什么他们有时只在一个经纪人担任领导的情况下工作得很好,而有时在所有经纪人都康复之后才工作?
暂无答案!
目前还没有任何答案,快来回答吧!