Kafka消息数据保存时间配置

Kafka 作为一个高吞吐的消息中间件和传统的消息中间件一个很大的不同点就在于它的数据存储是以日志的方式默认保存在/kafka-logs文件夹中的。

默认有7天清楚的机制,在数据量大而磁盘容量不足的情况下,经常出现无法写入的情况,需要调整Kafka的一些默认参数。

Kafka的持久化策略更像redis —— 数据都在内存中,定期flush到硬盘上持久化存储,以保证重启的时候数据不丢。flush策略由log.flush.*这些properties控制。

每个topic可以存储于多个partition,每个partition在kafka的log目录下表现为topicname-id这样的文件夹,如mytopic-0。kafka队列中的内容会按照日志的形式持久化到硬盘上。每个日志文件称为“片段”(segment)。

Kafka清理队列中过期message的方式实际上就是删除过期的segment,这种表现形式十分类似于日志滚动。因此控制kafka队列中消息的保存时间的方式实际上就是日志文件定期分段,然后定期清理掉过期的段文件。

分段策略属性

log.roll.{hours,ms} 日志滚动的周期时间,到达指定周期时间时(优先级依次升高),强制生成一个新的segment 默认(168(7day))

log.segment.bytes 每个segment的最大容量。到达指定容量时,将强制生成一个新的segment 默认(1G(-1为不限制))

log.retention.check.interval.ms 日志片段文件检查的周期时间 默认(60000)

日志刷新策略

Kafka的日志实际上是开始是在缓存中的,然后根据策略定期一批一批写入到日志文件中去,以提高吞吐率。

og.flush.interval.messages 消息达到多少条时将数据写入到日志文件 默认(10000)

log.flush.interval.ms 当达到该时间时,强制执行一次flush 默认(null)

log.flush.scheduler.interval.ms 周期性检查,是否需要将信息flush 默认很大的值

日志保存清理策略

cleanup.policy={compact,delete} 日志清理保存的策略只有delete和compact两种 默认(delete)

log.retention.{hours,minutes,ms} 日志保存的时间,可以选择hours,minutes和ms,优先级依次升高 默认hours(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 这个时间以后文件才会被真正的从文件系统中删除。

举个栗子:

log.roll.hours=1
log.retention.hours=2
log.segment.delete.delay.ms=0

这段配置的含义:每小时滚动一个日志文件,日志删除(cleanup.policy默认为delete)时间为2小时

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章