Читает ли потребитель Kafka сообщение из активного сегмента в разделе?

#apache-kafka #kafka-consumer-api #kafka-topic #kafka-partition

#apache-kafka #kafka-consumer-api #кафка-тема #кафка-раздел

Вопрос:

Допустим, у меня есть раздел (раздел-0) с 4 сегментами, которые зафиксированы и имеют право на сжатие. Таким образом, все эти сегменты не будут иметь повторяющихся данных, поскольку сжатие выполняется для всех 4 сегментов.

Теперь есть активный сегмент, который все еще не закрыт. Между тем, если потребитель начинает считывать данные из раздела-0, читает ли он также сообщения из активного сегмента?

Примечание: Моя цель — не предоставлять потребителю повторяющиеся данные для определенного ключа.

Ответ №1:

Ваши опасения справедливы, поскольку потребитель также будет считывать сообщения из активного сегмента. Сжатие журнала не гарантирует, что у вас есть ровно одно значение для определенного ключа, а скорее хотя бы одно.

Вот как в документации вводится сжатие журнала:

Сжатие журнала гарантирует, что Kafka всегда будет сохранять по крайней мере последнее известное значение для каждого ключа сообщения в журнале данных для одного тематического раздела.

Однако вы можете попытаться запустить сжатие чаще, чтобы ваш активный и некомпатируемый сегмент был как можно меньше. Это, однако, связано с затратами, поскольку запуск средства очистки журнала сжатия требует ресурсов.

На уровне темы существует множество конфигураций, связанных с уплотнением журнала. Вот наиболее важные, и все подробности можно посмотреть здесь:

  • delete.retention.ms
  • max.compaction.lag.ms
  • мин. очищаемый.dirty.ratio
  • min.compaction.lag.ms
  • segment.bytes

Тем не менее, я совершенно убежден, что вы не сможете гарантировать, что ваш потребитель никогда не получит никаких дубликатов с темой, сжатой в журнале.