优秀的编程知识分享平台

网站首页 > 技术文章 正文

记一次kafka集群副本不同步问题处理及思考

nanyue 2024-10-21 06:13:59 技术文章 3 ℃

摘要:

本文详细描述kafka集群副本不同步告警分析处理过程,并对此次告警产生原因进行了详细分析,最终找到根因并制定解决方案恢复系统正常。

通过总结本次案例遇到的问题,为其他应用系统故障排除提供参考,并思考总结了运维工作中需要改进的地方

1、 背景Situation

日志系统目前主要的功能是日志的的采集及存储,filebeat采集数据后,输出至kafka进行缓存,之前日志系统只把操作系统层面指标接入zabbix监控,随着监控指标的不断丰富,3月初已完成kafka监控的接入。

2、 事件描述及问题Task

日志系统kafka集群共3台服务器,2022年5月20日,收到zabbix监控告警,告警内容为:kafka未同步的副本数过多,之后的两分钟内,也收到集群其他两台机器的相同告警信息。

3、 分析与对策Action

3.1、故障定位

副本同步必须满足两个条件:

l 副本节点必须能与zookeeper保持会话(心跳机制)

l 副本能复制leader上的所有写操作,并且不能落后太多

先分析第一个条件,由于kafka与zookeeper集群都是部署在相同的服务器上的,目前只收到了kafka的告警信息,并未收到主机宕机以及zookeeper相关告警信息,故排除kafka节点故障、zookeeper集群故障;后续通过4A成功登录相应的服务器也验证了节点并未故障,通过相应的命令查看zookeeper集群,验证集群正常;

排除第一个条件后,那么只剩下第二个条件了,通过查看日志,发现有大量的报错信息如下:

通过日志分析,初步怀疑为消息过大,超过了接收配置的默认值,导致副本无法同步主的信息,从而报错未同步副本数过多。

3.2、根因分析

先解释一下告警指标:在一个运行健康的集群中,处于同步状态的副本数(ISR)应该与总副本数完全相等,如果分区的副本远远落后于leader,那这个follower将被ISR池删除,随之而来的是IsrShrinksPerSec(可理解为isr的缩水情况)的增加。由于kafka的高可用性必须通过副本来满足,所有有必要重点关注这个指标。

其实根本原因在日志报错里很清楚了,就是因为消息过大,超过了接收配置的默认值,导致副本无法同步主的信息;kafka作为接收端可以接收到这么大的消息,但是为什么会同步失败呢,难道是集群间配置不一样?重新检查了配置发现相应参数都是一致的。通过查阅官方文档有两个参数引起了我的注意:message.max.bytes、replica.fetch.max.bytes。

message.max.bytes:这是单个消息的最大值,默认是1M左右;生产集群配置文件配置的为100M。

replica.fetch.max.bytes: follower从 leader 拉取消息进行复制消息的大小,生产集群该配置未做配置。

message.max.bytes必须小于等于replica.fetch.max.bytes,否则就会导致replica之间数据同步失败。

3.3、故障解决方案

修改配置文件,让message.max.bytes与replica.fetch.max.bytes值相同,然后重启kafka。

4、 处理结果Result

查看了所有kafka主题消息的生产速率以及消费速率,发现目前消费速度完全跟得上,而且目前接收的都是日志文件,并不存在大消息情况,故相应修改接收大小,以及同步大小的限制,修改完成后,重启kafka,告警恢复。

5、 建议与讨论Review

配置文件

针对于开源的软件,配置文件的默认参数都是官方认为可以满足日常需求的,一般不需要修改,针对于未出现在配置文件中的参数,修改要慎重,要养成查看官方文档的习惯,最好不要百度,因为每个版本都有可能调整参数,百度出来的结果未必适用生产环境,且未经过验证。修改时一定要了解每个参数的具体含义,以及修改后带来的影响,参数修改很容易,但是有时候就是因为这么个配置,造成极大的影响。

针对集群中配置文件是否可以提取出来在特定的地方保管,每次启动时去拉取配置文件启动程序,避免造成集群中配置文件不一致问题。

监控

kafka监控模板中的监控项众多,在排查问题时,发现好多监控项并不了解其具体意义;既然存在模板中,那就说明该监控项还是有一定价值的,如果我们不知道如何学习开源软件的话,我们可以通过了解监控项,来逐步的了解开源软件以及相应的软件原理。

目前监控中只添加了系统重要配置文件的监控,针对于应用的配置文件监控我觉得也是有必要的,一是为了提醒应用管理员配置文件被修改过,通过该监控项管理员来判断配置文件是否为他人非法修改,集群内的所有节点是否都修改完毕;二是修改完配置后,影响可能不会马上发生,当以后影响发生时有配置文件修改告警,可根据当时告警信息来辅助排查是否由于配置变更引起

最近发表
标签列表