Kafka重启出错:Corrupt index found,

原创 2014年12月18日 21:41:23

Kafka进程被强制退出(kill -9)后重启,碰到如下问题:

FATAL Fatal error during KafkaServerStable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
java.lang.IllegalArgumentException: requirement failed: Corrupt index found, index file (/home/kafka/kafka_2.9.2-0.8.1/logs/sampleTopic-1/00000000000006911940.index) has non-zero size but the last offset is 6911940 and the base offset is 6911940


之前的分析有误,还请见谅。

内容会陆续更新:

Kafka log Segment的index文件格式:
首先需要指出,.index文件不是为每个消息都指定到物理位置的映射;举个例子,假设有20000~20009共10条消息,.index文件可配置为每条entry
指定连续10条消息的物理位置映射,该例中,index entry会记录偏移量为20000的消息到其物理文件位置,一旦该条消息被定位,20001~20009可以很快查到。
每个entry大小8字节,定义了消息和其在文件中物理位置的映射;
前4个字节是这个消息相对于该log segment第一个消息offset的相对偏移量,后4个字节是这个消息在log文件中的物理位置;
Kafka启动时加载log的步骤:
  以一个partition log目录为例::

<1> 首先删除所有后缀名为.cleaned和.delete的文件:
<2> 对于.swp结尾的文件,如果是log文件则直接恢复(去掉.swp, 变为.log);
                        如果是index文件直接删掉(然后rebuild index文件);
<3> 对于.index文件,如果没有对应的.log文件(同一个logSement其index和log的主文件名相同), 则删除该index文件;
<4> 对于.log文件,加载如内存;如果其没有对应的.index文件(可能在第<2>步中被删除), 重新恢复其index文件;
<5> 假设到这一步为止Kafka还没有加载到logSements, 说明该partition log目录下为空,一个新的log sement对象会被创建在内存;
    反之则转向第<6>步;
<6> 如果Kafka已经加载到log, 最会开始recover log segments。

        至于为什么要recover log segments, 是因为大多数情况下,recover的目的就是检查Kafka上次关闭时是不是cleanShutDown (可通过检查partition log目录下是不是有后缀名为.kafka_cleanshutdown的文件确定);
        如果是cleanShutDown(后缀名为.kafka_cleanshutDown的文件存在),则无需recover log segment;
        如果不是cleanShutDown, 则需要recover log segments;
    <6.1> 这里解释下什么是recover a log segment?
        在非cleanShutDown情况下, 一个log sement的log及index文件末尾可能有一些不合法的数据(invalid), 我们需要把它们截掉;
        首先要做的最简单检查,是log或index文件大小不能超过配置中设定的值(比方说一个.log文件中被设定最多保存10000条消息,超过10000条的都要抛弃掉);     
<7> 最后做sanityCheck, 主要是检查每个log sement的index文件,确保不会加载一个出错的Log Segment;


本文开头的错误就是在第<7>步中检测到的。

好久没更新了,记录下自己后来的解决方案:

删除每个topic-partition目录下的*.index文件,重启Kafka server, 如果数据多的话,rebuild index会花较长时间。等索引重新创建完成,kafka就能正常工作了。

在安装过Kafka集群的环境中再次安装Kafka出现的问题

使用ClouderaManager安装Kafka,启动Kafka时出现问题: 1. 2015-11-26 13:51:21,952 INFO kafka.log.LogManager: Loading...
  • a822631129
  • a822631129
  • 2015年11月26日 15:33
  • 3499

kafka部署

kafka集群部署 1、下载kafka的bin包 下载地址:http://kafka.apache.org/downloads kafka_2.12-0.10.2.0.tgz  2.12代表...
  • zt3032
  • zt3032
  • 2017年11月22日 14:46
  • 44

FATAL Fatal error during KafkaServerStartable startup. java.lang.OutOfMemoryError: Java heap space

今天搭建了kafka单机版用于测试,配置好以后启动kafka时出现了内存溢出的问题,如下:  [2016-10-22 10:39:39,112] INFO [Kafka Server 0], shu...
  • liuhui_306
  • liuhui_306
  • 2016年10月22日 10:56
  • 2756

kafka的部署及错误排除

kafka部署 1.在/home/storm/目录下新建kafka目录存放软件包,解压软件 mkdir kafka unzip kafka_2.9.2-0.8.1.1.storm.zip 2.修改...
  • agent_bin
  • agent_bin
  • 2016年04月06日 23:04
  • 742

kafka 报错分析

kafka 更新版本之后报错如下:2015-12-02 15:14:12 [ pool-1-thread-2:4217697 ] - [ ERROR ] Failed to collate mes...
  • keep_learn
  • keep_learn
  • 2015年12月04日 14:47
  • 4745

kafka常见问题汇总

1、kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition 问题描述:...
  • yjh314
  • yjh314
  • 2017年08月23日 15:25
  • 779

kafka启动时内存异常

一 启动时内存不足 ## There is insufficient memory for the Java Runtime Environment to continue. # Nati...
  • r02221
  • r02221
  • 2017年02月15日 22:55
  • 1618

Kafka问题总结

1. 消费者无法接受消息进行消费 1、首先检查生产者是否正常发送消息 在linux启动消费者 bin/kafka-console-consumer.sh –zookeeper 192.168.6...
  • jeffleo
  • jeffleo
  • 2017年07月22日 16:03
  • 395

Kafka 实战 - 启动报错 IllegalArgumentException: Path length must be > 0

kafka修改zookeeper的path导致的启动报错:FATAL Fatal error during KafkaServerStable startup. Prepare to shutdown...
  • Veechange
  • Veechange
  • 2016年12月28日 14:51
  • 1517

kafka 出现错误问题

1. kafka创建topic出现:Error while executing topic command org.apache.zookeeper.KeeperException$NoNodeExc...
  • wuxintdrh
  • wuxintdrh
  • 2017年06月11日 17:29
  • 544
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Kafka重启出错:Corrupt index found,
举报原因:
原因补充:

(最多只允许输入30个字)