Кафка log.segment.bytes против log.retention.hours

Я следил за книгой 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). Ниже отрывок из книги.

введите описание изображения здесь


person Mayank Madhav    schedule 30.12.2020    source источник
comment
Каков фактический размер сегмента для этой темы? Вы можете узнать с помощью команды $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
comment
segment.bytes = 1073741824 чувствительный = ложный синонимы = {STATIC_BROKER_CONFIG: log.segment.bytes = 1073741824, DEFAULT_CONFIG: log.segment.bytes = 1073741824}, поэтому все по умолчанию, то есть 1 ГБ   -  person Mayank Madhav    schedule 30.12.2020


Ответы (2)


Вы наблюдаете ожидаемое поведение, которое также обсуждалось здесь < / а>. Короче говоря, если у вас есть активный сегмент, который еще не заполнен, и retention.ms прошел, он будет закрыт и превратится в старый сегмент журнала, даже если он не заполнен.

person fvaleri    schedule 30.12.2020
comment
Спасибо за ссылку ... не сразу понял, но после нескольких чтений, думаю, я понял (надеюсь). Утверждение о том, что журнал может быть удален, только когда он закрыт, верно. Существует конфигурационный файл segment.ms, для которого по умолчанию установлено значение 7 дней. Следовательно, мои журналы скручиваются. Закрытые журналы, которые не использовались для retention.ms (в моем случае снова 7 дней), могут быть удалены. [без учета размера, поскольку в моем случае он был меньше 1 ГБ] Надеюсь, это имеет смысл, @fvaleri, подтвердите - person Mayank Madhav; 30.12.2020
comment
Я думаю, вы полностью это поняли. - person fvaleri; 30.12.2020
comment
retention.ms не влияет на удаление / закрытие активных сегментов. Пожалуйста, посмотрите мой ответ. - person Khanna111; 13.05.2021

Надеюсь, это станет яснее.

segment.ms = ›максимальный возраст файла сегмента (с момента создания)

retention.ms = ›максимальный возраст любого сообщения в сегменте (который закрыт), после которого этот сегмент имеет право на удаление (если установлена ​​политика удаления)

Таким образом, если сегмент является активным сегментом, его можно пролонгировать на основе segment.ms (или segment.bytes), но НЕ с помощью retention.ms. Удержание вступает в игру только на закрытых (не активных) сегментах.

Таким образом, поведение, указанное в книге, является правильным. Однако вы думаете, что сегмент активен, и в журналах INFO указано, что сегмент настроен на удаление. Этого не может произойти в активном сегменте (при условии отсутствия ошибки). Чтобы какие-либо свойства retention. * Вступили в силу, сегмент должен быть закрыт (не активен).

См. это.

person Khanna111    schedule 12.05.2021