Kafka使用最佳实践-Kafka Topic故障问题分析思路

1.1     分析导图

 

1.2    Topic的describe信息异常,出现大量的leader -1或者leader为none

  • 通过1.4章节查看集群节点是否完整。查看kafka集群的节点是否有非常规退服。详情见4.1.14章节。如果出现这种情况,topic只能强制删除后重新创建,方法见维护宝典《如何手动删除topic》。
  • 节点信息正常但是出现大量的leader出现-1或者none,需要从以下几个方向排查。
  • Zookeeper上的分区数创建不完整:按照1.2章节登录zkCli后执行命令:

     ls /brokers/topics/异常topic名称/ 查看结果,如果为空,说明zk在创建partition节点时失败。如下图:

   

此时,如果需要临时恢复,需要手动创建partition目录命令如下,创建后切换controller:

create /brokers/topics/topicName/partitions


如果要彻底解决以上问题,有两个解决方法:

  • 首先按照维护宝典《执行Kafka Topic创建操作,发现PartitionLeader显示为none》章节处理。
  • 重启kafka集群。
  • Zookeeper上的分区数创建完整,但是leader-1:参照维护宝典《topic分区ISR存在存活副本,但是leader-1》处理,或者打开集群的leader.election.enable 参数,动态修改该参数。

1.3    Topic分区状态良好但是无法读写数据

     1)判断当前节点是否有问题。

  • 观察其它topic在本节点的写入流量是否正常,如果也不正常说明当前节点有问题,尝试重启节点看是否能够恢复。若能恢复需要再收集日志分析原因。
  • 如果没有可以参考的其他业务,可以创建一个测试使用的单分区单副本的测试topic(手动指定模式),然后向该topic中写入测试数据,看是否存在读写异常。如果存在问题,尝试重启节点是否能够恢复

    2)如果节点没有问题,请收集日志进一步分析原因。

1.4    Topic分区状态良好但是无法读写数据

分区未同步主要原因有以下几点:

   1. 部分节点数据流量大,短时间内同步缓慢,分区不同步。

   通常可以通过查看下图曲线,正常情况下曲线的值为0

通常情况下这种现象在业务的数据高峰期最为常见,当渡过数据高峰期后,曲线数值会变为0

排查思路:

   1)排查每个节点上面的分区总数和leader总数和分区总数。

  可以参考kafka实例的曲线图。如果以下参数在每个节点的数量不均衡,可能导致数据热点。需要迁移部分分区。使整个集群分区总体均衡。

   

 2)  排查具体未完全同步的节点是哪几个。

找出哪些节点的分区没有同步。如下图:

可以看出,broker-3broker-1broker-2无法同步,那么就要具体排查broker-3节点和broker-1节点上面的流量信息。如下图:

如果流量差异大,则重点排查节点上面是否存在分区少,但是流量大的topic。具体查找可以到具体的broker节点,找到具体的分区,如果存在,扩容分区即可。

2. 副本线程异常下线。

副本线程异常下线的恢复方法见《分区不均衡判定方法及解决方案.docx》。注意6.5.1~6.5.1.7版本可能存在副本异常下线的风险,该问题已经在6.5.1.8彻底解决。

1.5  Topic创建失败

1)如果是安全模式,需要使用的用户必须是带有kafkaadmin权限,或者带有管理角色的用户。

2)Zookeeper上节点创建失败。使用如下命令查看topic的节点的partition信息

ls /brokers/topics/topic名称

如下图:

此时说明partition节点没有创建成功。彻底恢复需要重启kafka集群。

临时规避方案:手动创建partitions节点,然后切换controller。

3)其它创建失败问题见维护宝典《Topic操作常见故障》

1.6  Topic删除失败

1)详情见维护宝典《执行Kafka Topic删除操作,发现无法删除》

(完)