一、问题描述
开发过程中。假设 Consumer 当前消费到了某个主题的最新一条消息,位移是n,之后该主题没有任何新消息产生,故 Consumer 无消息可消费了,所以位移永远保持在n。由于是自动提交位移,位移主题中会不停地写入位移=n的消息。显然 Kafka 只需要保留这类消息中的最新一条就可以了,之前的消息都是可以删除的。这就要求 Kafka 必须要有针对位移主题消息特点的消息删除策略,否则这种消息会越来越多,最终撑爆整个磁盘。
二、解决问题
开启kafka日志压缩功能。
Kafka 提供了专门的后台线程定期地巡检待 Compact 的主题,看看是否存在满足条件的可删除数据。
这个后台线程叫 Log Cleaner。很多实际生产环境中都出现过位移主题无限膨胀占用过多磁盘空间的问题,如果你的环境中也有这个问题,我建议你去检查一下 Log Cleaner 线程的状态,通常都是这个线程挂掉了导致的。