kafka集群中的节点3,topic通过命令删除时,日志文件标记了delete,但是文件没有自动删除
部分topic的过期日志文件没有删除。
server.properties 配置
删除topic
查看日志文件
log-cleaner.log 日志输出
The cleaning for partition rk0000-eoddc3d-eoddc3d-eoddc3d-swasdf is aborted and paused
The cleaning for partition rk0000-eoddc3d-eoddc3d-eoddc3d-swasdf is aborted
排查问题的原因及过程
起初这台kafka节点发生过两次因为kafka日志文件导致磁盘被撑爆的情况,按照日志文件过期删除策略,日志过期时间是168小时,理论上磁盘是完全足够的。并且在重启服务器和kafka节点后,经过大概半天左右的时间过期的日志文件自动被清理掉了。
kafka集群其它节点是正常。kafka版本是2.3.1。
这次重启以后因为业务关系旧的topic全部停用了,新建了其它的topic来传输数据。本来以为日志会自动清理,但是检查以后发现旧的topic过期日志还是没有自动清理掉 。并且新的topic有部分能正常清理日志,有部分还是不能正常清理。
问题解决了。但是原因具体原因不能确定。如果有相同情况,可以按照这个思路排查看看。
我们服务器是arm架构,但是jdk没有使用arm架构的,替换了jdk版本后文件正常删除了。
topic标记为删除,日志不删除
topic标记为删除,并不会立即删除日志,基于以下策略:
详细参考Kafka Broker配置
过期日志不删除
可能是某些topic指定了压缩类型,或者删除前的延迟,通过以下命令进行查看:
这些参数是kafka的日志文件过期的时间。它是指在topic正常的情况下会删除过期的日志文件。
如果我通过命令 :
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic my-topic
删除了topic,正常情况下会在下次轮询时
log.retention.check.interval.ms
删除的时候将topic的日志文件删掉。还有一些情况下,kafka是不会清理过期日志,你可以参考一下:
Kafka从不删除active segment(活跃段),也就是它将追加发送到分区的新消息的段。Kafka只删除旧段。当一个新的消息被发送到分区时,Kafka会将活跃段卷进一个旧的段,并且要么
包含新消息的活动段的大小将超过
log.segment.bytes
,或者活跃段中第一条消息的时间戳超过
log.roll.ms
(默认是7天)。你可以去消费一下那些不删除的topic,获取它的时间戳,如果时间戳大于7天,但是它依然在活跃的段,问题就是上面2个参数引起的,没有创新新的段。
每个segment的默认是1G,能看到日志文件已经有很多个了。这个topic的日志文件总的大小有两百多个G。而且文件数据有3个多月前的数据。理论上
log.roll.ms+log.retention.hours=14
天以后也会正常删除。并且kafka节点在重启以后这些过期数据和删除的topic就会被正常删掉,这是我不能理解的地方。
我找到您之前回答的一个帖子,现象和这个帖子类似
类似帖
他还有种可能是
broker.id
可能写重,导致一些脏数据(即使改回来,也已经污染了数据),使得kafka在决策的时候无法分辨。接下来的排查,你可能需要打开清理日志,查看具体终止清理的原因了。看看是什么堵住了,导致一直不清理。kafka报cleaning is aborted and paused
如:
你的答案