日志是如何清理的呢?
- deletion策略,正常情况下,根据日志的配置,自动进行最大留存时间、最大留存大小的清理,以segment为单位,具体看kafka-log-retention任务
- compaction策略,topic可以设置compaction策略为compaction、delete + compaction,这样的话LogCleaner会定时进行compaction。优化策略,segments氛围cleaned和uncleaned,从uncleaned中遍历消息(在逻辑中可以根据需求读取需要的大小以节省内存)构建offsetMap来存储这一段中最新的key的offset,而从头遍历segments,清理掉offsetMap中已有的已有的消息(也就是最新消息)