【问题标题】:What's the use of Broadcast state in Flink?Flink 中广播状态有什么用?
【发布时间】:2020-04-25 11:27:29
【问题描述】:

我不是在问广播模式的用途,而是具体的广播状态。在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】:

    使用本地状态而不是 Flink 管理的状态的问题在于它不能容错。当然,如果广播状态是静态的,重启时自己重新加载可能并不难。但在一般情况下,将广播状态与 Flink 管理的其他状态一起存储在一个一致的状态存储中是很方便的。尤其是在广播状态不断更新的情况下。

    【讨论】:

    • 谢谢大卫。您的回答总是很有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多