1、问题描述
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
2、问题现象
通过查看日志,发现日志文件里面只有如下的信息:
INFO Replica loaded for partition yjt10-0 with initial high watermark 0 (kafka.cluster.Replica)
没有发现从leader同步数据的日志。
3、个人怀疑和做过的测试
由于目前是运维工作,代码能力不强,勉强看了一下源码,通过源码里面看到,只要当前的topic创建以后,就会创建当前follower到leader的ReplicaFetcherThread线程,如果线程已经存在,就不会创建。
通过jstack 查看broker的线程栈,没有发现ReplicaFetcherThread处于blocked状态,所以当前怀疑是不是该线程直接挂了??,但是经过测试,如果手动把当前ReplicaFetcherThread线程对应的pid直接kill,那么对应的broker就直接挂了,也有可能是如果线程是被broker进程主动kill的话,那么broker对应的kafka进程不会退出,如果手动杀掉线程对应的pid号,由于线程共用kafka进程的信息,所以实际kill掉的是broker的进程。目前对该问题的产生很疑惑,还希望大佬能帮忙解惑下。
1、看到你的kafka 2节点不在
Isr
中了,这种现象2、broker 2节点上,分区是否有
leader
的?3、副本数3个,可以适当调整为2个,效果更佳。
4、你当前的集群在压力小的情况下,follower是否会赶上
大佬,你好:
1、可能目前集群副本应该是暂时不能调整,当前集群已经不是很健康了,有的分区leader已经是-1。
2、当前broker 2 节点, 这个broker节点上面有其他副本活动着的,还有其他分区的leader存在,说明当前broker可以提供服务。
3、找了一个不能同步数据的分区follower,通过查看kafka-logs数据,发现从九号写入数据以后,再也没有写入过了,这个follower如果处于osr里面的话,是多久同步一次呢?
4、通过,查看当前broker的state.log日志,发现,处于osr里面的分区副本,居然没有在offlinereplicas里面。
5、消息不大,,我创建的测试topic,通过kafka的压力测试,写了一些数据,broker 2节点的对应分区,也不同步数据(这个节点有这个主题的好几个分区,有的分区是同步数据的)。
都有
-1
了,说明已经会影响业务了,先找找-1
节点的错误日志。大佬,你好:
leader为-1的这种是如下原因导致的:
1、当前有一个broker挂掉了;
2、其他的broker当中目前发现有两个broker上面的分区follower不去leader同步数据;
3、为-1的这种就是三个副本刚好就处于这三个broker上;
4、目前由于数据量太大,开启了leader的rebalance,所以挂掉的broker不敢启动,上次尝试启动这个broker,发现这上面的分区leader恢复了以后,大量的数据同步,导致网络io被占满,业务直接受影响了。
现在就是想要解决分区副本不同步数据的这个问题。
按照你的分析,副本不同步很可能是该节点的能力不足了。你看看该节点的kafka日志,把警告和错误级别的日志找出来。
https://www.orchome.com/22
大佬,抱歉,这几天弄别的事情忘记回复了。我在好好分析一下日志。谢谢
你的答案