卡夫卡保留期之谜

Sha*_*s88 2 apache-kafka

我在我们的生产集群上配置了一个主题,它的保留期为 432000000 毫秒,即 5 天。但它通常保存包含 10 天前时间戳的最早消息!例如,今天 3 月 22 日,我使用控制台消费者命令检查了该主题中的数据。第一个记录的时间戳为 3 月 12 日。这些数据几乎在生成时进入主题,因此日志中的时间戳与排队时的实际时间没有区别。那么,Kafka 存储的消息远远超过了配置的保留期,这怎么会发生呢?

Mic*_*son 5

保留设置是下限。

在您的示例中,这意味着 Kafka 不会删除任何不到 5 天的消息。

磁盘上的日志被分成几个部分。Kafka 仅对完整段执行删除操作,不会触及最新(活动)段。因此,要删除段,其中的最后一条消息必须早于 5 天,并且不能是最新的段。

默认情况下,Kafka 仅在新段超过 7 天(log.roll.hours=168)或达到最大大小(log.segment.bytes=1GB)时才会滚动。

因此,由于大小的原因,您似乎没有产生足够的数据来滚动新段,因此我建议减少log.roll.hours以强制更频繁地创建新段。

  • Kafka 数据目录下的每个以“.log”结尾的文件都是一个段。正如我所说,减少“log.roll.hours”(或单个主题的“segment.ms”),然后删除应该更接近您的保留限制。例如设置为24小时。 (2认同)