Прецедент, что я пытаюсь решить следующим образом:Flink пример пользовательского разметки
- У нас есть поток данных, поступающих из Кафки
- Мы хотели бы, чтобы гарантировать, что сообщение/записи, содержащие тот же значение для конкретного объекта обрабатывается одним и тем же оператором.
- Мы хотели бы поддерживать состояние этого оператора, чтобы мы могли обогащать будущие сообщения.
Так, например:
- Давайте предположим, что все сообщения являются массивы байтов, имеющие представляющие кодированные данные.
- Все сообщения, которые имеют определенное значение в кодированных данных, должны обрабатываться одним оператором.
- Это так, что, когда мы получаем специальные сообщения, которые также соответствуют одному значению, они могут быть сохранены как состояние на Операторе (после разделителя) и могут использоваться для обогащения последующих сообщений.
Вопросы:
- Будет ли пользовательские разметки помощь с этим?
- Если нет, то было бы хорошим решением для этого?
- Может ли кто-нибудь поделиться примером пользовательского разделителя в Flink для Datastream. Я не смог найти никаких полных примеров.
Как это будет работать в кластере? Будет ли Flink маршрутизировать сообщения, обрабатываемые любым узлом, одному оператору на одном узле? Я также начинаю думать, что это можно решить, поддерживая глобальный кеш в кластере. Я не уверен, поддерживается ли это Flink. @ Matthias, что вы думаете? –
В кластере Flink будет перераспределять данные для отправки всех записей с одним и тем же ключом на одну машину (это то, что делает 'keyBy()'). На каждой машине будет один или несколько операторов/потоков (в зависимости от вашей конфигурации), обрабатывающих записи (внутренне каждый оператор отделяет обработку для каждой клавиши - так что клавиши не мешают - то есть, если вы программируете пользовательские UDF, вы не увидите нескольких ключей в вашем UDF - будет несколько экземпляров UDF, то есть по одному для каждого ключа). Так что ты ничего не делаешь - Флинк позаботится о тебе. –
Спасибо. Также мне интересно, что произойдет, если эта машина опустится. Я предполагаю, что Флинк, вероятно, повторит это на другом узле. Это будет означать, что я потеряю состояние оператора. Есть ли способ обойти это? –