Nano Hash - криптовалюты, майнинг, программирование

Уплотнение Kafka для дедупликации

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

Спасибо!

21.01.2019

Ответы:


1

Короткий ответ - нет.

Kafka не гарантирует уникальность ключа, хранящегося с включенным сохранением темы.

В Kafka есть два типа cleanup.policy:

  • delete - Это означает, что по истечении заданного времени сообщения не будут доступны. Для этого можно использовать несколько свойств: log.retention.hours, log.retention.minutes, log.retention.ms. По умолчанию log.retention.hours установлен 168. Это означает, что сообщения старше, чем 7 дней, будут удалены.
  • compact - Для каждой клавиши будет доступно хотя бы одно сообщение. В некоторых ситуациях это может быть один, но в большинстве случаев их будет больше. Обработанное уплотнение периодически выполняется в фоновом режиме. Он копирует части журнала с удалением дубликатов и оставлением только последнего значения.

Если вы хотите читать только одно значение для каждого ключа, вы должны использовать абстракцию KTable<K,V> из Kafka Streams.

Связанный вопрос относительно последнего значения ключа и сжатия: Kafka подписывается только на последнее сообщение ?

21.01.2019
  • Добавляя к этому ответу, вы можете настроить еще одну политику, которая объединяет обе политики compact, delete, которая удаляет сегменты журнала, которые старше заданного log.retention.hours, и сжимает оставшиеся сегменты журнала. Обратите внимание, что сжатие журнала происходит только в более старых / пассивных сегментах. 26.01.2019

  • 2

    Глядя на 4 гарантии уплотнения какфа, номер 4 гласит:

    Любой потребитель, продвигающийся с начала журнала, увидит по крайней мере конечное состояние всех записей в том порядке, в котором они были написаны. Кроме того, будут видны все маркеры удаления для удаленных записей при условии, что потребитель достигнет заголовка журнала за период времени меньше, чем параметр delete.retention.ms в теме (по умолчанию - 24 часа). Другими словами: поскольку удаление маркеров удаления происходит одновременно с чтением, потребитель может пропустить маркеры удаления, если он запаздывает более чем на delete.retention.ms.

    Таким образом, у вас будет несколько значений для ключа, если заголовок темы не сохраняется политикой delete.retention.ms.

    Насколько я понимаю, если вы установите 24-часовую политику хранения (delete.retention.ms=86400000), у вас будет уникальное значение для одного ключа для всех сообщений, которые были отправлены 24 часа назад. Это ваш минимум, но не только, поскольку за последние 24 часа могло прийти много других сообщений для того же ключа.

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

    редактировать. Как говорится в комментарии крикета, даже если вы установите свойство хранения при удалении на 1 день, log.roll.ms определяет, когда сегмент журнала закрывается, на основе отметки времени сообщения. Поскольку этот последний сегмент никогда не сохраняется для сжатия, он становится вторым фактором, который не позволяет вам иметь только последнее значение для вашего известного ключа. Если ваша тема начинается с T0, то сообщения после T0+log.roll.ms будут в открытом сегменте журнала и не будут уплотнены.

    21.01.2019
  • Чтобы прояснить последние несколько разделов, открытые сегменты бревен не уплотняются. Важно не только время хранения при удалении, но и размер сегмента журнала. 22.01.2019
  • полностью правда @ cricket_007. Спасибо за разъяснение этой концепции и завершение моего ответа. 22.01.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..