Kafka Cached zkVersion [62] not equal to that in zookeeper, skip updating ISR (kafka.cluster.Partition) 问题分析
我司业务Kafka集群是3节点(broker分别为10,20,30),每个Topic 3 Partition,3 Repilication的配置,早上起床突然发现所有Topic的Broker节点都变为2个了,然后监控发现仍然活着的Broker个数还是3个。那这是怎么回事呢?
通过KafkaManager监控发现,每个Topic的Leader为10的Partition的ISR只有10了,20,30都消失了,而其他Partition的ISR中也都缺少了10。直觉告诉我,10这个节点实际已经被整个集群抛弃了,查看10节点的日志文件,发现日志仍然在增长,并且其他节点的信息也都在正常同步,也就是说10节点还在工作,但是对于整个集群来说,并没有认可,那么问题是什么呢?由于我们对于Kafka和ZK没有最基本的监控,所以只能通过有限的监控来判断问题发生的时间点,然后找到对应的log日志进行排查。
首先需要确认问题发生的时间点,既然kafka级别的监控不全,那么首先从主机级别的流量开始查吧:

比较幸运的是,发现16:19分左右,10节点的流量有个突变,首先是大幅降低,直至为0,然后突然暴涨,后续恢复正常,很明显是一个10节点离线,然后上线的过程。定位到这个时间点,然后去翻日志,发现20,30节点的日志出奇的类似:

10节点首先被踢出了集群,Shrinking ISR for partition [XXXXXXX,1] from 30,10,20 to 30,20
然后更新ISR的时候报错:Cached zkVersion [27] not equal to that in zookeeper, skip updating ISR (kafka.cluster.Partition)
这个基本符合我们的猜测,10节点短暂离线,然后上线后,因为20,30update ISR时判断ZKversion错误,中断更新,导致10节点只是接管了自己是Leader的那些Partition,对于20,30是Leader的那些,很遗憾,认为10一直死着。这真是一个天大的悲剧啊!
那么为什么会产生这个问题呢?通过一阵google,发现这么一篇文章:https://issues.apache.org/jira/browse/KAFKA-2729 。
Kafka-2729Bug,摘抄几个回复:


ok,我们得出几个结论,这种问题确实是Kafka与ZK连接短暂中断引起,并且这个只能通过重启Kafka节点解决,然后这个在1.1.0版本才得以修复。。。。。。
没其他办法,我们只能择日重启了10节点的kafka,问题解决。
对于升级这件事情,短期内我们是无法解决的,我们应该如何避免或者第一时间知道此类问题的发生呢?
1. 首先Kafka跟ZK的连接为什么中断呢?原因很多,比如网络闪断,比如ZK繁忙,比如ZKGC时间过长。那么我们需要加大Kafka与ZK连接的超时时间:默认6秒,我们增加到30秒。更新位置:Kafka配置文件,两个参数更新如下:
zookeeper.session.timeout.ms=30000
zookeeper.connection.timeout.ms=30000
2. 比如对Kafka,ZK建立全面的监控,结合预警,第一时间知晓问题,然后根据监控指标进行分析,而不是撞大运,人工翻日志
如何建立全面的kafka,ZK监控体系呢?别急,下篇揭晓,先上个图吧:

