kafka2.x 版本分区follower不从leader同步数据

坏脾气先森 发表于: 2020-09-24   最后更新时间: 2020-09-24  

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的进程。目前对该问题的产生很疑惑,还希望大佬能帮忙解惑下。



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kafka请问advertised.listeners配置方法
下一条: kafka消费者线程不再继续消费

  • 1、看到你的kafka 2节点不在Isr中了,这种现象

    1. 同步跟不上,从里面踢出来了。
    2. broker 2节点挂了。

    2、broker 2节点上,分区是否有leader的?

    • 为确认2节点是否正常提供服务的分区,如果只是部分分区有问题,是否是因为消息过大,导致资源到了瓶颈,所以部分分区同步不及时导致的。

    3、副本数3个,可以适当调整为2个,效果更佳。

    • 主备即可,生产使用5年实战,大多数是因为副本需要同步的副本过多,消息增大时,反而会导致kafka集群过热。

    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节点的对应分区,也不同步数据(这个节点有这个主题的好几个分区,有的分区是同步数据的)。

        • 大佬,你好:
          leader为-1的这种是如下原因导致的:
          1、当前有一个broker挂掉了;
          2、其他的broker当中目前发现有两个broker上面的分区follower不去leader同步数据;
          3、为-1的这种就是三个副本刚好就处于这三个broker上;
          4、目前由于数据量太大,开启了leader的rebalance,所以挂掉的broker不敢启动,上次尝试启动这个broker,发现这上面的分区leader恢复了以后,大量的数据同步,导致网络io被占满,业务直接受影响了。
          现在就是想要解决分区副本不同步数据的这个问题。