При использовании широковещательного потока в Flink broadcast состояние широковещания разных подзадач одного и того же оператора является изолированным или общим? - PullRequest
0 голосов
/ 11 марта 2020

В своей работе Flink я использую Broadcast State следующим образом:

env.setParallelism(4);
BroadcastStream<String> configBroadcastStream = env.addSource(new BroadCastDataSource(), "BroadCastDataSource").broadcast(configStateDescriptor);
DataStream<String> mapStream = withWatermarkStream.map(e -> e.f4);
DataStream<String> connectedStream = mapStream.connect(configBroadcastStream).process(new BroadcastFunction(configStateDescriptor));

Интересно, является ли изолированным состояние широковещания, к которому обращаются разные подзадачи одного и того же оператора (код показан ниже)?

BroadcastState<String,String> state = context.getBroadcastState(mapStateDescriptor); 

1 Ответ

0 голосов
/ 11 марта 2020

Каждая подзадача поддерживает свою собственную независимую копию состояния широковещания. Рабочее состояние всегда находится в куче (как и все неключевые состояния), и каждая подзадача независимо включает свою копию состояния широковещания в контрольных точках и точках сохранения. Использование RocksDB для состояния широковещания не вариант.

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

См. документы для получения дополнительной информации.

...