Разница между состоянием Flink и обычными переменными класса - PullRequest
0 голосов
/ 10 февраля 2020

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

Например, если я объявляю переменную класса "someCounter" и увеличиваю ее значение в некоторой функции Map, то значение "someCounter" сохраняется в ходе выполнения кода, тогда зачем нам дорогой укажите для сохранения значения, аналогичные указанным в примере по этой ссылке: https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/state.html#tab_java_0?

static class abc extends RichMapFunction<X,Y> {
    long someCounter = 0;
    //ctor
    public  abc() {};

    @Override
    public Y map(X x) throws Exception {            
        someCounter++;
        if(someCounter > 1000)
            someCounter = 0;
        return someCounter;
    }
}

1 Ответ

3 голосов
/ 10 февраля 2020

Восстановление после сбоев, перераспределение и изменение масштаба - вот некоторые большие различия.

Flink принимает периодические c контрольные точки состояния, которым оно управляет. В случае сбоя ваша работа может автоматически восстановиться с использованием последней контрольной точки и возобновить обработку. Вы также можете вручную запустить моментальный снимок состояния (в данном случае называемый точкой сохранения) и использовать его для перезапуска после повторного развертывания. Пока вы это делаете, вы также можете изменить масштаб кластера вверх или вниз.

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

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

...