flink 中的 BroadcastConnectedStream 在什么场景下真正有用?

In which scenario BroadcastConnectedStream in flink is really helpful?

flink中的BroadcastConnectedStream在什么场景下真正有用?

举个小例子说明会很有帮助。

我写了一些例子,你可以在这里找到:

  1. https://github.com/ververica/flink-training-exercises/blob/master/src/main/java/com/ververica/flinktraining/examples/datastream_java/broadcast/BroadcastState.java
  2. https://training.ververica.com/exercises/nearestTaxi.html
  3. https://training.ververica.com/exercises/ongoingRides.html
  4. https://training.ververica.com/exercises/taxiQuery.html

一般来说,只要您需要在整个集群中进行通信,广播状态就很有用。大多数数据源将被分区,以便它们可以由单独的实例并行处理——但一些信息是全局需要的,例如货币汇率、阈值或机器学习模型。如果全局有用的数据是静态的,您可以简单地从文件加载它,但如果它需要在运行时动态更新,那么使用广播流是有意义的。

除了 David 提到的之外,如果你有一个与广播流连接的键控流,那么在你的 KeyedBroadcastProcessFunctionprocessBroadcastElement() 方法中你可以迭代 all 键控流状态,这通常不是您可以在 Flink 运算符中执行的操作。有关详细信息,请参阅 The Broadcast State Pattern