#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
Тем не менее, я совершенно убежден, что вы не сможете гарантировать, что ваш потребитель никогда не получит никаких дубликатов с темой, сжатой в журнале.