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