Flink中的广播状态有什么用?

问题描述 投票:-1回答:1

我不是在问广播模式是什么,而是具体在广播状态。在this examplethis one中,无论何时处理广播元素,都将它们添加/放入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添加到本地List或HashMap。那会是什么问题呢?该文档说,每个并行实例以与其他实例相同的方式保留其自己的BroadcastState,这一点很重要,以便在发生重新缩放时,可以实现确定的行为。但是在这种情况下,每个并行实例将始终需要所有模式,因此在重新缩放时发生的一切无关紧要。

我误会了吗?

java apache-kafka stream apache-flink
1个回答
0
投票

使用本地状态而不是由Flink管理的状态的问题是,它不会容错。当然,如果广播状态为静态,则在重新启动过程中自行重新加载它可能并不困难。但是在一般情况下,将广播状态与其余状态由Flink管理一起存储在一个一致的状态存储中是很方便的。特别是如果广播状态正在不断更新。

© www.soinside.com 2019 - 2024. All rights reserved.