Какая польза от состояния вещания во Flink? - PullRequest
0 голосов
/ 25 апреля 2020

Я не спрашиваю, для чего нужен шаблон широковещания, а конкретно для состояния широковещания. В обоих в этом примере и в этом при обработке передаваемых элементов они добавляются / помещаются в BroadcastState:

    public void processBroadcastElement(
     Pattern pattern, 
     Context ctx, 
     Collector<Tuple2<Long, Pattern>> out) throws Exception 
{
   // store the new pattern by updating the broadcast state
   BroadcastState<Void, Pattern> bcState = ctx.getBroadcastState(patternDesc);
   // storing in MapState with null as VOID default value
   bcState.put(null, pattern);
 }

Предположим, что вместо выполнения что мы добавили Pattern в локальный список или HashMap. В чем будет проблема с этим? В документации говорится, что важно, чтобы каждый параллельный экземпляр сохранял свой собственный BroadcastState таким же образом, как и другие экземпляры, чтобы при изменении масштабирования было достигнуто детерминированное поведение c. Но в этом случае каждый параллельный экземпляр всегда будет нуждаться во всех шаблонах, поэтому все, что происходит при масштабировании, не имеет значения.

Я что-то неправильно понимаю?

1 Ответ

0 голосов
/ 25 апреля 2020

Проблема с использованием локального состояния, а не состояния, управляемого Flink, заключается в том, что оно не будет отказоустойчивым. Конечно, если состояние широковещательной рассылки - stati c, может быть нетрудно перезагрузить его во время перезапуска. Но в общем случае удобно хранить состояние широковещания вместе с остальным состоянием, управляемым Flink, в одном согласованном хранилище состояний. Особенно, если состояние вещания постоянно обновляется.

...