Я играю с Kafka на своем локальном компьютере, и я добавил следующую конфигурацию темы:
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic1 config retention.ms=60000
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic1 —config file.delete.delay.ms=40000
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic1 --config segment.bytes=400000
Насколько я понимаю, сегмент будет удален, когда сегмент достигнет указанного выше размера сегмента (segment.bytes = 400000) ПЛЮС каждое отдельное сообщение в сегменте старше указанного выше срока хранения (retention.ms = 60000).
Я заметил, что сегмент всего из 35 байтов, который содержал только одно сообщение, был удален через минуту (может быть, немного больше).
Где я могу получить эту информацию? из сообщения Linkedin Engineer о том, как работает процесс удаления:
Удержание будет основано на сочетании настроек хранения и размера сегмента (в качестве примечания рекомендуется использовать log.retention.ms и log.segment.ms, а не конфигурацию часов. Это существует по устаревшим причинам, но конфиги ms более согласованные). Когда сообщения принимаются Kafka, они записываются в текущий открытый сегмент журнала для каждого раздела. Этот сегмент поворачивается при достижении предела log.segment.bytes или log.segment.ms. Как только это произойдет, сегмент журнала закрывается и открывается новый. Только после закрытия сегмента журнала его можно удалить с помощью настроек хранения. Как только сегмент журнала закрывается И либо все сообщения в сегменте старше, чем log.retention.ms, ИЛИ общий размер раздела превышает log.retention.bytes, сегмент журнала очищается.
Ссылка: Как работает удержание