配置了“自动删除”策略,磁盘容量到达95%时,为什么没有自动删除最早的消息?
问题现象
Kafka实例每个代理(即broker)的存储空间为100GB,配置了“自动删除”策略,并创建了一个180分区的Topic,磁盘容量到达95%时,没有自动删除最早的消息。
可能原因
Kafka实例每个代理会使用33GB的磁盘作为日志和Zookeeper数据的存储,且创建实例时磁盘格式化会占用部分磁盘空间,因此实际数据存储空间大约为66GB。Topic的每个分区都是由多个segment文件组成,每个segment文件的最大存储容量为500MB。Kafka删除消息是删除segment文件,而不是删除一条消息。Kafka要求每个分区至少保留一个segment文件用来存储消息,如果分区中仅剩一个segment文件,此segment文件不会被删除。在分区数到达132个(66GB/500MB=132)及以上时,可能会达到磁盘存储空间使用上限。
磁盘容量到达95%(即62.7GB)时,由于Topic配置了180个分区,每个分区中可能只存在一个segment文件,此segment文件无法被删除,其存储的消息也不会被删除。
解决方法
建议扩容磁盘空间,具体操作请参考变更Kafka集群实例规格。