有奖捉虫:云通信与企业服务文档专题,速来> HOT

问题概述

过期消息没有及时被删除。

原因分析

Kafka 的消息删除机制会导致某些业务场景出现过期消息没有及时删除的情况,如果对机制不了解容易产生疑惑,例如:分区0和分区7的消息时间戳存在明显差距,分区0的过期消息没有被及时删除。

Kafka 消息删除机制

Kafka 数据存储是以 Topic、分区、数据段三个维度实际落盘存储的,消息数据删除的条件如下:
消息数据根据保留时间进行删除,删除是以数据段为单位的。
每个数据段当前是设置为1GB大小,达到1GB后滚动生成新的数据段。
数据段内的所有消息都过期才会删除该数据段。
如果数据段内有一行消息在保留时间内,即例如段文件的最后一行是在保留时间内,这个段文件就不会被删除。
由于某些原因导致消息写入有倾斜,数据写入集中在某些分区,例如分区7,某些分区数据很少,例如分区0。此时分区0的数据段大小未达到1GB,没发生滚动,但整个段内有数据在保留时间内,所以分区0中的消息就不会被删除。