Kafka出现失效副本

作者 Billy 日期 2023-10-31
Kafka出现失效副本

Kafka出现失效副本

问题发现

执行命令:

sh kafka-topics.sh --describe --zookeeper 10.30.14.15:2181 --under-replicated-partitions

查询到有失效副本

解决方法

目前未同步副本存在的问题比较复杂,没有最终的解决方案,需要分析broker的日志看为什么副本不同步,正常副本不同步的原因是以下三种情况:

  1. 副本拉取线程挂掉了。即fllower通过副本线程来拉取数据,此时如果副本线程挂了,就会导致某些分区没有被拉取。此时,可以通过动态调整分区拉取线程数来重启分区线程。
  2. 副本拉取线程拉取不过来。即数据量太大,副本拉取线程正常工作,但是忙不过来。此时,解决办法是增加副本分区拉取线程数
  3. Broker 之前出现故障卡顿,比如gc卡顿,磁盘卡顿等,导致Broker缓存的zk信息和实际的zk信息不一致。即Broker认为的分区Leader不是实际的leader,导致数据不能正确同步。此时,会打印如下日志:

kafka-under-replicated-partitions

此时,解决方案: 重启该台Broker

副本分区拉取线程数操作

操作步骤

  • 查看配置

    sh kafka-configs.sh --bootstrap-server 10.0.64.83:9092 --entity-type brokers --entity-default --describe
  • 调整集群维度的副本拉取线程数

    sh kafka-configs.sh --bootstrap-server 10.0.64.83:9092 --entity-type brokers --entity-default --alter --add-config num.replica.fetchers=3

验证步骤

可以先登录集群的一台broker,查看当前副本拉取线程数,可以看到如下图中: 该broker有4个往100748​ 机器的副本拉取线程。

jstack -l <broker进程号>|grep ReplicaFetcherThread

Kafka-ReplicaFetcherThread-1

比如设置了副本拉取线程数为副本线程数为5:则再查看副本拉取线程数如下图

Kafka-ReplicaFetcherThread-2