Kafka giữ message theo cấu hình retention của từng topic, độc lập với việc consumer đã đọc hay chưa. Hai chiều giới hạn:
- Theo thời gian —
retention.ms: giữ message trong khoảng thời gian đặt trước (mặc định 7 ngày = 604800000ms). Quá hạn, segment cũ bị xóa. - Theo dung lượng —
retention.bytes: giới hạn kích thước mỗi partition; vượt ngưỡng thì segment cũ nhất bị dọn.
Hai điều kiện chạy song song — cái nào tới trước thắng. Việc xóa diễn ra theo segment (nhóm message), nên segment.ms/segment.bytes quyết định độ mịn khi dọn.
cleanup.policy chọn cách dọn:
- delete (mặc định): vứt bỏ segment cũ theo thời gian/dung lượng ở trên.
- compact (log compaction): giữ lại giá trị mới nhất theo key, xóa bản cũ hơn của cùng key — hợp cho topic dạng "trạng thái/changelog".
- Có thể đặt delete,compact để vừa nén vừa giới hạn tuổi.
Lưu ý: retention không phải "message đã đọc thì xóa" — Kafka là log, message sống tới khi hết hạn dù nhiều consumer group cùng đọc.