Глядя на 4 гарантии сжатия kakfa , число 4 состояния:
Любой потребитель, прогрессирующий с начала журнала, увидит хотя бы конечное состояние всех записей в порядке их написания.Кроме того, будут видны все маркеры удаления для удаленных записей при условии, что потребитель достигнет заголовка журнала за период времени, меньший, чем параметр delete.retention.ms в разделе (по умолчанию 24 часа).Другими словами: поскольку удаление маркеров удаления происходит одновременно со считыванием, потребитель может пропустить маркеры удаления, если он отстает более чем на delete.retention.ms.
Итак, вы будетеиметь более одного значения для ключа, если заголовок темы не сохраняется политикой delete.retention.ms
.
Насколько я понимаю, если вы установите политику хранения на 24 часа (delete.retention.ms=86400000
), у вас будет уникальное значение для одного ключа для всех сообщений, поступивших с 24 часов назад.Это ваш по крайней мере , но не только, поскольку многие другие сообщения для того же ключа, возможно, поступили в течение последних 24 часов.
Таким образом, гарантировано, что вы поймаете по крайней мереодин, но не только последний, потому что сохранение не влияло на последние сообщения.
edit.Как говорится в комментарии крикета, даже если вы установили свойство удаления на 1 день, log.roll.ms
- это то, что определяет, когда сегмент журнала закрыт, на основе отметки времени сообщения.Поскольку этот последний сегмент никогда не сохраняется для сжатия, он становится вторым фактором, который не позволяет иметь только последнее значение для вашего известного ключа.Если ваша тема начинается с T0
, то сообщения после T0+log.roll.ms
будут находиться в открытом сегменте журнала, поэтому не будут уплотнены.