Как проверить, работает ли сжатие журналов в Kafka?
Я внес изменения в файл server.properties в Kafka 0.8.1.1, т.е. добавил log.cleaner.enable=true
а также включен cleanup.policy=compact
при создании темы. Теперь, когда я тестирую его, я отправил следующие сообщения в тему со следующим (Ключ, Сообщение).
- Смещение: 1 - (123, abc);
- Смещение: 2 - (234, по умолчанию);
- Смещение: 3 - (345, гхи);
- Смещение: 4 - (123, изменено)
Теперь я нажал 4-е сообщение тем же ключом, что и предыдущий ввод, но изменил сообщение. Здесь сжатие журнала должно войти в картину. И используя инструмент Кафка, я вижу все 4 смещения в теме. Как я могу узнать, работает ли сжатие журнала или нет? Если предыдущее сообщение было удалено или сжатие журнала работает нормально, так как новое сообщение было отправлено. Это как-то связано с log.retention.hours
или же topic.log.retention.hours
или же log.retention.size
конфигурации? Какова роль этих конфигов в сжатии журнала. PS - Я тщательно изучил документацию Apache, но все еще не ясно.
5 ответов
Хотя этому вопросу уже несколько месяцев, я просто наткнулся на него, проводя исследование для своего собственного вопроса. Я создал минимальный пример, чтобы увидеть, как работает сжатие с Java, может быть, это тоже полезно для вас:
https://gist.github.com/anonymous/f78184eaeec3ee82b15182aec24a432a
Кроме того, ознакомившись с документацией, я использовал следующую конфигурацию на уровне темы, чтобы сжатие началось как можно быстрее:
min.cleanable.dirty.ratio=0.01
cleanup.policy=compact
segment.ms=100
delete.retention.ms=100
При запуске этот класс показывает, что сжатие работает - в теме только одно сообщение с тем же ключом.
При соответствующих настройках это можно будет воспроизвести в командной строке.
На самом деле, сжатие журналов видно только тогда, когда число журналов достигает очень высокого значения, например, 1 миллион. Так что, если у вас есть так много данных, это хорошо. В противном случае, используя изменения конфигурации, вы можете уменьшить это ограничение до 100 сообщений, а затем вы увидите, что из сообщений с теми же ключами будет только самое последнее сообщение, предыдущее будет удалено. Лучше использовать сжатие журналов, если у вас есть полный снимок ваших данных каждый раз, в противном случае вы можете потерять предыдущие журналы с тем же связанным ключом, что может быть полезно.
Рекомендуется также посмотреть на log.roll.hours, который по умолчанию составляет 168 часов. Простыми словами: даже если у вас не очень активная тема и вы не можете заполнить максимальный размер сегмента (по умолчанию 1G для обычных тем и 100M для смещенной темы), у вас будет закрытый сегмент с размером ниже журнала.segment.bytes. Этот сегмент может быть уплотнен в следующем ходу.
Чтобы проверить свойство Topics из CLI, вы можете сделать это с помощью Kafka-themes cmd:
https://grokbase.com/t/kafka/users/14aev0snbd/command-line-tool-for-topic-metadata
Вы можете сделать это с помощью интерфейса командной строки kafka-themes. Запускаю из докера (
confluentinc/cp-enterprise-kafka:6.0.0
).
$ docker-compose exec kafka kafka-topics --zookeeper zookeeper:32181 --describe --topic count-colors-output
Topic: count-colors-output PartitionCount: 1 ReplicationFactor: 1 Configs: cleanup.policy=compact,segment.ms=100,min.cleanable.dirty.ratio=0.01,delete.retention.ms=100
Topic: count-colors-output Partition: 0 Leader: 1 Replicas: 1 Isr: 1
но не запутайтесь, если вы ничего не видите в поле Config. Это происходит, если использовались значения по умолчанию. Итак, если вы не видите
cleanup.policy=compact
на выходе - тема не уплотнена.