3. 当然是熟读源码,然后知其所以然,然后。。。。由于业务重心不在这一块,所以这个目标对我而言有点难,各位大牛如果知道此问题的前因后果,欢迎告诉小弟,感激不尽!
Kafka Cached zkVersion [62] not equal to that in zookeeper, skip updating ISR (kafka.cluster.Partition) 问题分析的更多相关文章
- kafka启动时出现FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) java.io.IOException: Permission denied错误解决办法(图文详解)
首先,说明,我kafk的server.properties是 kafka的server.properties配置文件参考示范(图文详解)(多种方式) 问题详情 然后,我启动时,出现如下 [hadoop ...
- Docker部署zookeeper集群和kafka集群,实现互联
本文介绍在单机上通过docker部署zookeeper集群和kafka集群的可操作方案. 0.准备工作 创建zk目录,在该目录下创建生成zookeeper集群和kafka集群的yml文件,以及用于在该 ...
- Kafka集群安装Version1.0.1(自带Zookeeper)
1.说明 Kafka集群安装,基于版本1.0.1, 使用kafka_2.12-1.0.1.tgz安装包, 其中2.12是编译工具Scala的版本. 而且不需要另外安装Zookeeper服务, 使用Ka ...
- tomcat,zookeeper,activeMQ,Kafka设置jvm参数
1,tomcat设置jvm参数 设置方法: 在tomcat bin 目录增加配置:setenv.sh #add tomcat pid CATALINA_PID="$CATALINA_ ...
- zookeeper链接数导致kafka storm不能正常工作
报错信息: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: org.apache ...
- CDH- cdh kafka已经卸载了,但是服务器还有kafka-topics这些命令可用,导致重新安装kafka出现问题
cdh界面删除并不会将 kafka数据删除,需要将kafka集群节点 var/local/kafka/data 清理掉 然后将zk brokers/topics 下的topic也清理掉
- 【拆分版】Docker-compose构建Zookeeper集群管理Kafka集群
写在前边 在搭建Logstash多节点之前,想到就算先搭好Logstash启动会因为日志无法连接到Kafka Brokers而无限重试,所以这里先构建下Zookeeper集群管理的Kafka集群. 众 ...
- docker 搭建zookeeper集群和kafka集群
docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...
- zookeeper集群及kafka集群搭建
1.zookeeper集群搭建 1.1 上传安装包 官网推荐至少3个节点,我们这里也用三个节点192.169.2.18 192.169.1.82 192.169.1.95 准备好安装包,zooke ...
随机推荐
- smoking的安装和配置
yum install -y perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-IO-Socket-SSL perl- ...
- Flume - Kafka日志平台整合
1. Flume介绍 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供 ...
- Redis进阶实践之十九 Redis如何使用lua脚本
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...
- C++引用指针 & 构造函数
近来回转 C++的学习,脑子又被搞得了一团迷(简直不要忘得太快..... ) 过后静下来想一想,还是因为有些东西没搞清楚导致,所以理了理两个容易搞迷糊的地方. 1. 引用与指针 C++进行传值更 ...
- 分享:docker swarm集群搭建
[Y_H]实践原创 三台虚拟机:1台centOS , 2台ubuntu. 网上有用docker-machine创建虚拟机做的例子. 这里直接用VMware创建这三台虚拟机,然后用xshell连 ...
- 新事物学习---Chrome上使用PWA
PWA是什么 PWA(Progressive Web Apps)是 Google 最近在提的一种 Web App 形态 (或者如 Wikipedia 所称的"软件开发方法").PW ...
- 2017-2018-1 我爱学Java 第四五周 作业
<打地鼠>Android游戏--需求规格说明书 工作流程 组员分工及工作量比例 <需求规格说明书>的码云链接 总结与反思 参考资料 工作流程 小组成员预先参考蓝墨云班课第八周中 ...
- bzoj千题计划276:bzoj4515: [Sdoi2016]游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=4515 把lca带进式子,得到新的式子 然后就是 维护树上一次函数取min 一个调了一下午的错误: 当 ...
- MSSQL 2000 错误823恢复案例
一.故障描述 MSSQL Server 2000 附加数据库错误823,附加数据库失败.数据库没有备份,不能通过备份恢复数据库,急需恢复数据库中的数据. 二.故障分析SQL Server数据库 823 ...
- RAID6三块硬盘离线导致的数据丢失恢复过程
小编我最近参与了一例非常成功的数据恢复的案例,在这里分享给大家.用户是一组6块750G磁盘的 RAID6,先后有两块磁盘离线,但维护人员在此情况下依然没有更换磁盘,所以在第三块硬盘离线后raid直接崩 ...