Как проверить, работает ли сжатие журналов в 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 на выходе - тема не уплотнена.

Другие вопросы по тегам