Flink Raw и управляемый статус. Когда их использовать? - PullRequest
0 голосов
/ 13 февраля 2020

Предположим, у меня есть следующий код. Движок инициализируется реализациями этого абстрактного класса, и это сложный класс с хеш-таблицами внутри. Каковы недостатки объявления этого таким образом? Насколько я понимаю, это не сырое и не управляемое состояние. Должен ли я использовать один из них и почему?

Управляемое состояние описано здесь и использует классы, существующие в библиотеке flink (например, ValueState).

Необработанное состояние на другая рука описана здесь и из того, что я вижу, может быть использовано только при расширении класса AbstractStreamOperator, что здесь не так (RichMapFunction расширена). (Пример кода будет оценен по достоинству)

abstract class EmbeddedEngineMap(fsmList: List[FSMInterface],
                             predList: List[PredictorInterface],
                             predictorEnabled: Boolean,
                             expirationTime: Long,
                             collectStats: Boolean,
                             finalsEnabled: Boolean,
                             distance: (Double,Double)) extends RichMapFunction[GenericEvent, Unit] {

       protected var engine: ERFEngine = _
       ....
}

1 Ответ

2 голосов
/ 13 февраля 2020

Ну, в основном, если вы не используете состояние Flink, это в основном означает, что ваш ERFEngine будет создаваться как новый объект каждый раз, когда задание запускается или перезапускается. По сути, это означает, что если во время выполнения задания Ваш engine сохраняет какое-либо состояние , оно будет потеряно при сбое, перезапуске или остановке задания.

Я не буду описывать разница между необработанным и управляемым состоянием, поскольку цитируемый вами пост делает это довольно хорошо. По сути, сырое состояние - это довольно низкоуровневый API, который позволяет вам реализовывать свои собственные операторы, поэтому обычно управляемое состояние является предпочтительным, поскольку оно использует некоторые функции Flink (например, позволяет перераспределение при изменении параллелизма) и, как правило, его проще использовать. .

...