Apache flink 为什么;广播状态“;可以存储动态规则,但broadcast()运算符不能?

Apache flink 为什么;广播状态“;可以存储动态规则,但broadcast()运算符不能?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我对“broadcast state”和broadcast()操作符之间的区别感到困惑,最后我在下面的线程中得到了Flink专家的帮助 最后,似乎得出结论,“广播状态”可以通过RichCoFlatMap在键控流中存储动态规则,但是broadcast()操作符不能,那么我可以知道“广播状态”如何通过RichCoFlatMap存储动态规则,以及为什么broadcast()操作符不能通过RichCoFlatMap存储动态规则吗?我可以举个例子来解释吗?这是两个完全不同的概念。此外,broadcast

我对“broadcast state”和broadcast()操作符之间的区别感到困惑,最后我在下面的线程中得到了Flink专家的帮助


最后,似乎得出结论,“广播状态”可以通过RichCoFlatMap在键控流中存储动态规则,但是broadcast()操作符不能,那么我可以知道“广播状态”如何通过RichCoFlatMap存储动态规则,以及为什么broadcast()操作符不能通过RichCoFlatMap存储动态规则吗?我可以举个例子来解释吗?

这是两个完全不同的概念。此外,
broadcast()
BroadcastState
的先决条件

broadcast()
指定数据的分区,即流的每个元素都应广播给每个并行下游操作符


BroadcastState
是一种操作员状态,首先允许从广播流读写和从非广播流读取。在此之前,没有办法将这两条河流连接起来。此外,此状态将确保在恢复后,所有并行实例中的每个状态实例都是相同的


有关
BroadcastState
的更多信息,请查看文档。

它们是不同的概念,BroadcastState是一个存储概念,Broadcast()是一个操作,其目的是为您构建BroadcastStream。

“在此之前,无法连接这两个流”,使用Broadcast()如何具有CoFlatMapFunction和CheckpointedFunction的运算符?所以broadcast()确保“流的每个元素都应该广播给每个并行下游操作符”,CheckpointedFunction确保状态是容错的,并且可以重新缩放。这将达到与“广播状态”相同的效果?是的,您可以通过这种方式实现它,这与广播状态的实现方式非常相似。此外,BroadcastState引入的另一个关键特性是迭代所有键的可能性,这在“controlstream”用例中也是至关重要的。