Log compaction giữ lại message mới nhất của mỗi key và xoá các phiên bản cũ — khác hẳn cách xoá theo thời gian của log.retention.hours. Bật bằng cleanup.policy=compact.
Dùng ở đâu: KTable trong Kafka Streams (topic compact giữ state mới nhất), changelog topic của Kafka Connect, và snapshot cho event sourcing khi chỉ cần state cuối cùng.
Tombstone record là message có key nhưng value = null. Nó báo cho log compaction xoá sạch mọi message mang key đó khỏi compacted log — đây là cách xoá data khỏi KTable hoặc khỏi hệ thống downstream, cũng là cách đáp ứng quyền được xoá của GDPR.
Vài điểm dễ hiểu nhầm:
- Compaction không chạy real-time; log.cleaner.min.cleanable.ratio và log.cleaner.backoff.ms quyết định tần suất.
- Active segment (segment đang được ghi) không bao giờ bị compact, chỉ các segment đã đóng mới bị.
- Vì vậy consumer đọc một compacted topic vẫn có thể thấy cả bản cũ lẫn bản mới trong cùng một chu kỳ dọn.