Kafka Streams: как избежать повторной переадресации нисходящего потока дважды при перераспределении

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

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

заранее спасибо


person siklign    schedule 13.01.2018    source источник


Ответы (1)


Нет встроенного механизма. Но вы могли бы просто удалить операцию приемника, которая записывает в тему результатов, когда вы повторно обрабатываете свои данные - когда повторная обработка завершена, вы останавливаете приложение, снова добавляете приемник и перезапускаете. Не уверен, работает ли это для вас.

Другим возможным решением может быть использование transform() фильтра на основе смещения. Для каждого раздела входной темы вы получаете смещение первого нового сообщения (это то, что вам нужно сделать вручную, прежде чем писать Transformer). Вы используете эту информацию, чтобы реализовать фильтр как пользовательский Transformer: для каждой входной записи вы проверяете раздел и смещение записи и отбрасываете его, если смещение записи меньше смещения первого нового сообщения этого раздела.

person Matthias J. Sax    schedule 14.01.2018