Kafka Stream Punctuator получает доступ к данным локального хранилища при его восстановлении - PullRequest
0 голосов
/ 18 июня 2019

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

Давайте опишем, каков наш сценарий: у меня есть приложение A KafkaStreams (написанное на Java), в котором мы потребляем из одной темы «входящая тема», и мы помещаем некоторые объекты в локальное хранилище, используя в качестве ключа метку времени плюс какой-то уникальный идентификатор, что-то вроде:

ключ -> 201906122345_ds243132eddsfs значение -> объект

Затем в любой момент из этого магазина у нас есть пунктуатор, считывающий диапазон элементов от "" до теперь выраженного в ггггммддччММ (т. 201906122345). Мы хотели обработать эти данные только один раз. Они читаются, удаляются из магазина и пересылаются по другой теме «промежуточный раздел», где они используются и обрабатываются другим процессором. Мы заметили, что когда мы добавляем узлы в приложение A или когда Kafka перебалансирует разделы между узлами, мы обрабатываем старые записи. Я предполагаю, что пунктуатор получает доступ к локальному хранилищу, в то время как библиотека KafkaStreams перестраивает его. Мне удалось найти несколько таких случаев только при восстановлении локального магазина.

Вопрос: это ожидаемое поведение? Я неправильно использую местные магазины? Можно ли как-то настроить другое поведение, чтобы пунктуатор не работал при восстановлении локального хранилища?

1 Ответ

0 голосов
/ 24 июня 2019

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

Возможно, включение EOS путем установки processing.guarantees="exactly_once" поможет вам.Однако, если вы видите дублирование во время регулярного / постепенного перебалансирования, у вас может быть ошибка приложения (или ошибка в KafkaStreams).Трудно сказать.

...