kafka集群一台broker(broker id:2),某一天的某一个时间点(2020.09.09),上面大量topic的分区没有从leader同步数据。
某一个topic信息如下:
[hduser@test yjt10-0]$ kafka-topics.sh --describe --zookeeper localhost:2181 --topic yjt10
Topic:yjt10 PartitionCount:1 ReplicationFactor:3 Configs:
Topic: yjt10 Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0
通过查看日志,发现日志文件里面只有如下的信息:
INFO Replica loaded for partition yjt10-0 with initial high watermark 0 (kafka.cluster.Replica)
没有发现从leader同步数据的日志。
由于目前是运维工作,代码能力不强,勉强看了一下源码,通过源码里面看到,只要当前的topic创建以后,就会创建当前follower到leader的ReplicaFetcherThread线程,如果线程已经存在,就不会创建。
通过jstack 查看broker的线程栈,没有发现ReplicaFetcherThread处于blocked状态,所以当前怀疑是不是该线程直接挂了??,但是经过测试,如果手动把当前ReplicaFetcherThread线程对应的pid直接kill,那么对应的broker就直接挂了,也有可能是如果线程是被broker进程主动kill的话,那么broker对应的kafka进程不会退出,如果手动杀掉线程对应的pid号,由于线程共用kafka进程的信息,所以实际kill掉的是broker的进程。目前对该问题的产生很疑惑,还希望大佬能帮忙解惑下。