flink 中的 BroadcastConnectedStream 在什么场景下真正有用?
In which scenario BroadcastConnectedStream in flink is really helpful?
flink中的BroadcastConnectedStream在什么场景下真正有用?
举个小例子说明会很有帮助。
我写了一些例子,你可以在这里找到:
- https://github.com/ververica/flink-training-exercises/blob/master/src/main/java/com/ververica/flinktraining/examples/datastream_java/broadcast/BroadcastState.java
- https://training.ververica.com/exercises/nearestTaxi.html
- https://training.ververica.com/exercises/ongoingRides.html
- https://training.ververica.com/exercises/taxiQuery.html
一般来说,只要您需要在整个集群中进行通信,广播状态就很有用。大多数数据源将被分区,以便它们可以由单独的实例并行处理——但一些信息是全局需要的,例如货币汇率、阈值或机器学习模型。如果全局有用的数据是静态的,您可以简单地从文件加载它,但如果它需要在运行时动态更新,那么使用广播流是有意义的。
除了 David 提到的之外,如果你有一个与广播流连接的键控流,那么在你的 KeyedBroadcastProcessFunction
的 processBroadcastElement()
方法中你可以迭代 all 键控流状态,这通常不是您可以在 Flink 运算符中执行的操作。有关详细信息,请参阅 The Broadcast State Pattern。
flink中的BroadcastConnectedStream在什么场景下真正有用?
举个小例子说明会很有帮助。
我写了一些例子,你可以在这里找到:
- https://github.com/ververica/flink-training-exercises/blob/master/src/main/java/com/ververica/flinktraining/examples/datastream_java/broadcast/BroadcastState.java
- https://training.ververica.com/exercises/nearestTaxi.html
- https://training.ververica.com/exercises/ongoingRides.html
- https://training.ververica.com/exercises/taxiQuery.html
一般来说,只要您需要在整个集群中进行通信,广播状态就很有用。大多数数据源将被分区,以便它们可以由单独的实例并行处理——但一些信息是全局需要的,例如货币汇率、阈值或机器学习模型。如果全局有用的数据是静态的,您可以简单地从文件加载它,但如果它需要在运行时动态更新,那么使用广播流是有意义的。
除了 David 提到的之外,如果你有一个与广播流连接的键控流,那么在你的 KeyedBroadcastProcessFunction
的 processBroadcastElement()
方法中你可以迭代 all 键控流状态,这通常不是您可以在 Flink 运算符中执行的操作。有关详细信息,请参阅 The Broadcast State Pattern。