在flink中使用广播流时,同一操作符的不同子任务的广播状态是隔离的还是共享的?

7fhtutme  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(413)

在我的flink工作中,我使用如下广播状态:

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);
pcww981p

pcww981p1#

每个子任务维护自己的广播状态的独立副本。工作状态总是在堆上(就像所有非键控状态一样),每个子任务在检查点和保存点中独立地包含其广播状态的副本。使用rocksdb作为广播状态不是一个选项。
注意,如果广播流来自并行源,则不同的子任务可以以不同的顺序接收广播元素。您需要将广播源限制为单个示例,或者注意广播状态更新不依赖于它们到达的顺序,否则可能会导致不一致。
更多信息请参见文档。

相关问题