Attempt to append an offset (110756715) to position 40111 no larger than the last offset appended (110756715) to /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.index.
WARN Found a corrupted index file due to requirement failed: Corrupt index found, index file (/dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.
index) has non-zero size butthelastoffsetis110325000 which is no larger than the base offset110325000.}. deleting /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.
timeindex, /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.index, and /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.txnindex and rebuilding ind
ex... (kafka.log.Log)
你是强制kill了这个kafka节点,但这个节点有些topic分区是master,还有消息领先follower。follower成为master,丢失掉了这些信息,你在启动这台被kill的机器时,信息和之前的follower不对应,kafka的默认保护这些漏掉的消息,导致check时不正确,需要人工介入处理这些遗漏的消息,保障消息不会丢失。
可以通过配置
unclean.leader.election.enable
其描述:是否启用不在ISR中的副本参与选举leader的最后的手段。这样做有可能丢失数据。按照你下面的方式是ok的,也没问题的。
0.11.0版本已经将unclean.leader.election.enable默认为false了,而且我看了配置,也是false,意味着可以允许丢掉这部分消息
我下面说的那个删除index文件,其实在0.11已经修复了的,我试过了,在启动过程中,Kafka会自动将损坏的index文件删除并重建,因此启动不成功,不管index损坏的事。而且即使我手动删index文件,也一样启动不成功
这里我说错了,false是消息不允许丢失,刚刚我试了手动设置为true,还是一样会报:
额,
unclean.leader.election.enable=true
才会,但是,你这个不属于这个范畴了,这个只会影响follwer是否允许成为leader。这个问题应该是0.11版本中的bug,我贴两个issue出来,一起参阅一下:
https://issues.apache.org/jira/browse/KAFKA-3955
https://issues.apache.org/jira/browse/KAFKA-4972
后面我总结出应对方案后也发出来给大家
从源码和日志文件结构中分析 Kafka 重启失败事件:
https://mp.weixin.qq.com/s/zbwGLygjvO_ncgp7FH9QMA
呕心沥血的一次分析,在过程中涉及了Kafka 构建索引文件的细节以及日志文件结构的分析。
遗憾的是找到这个应该说是Kafka的bug之后,发现官方并没有解决方案,只能删除错误日志文件,这太暴力了[流泪],还是赶紧升级Kafka版本吧!
1、记一次 Kafka 重启失败问题排查
https://mp.weixin.qq.com/s/ee7_mhxnj05DxK3EJihyfQ
2、从源码和日志文件结构中分析 Kafka 重启失败事件
https://mp.weixin.qq.com/s/zbwGLygjvO_ncgp7FH9QMA
3、当 Kafka 分区不可用且 leader 副本被损坏时,如何尽量减少数据的丢失?
https://mp.weixin.qq.com/s/b1etPGC97xNjmgdQbycnSg
针对本次事件,我用 3 篇博客详细描述了前因后果,并给出了最后的终极解决方案。
启动日志发生大量以下日志:
WARN Found a corrupted index file due to requirement failed: Corrupt index found, index file (/dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000. index) has non-zero size but the last offset is 110325000 which is no larger than the base offset 110325000.}. deleting /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000. timeindex, /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.index, and /dfs5/kafka/data/secLogBillTrackInfoQueryCNPUSH-2/00000000000110325000.txnindex and rebuilding ind ex... (kafka.log.Log)
这是由于非正常退出,index文件损坏的原因,然后kafka在启动过程中将这些index文件删除重建,具体已在文章:
http://bigdatadecode.club/kafka-corrupt%20index%20found.html
中说明了,也就是说这个日志是正常的现象。
你的答案