Kafka 日志消息保存时间总结

Kafka 日志消息保存时间总结

Kafka 作为一个高吞吐的消息中间件和传统的消息中间件一个很大的不同点就在于它的日志实际上是以日志的方式默认保存在/kafka-logs文件夹中的。虽然默认有7天清楚的机制,但是在数据量大,而磁盘容量不足的情况下,经常出现无法写入的情况。如何调整Kafka的一些默认参数就显得比较关键了。这里笔者整理了一些常见的配置参数供大家参考:

分段策略属性

属性名含义默认值
log.roll.{hours,ms}日志滚动的周期时间,到达指定周期时间时,强制生成一个新的segment168(7day)
log.segment.bytes每个segment的最大容量。到达指定容量时,将强制生成一个新的segment1G(-1为不限制)
log.retention.check.interval.ms日志片段文件检查的周期时间60000

日志刷新策略

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

属性名含义默认值
log.flush.interval.messages消息达到多少条时将数据写入到日志文件10000
log.flush.interval.ms当达到该时间时,强制执行一次flushnull
log.flush.scheduler.interval.ms周期性检查,是否需要将信息flush很大的值

日志保存清理策略

属性名含义默认值
log.cleanup.polict日志清理保存的策略只有delete和compact两种delete
log.retention.hours日志保存的时间,可以选择hours,minutes和ms168(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 这个时间以后,文件才会被真正的从文件系统中删除。

使用命令删除:

1.高版本的kafka,提供了直接删除n条消息的操作方法。
脚本内容地址:

 

https://github.com/apache/kafka/blob/trunk/bin/kafka-delete-records.sh

使用这个脚本, 配套的还有一个json文件。 新建一个json文件,内容如下,里面指定了partition和offset. 然后把这个文件保存为 offset.json

 

{"partitions": [{"topic": "mytest", "partition": 0, "offset": 90}], "version":1 }

这时候调用脚本,可以做到删除

 

./kafka-delete-records.sh --bootstrap-server localhost:9092 --offset-json-file ./offset.json

2.如果上述方法,提示错误:

 

Error: Could not find or load main class kafka.admin.DeleteRecordsCommand

则说明kafka版本过低,这时候可以使用另一种方法。

./kafka-topics.sh --zookeeper 127.0.0.1:2181 --alter --topic testTopic --config retention.ms=时间(微秒)
动态地更新消息保留时间,假如只保留一小时之内的消息 ,60 x 60 x 1000 = 360000 就设置为retention.ms=3600000
然后kafka需要轮询,之后会执行删除
注意:kafka执行完删除后 你需要再次调用这个脚本 把时间还原回去

这种方法,误差根据你服务器的配置来决定的。由kafka配置文件的log.retention.check.interval.ms参数控制。 并且因为有很多个节点,经常是某个节点删除了数据之后,其他的节点还没有轮询到删除操作。 总的来说精确度不是很高。



作者:Cosi_fan_tutte
链接:https://www.jianshu.com/p/8c97290a31cd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

kafka消息持久化是指将消息保存在磁盘上,以便在需要时进行读取和处理。kafka使用一种称为segment的文件来持久化消息。每个topic和分区都有自己的一系列段文件。 当生产者发送消息时,消息首先会被写入一个内存缓冲区,然后根据一定的策略,如消息的大小或时间间隔,将消息批量写入磁盘上的一个新的segment文件。每个segment文件都有一个唯一的起始偏移量,用于标识其中的消息。 消费者通过指定偏移量来读取消息Kafka会根据偏移量定位到相应的segment文件,并读取相应的消息。因此,消息的偏移量在Kafka中非常重要,它不仅用于消费者读取消息,也用于对消息的持久化存储和管理。 由于Kafka是一个日志消息存储系统,消息在被消费者获取之后并不会立即从消息队列中移除,而是继续存储在磁盘中。这种设计确保了消息的持久性和可靠性,即使消费者断开连接或发生故障,消息仍然可以被重新消费。 总结来说,kafka消息持久化是通过将消息写入磁盘上的segment文件来实现的。每个消息都有一个偏移量,用于定位和获取消息。这种设计保证了消息的持久性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [kafka消息持久化文件](https://blog.csdn.net/hncscwc/article/details/128541806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [KafKa - 消息持久化策略 及 消息查找策略讲解](https://blog.csdn.net/qq_43692950/article/details/125032063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值