Определяет ли retention.bytes максимальный размер неактивного сегмента? - PullRequest
0 голосов
/ 20 июня 2020

У меня есть настройка kafka для хранения, например:

# A size-based retention policy for logs. Segments are pruned from the log as long as the remaining$
# segments don't drop below log.retention.bytes.$
log.retention.bytes=1073741824$
$
# The maximum size of a log segment file. When this size is reached a new log segment will be created.$
log.segment.bytes=1073741824$

Таким образом, размер log.retention.bytes и log.segment.bytes составляет 1 ГБ, а затем я создал topi c только с одним разделом. После сброса сообщения на мой topi c я заметил, что всегда есть два файла журнала, один файл уже достиг 1 ГБ, а другой является активным, который принимает сообщения.

Мой вопрос, это log.retention.bytes определяет максимальный общий размер файлов неактивных сегментов без учета активного?

Спасибо

1 Ответ

2 голосов
/ 20 июня 2020

Да, это примерно правильно. Обычно мне не нравится определять этот параметр как «максимальный размер», поскольку он не совсем правильный.

Один из способов увидеть это - рассмотреть log.retention.bytes минимальный объем данных, который должен оставаться после Kafka. удаляет сегменты. Или объем данных, который Kafka гарантирует хранить в любое время (очевидно, только если не достигнут предел времени хранения!)

Активный сегмент не подлежит удалению. Итак, как вы заметили, когда заполняется первый сегмент, Kafka ничего не удаляет, даже если вы достигли 1 ГБ. Вместо этого он свернул новый сегмент (новый активный). Когда этот новый сегмент также достигнет 1 ГБ, у вас будет фактически 2 ГБ данных на диске.

В этот момент новый сегмент прокручивается снова, и у вас есть 2 неактивных сегмента. Только теперь Kafka может удалить сегмент и по-прежнему удовлетворять требованиям log.retention.bytes, так как на диске будет 1 ГБ данных + активный сегмент.

...