Я следил за книгой Kafka: The Definitive Guide First Edition, чтобы понять, когда сегменты журнала удаляются брокером.
Согласно тексту, который я понял, сегмент не подлежит удалению, пока он не будет закрыт. Сегмент может быть закрыт только тогда, когда он достиг размера log.segment.bytes (учитывая, что log.segment.ms не установлен). Как только сегмент станет подходящим для удаления, будет применяться политика log.retention.ms, чтобы окончательно решить, когда удалить этот сегмент.
Однако это, похоже, противоречит поведению, которое я наблюдаю в нашем производственном кластере (Kafka ver 2.5).
Сегмент журнала удаляется, как только выполняется log.retention.ms, даже если размер сегмента меньше log.segment.bytes.
[2020-12-24 15: 51: 17,808] ИНФОРМАЦИЯ [Log partition = Topic-2, dir = / Folder / Kafka_data / kafka] Найдены удаляемые сегменты с базовыми смещениями [165828] из-за нарушения времени хранения 604800000 мс (kafka.log. Бревно)
[2020-12-24 15: 51: 17,808] ИНФОРМАЦИЯ [Log partition = Topic-2, dir = / Folder / Kafka_data / kafka] Планирование сегментов для списка удаления (LogSegment (baseOffset = 165828, size = 895454171, lastModifiedTime = 1608220234000, largeTime = 1608220234478)) (kafka.log.Log)
Размер все еще меньше 1 ГБ, но сегмент был удален.
В книге упоминается, что на момент выпуска пресс-релиза версия Kafka была 0.9.0.1. Так был изменен этот параметр в более поздних версиях Kafka. (Я не нашел конкретного упоминания об этом изменении в документации Kafka). Ниже отрывок из книги.
$KAFKA_HOME/bin/kafka-configs.sh --bootstrap-server :9092 --entity-type topics --entity-name my-topic --describe --all | grep segment.bytes
- person fvaleri   schedule 30.12.2020