Является ли сжатие Kafka Log также механизмом дедупликации? - PullRequest
1 голос
/ 02 мая 2020

Является ли сжатие Kafka Log также механизмом дедупликации

Я прошел этот пост Уплотнение Kafka для дедупликации

, в котором говорится, что сжатие Kafka Log не является механизм дедупликации. Но у меня все еще мало сомнений.

q3) Я не могу понять, как сжатие журналов не предотвращает повторное чтение.

 Suppose Producer sends 2 records
 Key : Employee1 { Salary :1000 } 
Key : Employee1 { Salary :2000 } 

Consumer hasn't read the data yet.
Log Compaction happens
we have one only record
Key : Employee1 { Salary :2000 } 
Consumer reads data now

Таким образом, потребитель только читает Key : Employee1 { Salary :2000 }. Поэтому повторное чтение запрещено. Где я иду не так? А что подразумевается под сжатием логов, происходит только когда «сегмент зафиксирован»?

1 Ответ

1 голос
/ 02 мая 2020

В ситуации, которую вы описали, т. Е. Потребитель еще не прочитал данные, и происходит уплотнение - да, в этом случае повторное чтение может быть предотвращено.

Но ...

  • Если уплотнение не произошло, вы все равно увидите дубликаты.
  • Конфигурация delete.retention.ms (default value of 24 hours) позволяет потребителям видеть удаленные записи, что может привести к тому, что дубликаты попадут к потребителям. Эти сообщения будут иметь метку удаления.
  • Ваш второй вопрос - Сжатие происходит только на зафиксированных сегментах, а не на активных сегментах. Сообщения в любом разделе Kafka располагаются в сегментах на диске. Как только размер сегмента достиг 1 ГБ или сегменту 7 дней (в зависимости от того, что меньше), сегмент закрывается или фиксируется. Эти настройки 1 ГБ или 7 дней, очевидно, настраиваются. Затем открывается новый сегмент, и новые сообщения записываются в этот новый сегмент. Теперь, если дубликаты записываются в этот активный сегмент и если потребитель постоянно читает, что часто происходит, дубликаты будут прочитаны.

Итак, если вы подумаете об этом, вы будете НЕ можно полагаться только на одну функцию сжатия для достижения дедупликации. Более того, это НЕ что-то, что может быть запущено с помощью API (по крайней мере, пока), поэтому вы не сможете управлять им в своем приложении для пользователя.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...