【发布时间】:2020-04-25 11:27:29
【问题描述】:
我不是在问广播模式的用途,而是具体的广播状态。在this example 和this 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