kafka日志保留策略异常处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka日志保留策略异常处理相关的知识,希望对你有一定的参考价值。
参考技术A 文件系统监控,以肉眼可见的速度增大使用空间查看当前日志保留策略配置,关键配置如下:
日志片大小设置为1G(log.segment.bytes默认大小也是1G),删除策略需要等到日志分片后才能被标记为删除,如没有设置分片时间的话,需要等写满日志片,或是等到7天(默认时间)没有数据写入后,才会自动分片。
可以适当降低log.segment.bytes 大小为512M,设置segment.bytes 大小为 512M,手动设置分片时间 log.roll.hours ,
参考: kafka 数据定时删除实验
1.停止kafka服务
a) 找出kafka进程号,使用命令jps
b) 杀掉kafka进程,使用命令 kill -9 xxx
c) 查看当前kafka进程是否还存在,ps -ef|grep kafka jps
2.修改配置
vi $KAFKA_HOME/config/server.properties
修改配置:
log.segment.bytes=536870912
添加配置:
segment.bytes=536870912
log.roll.hours=12
3.启动kafka服务
./bin/start_kafka.sh
4.检查状态
ps -ef|grep kafka
jps
5.依次操作其它服务器
kafka的数据保留清除策略(绝对值得一看)
一 kafka保存数据清除策略
Kafka 作为一个高吞吐的消息中间件和传统的消息中间件一个很大的不同点就在于它的日志实际上是以日志的方式默认保存在/kafka-logs文件夹中的。
虽然默认有7天保留数据的机制,但是在数据量大,而磁盘容量不足的情况下,经常出现无法写入的情况。
目前整理了一下清除策略的优化:
日志保存清理策略
属性名 | 含义 | 默认值 |
---|---|---|
log.cleanup.polict | 日志清理保存的策略只有delete和compact两种 | delete |
log.retention.hours | 日志保存的时间,可以选择hours,minutes和ms | 168(7day) |
log.retention.bytes | 删除前日志文件允许保存的最大值 | -1 |
log.segment.delete.delay.ms | 日志文件被真正删除前的保留时间 | 60000 |
log.cleanup.interval.mins | 每隔一段时间多久调用一次清理的步骤(满足删除) | 10 |
log.retention.check.interval.ms | 周期性检查是否有日志符合删除的条件(新版本使用) | 300000 |
这里特别说明一下,日志的真正清除时间。当删除的条件满足以后,日志将被“删除”,但是这里的删除其实只是将该日志进行了“delete”标注,文件只是无法被索引到了而已。但是文件本身,仍然是存在的,只有当过了log.segment.delete.delay.ms 这个时间以后,文件才会被真正的从文件系统中删除。
日志刷新策略
Kafka的日志实际上是开始是在缓存中的,然后根据策略定期一批一批写入到日志文件中去,以提高吞吐率。
属性名 | 含义 | 默认值 |
---|---|---|
log.flush.interval.messages | 消息达到多少条时将数据写入到日志文件 | 10000 |
log.flush.interval.ms | 当达到该时间时,强制执行一次flush | null |
log.flush.scheduler.interval.ms | 周期性检查,是否需要将信息flush | 很大的值 |
分段策略属性
属性名 | 含义 |默认值
log.roll.hours,ms | 日志滚动的周期时间,到达指定周期时间时,强制生成一个新的segment |168(7day)
log.segment.bytes| 每个segment的最大容量。到达指定容量时,将强制生成一个新的segment | 1G(-1为不限制)
|log.retention.check.interval.ms |日志片段文件检查的周期时间|60000
二 kafka数据存储位置
kafka配置文件默认的存储路径是tmp/kafka-logs
,如果你修改了kafka的配置文件,那么kafka的数据存储路径,在配置文件中的配置项是:
log.dirs=/mnt/kafka/data
除了数据要存储,还有kafka的运行日志文件,日积月累也会变大,所以我们最好也把他迁移到大的磁盘中。kafka的日志文件,默认存储在kafka安装目录的logs
文件夹中,在v2.7.1及一下的版本中,都无法在配置文件中直接定义修改,只能修改其运行文件/kafka/bin/kafka-run-class.sh
(下文再讲如何改)。
以上是关于kafka日志保留策略异常处理的主要内容,如果未能解决你的问题,请参考以下文章
如果发生异常,如何禁用记录 Kafka 批处理中的所有消息?
[异常处理]class kafka.common.UnknownTopicOrPartitionException (kafka.server.ReplicaFetcherThread)