处理flink广播流中的大数据



我使用的是一个Flink流式Java应用程序,输入源为Kafka。在我的应用程序中总共使用了4个流。一个是主数据流,另外三个用于广播流。

A流是主流,它从卡夫卡源源不断地流出。

流B是富集数据的数据集。流B是流C、流D和流E的组合流。它是一个大流(所有3个流的大小都很大(。

流C、流D、流E流对象类型不同。(例如,一种流类型是Employee,另一种类型是AttendanceDetails,另一个类型是SalaryDetails,等等(。

我加入了使用任一类型的三个广播流。我已经作为流B进行了广播,并且能够在广播过程函数上下文状态下接收(即在processBroadcastElement((中(。

我的问题是,

  1. 是否可以在广播状态下存储大数据?

  2. 广播大数据可能吗?

如果可能存储大数据意味着,在广播状态下可以存储多少数据(即数据大小(,并且可以应用容错和闪烁检查点?我的Flink系统内存和存储大小为:

Memory: 8 GB
Disk Size: 20-25 GB

如何在Flink中为广播状态配置内存大小?

注意:根据我的理解,Flink广播状态在运行时保存在内存中(这意味着广播状态不会存储在rocksdb中(,并且广播流被用作低吞吐量事件流。由于目前,RocksDB状态后端不可用于操作员状态。

广播状态的工作副本始终在堆上;不在RocksDB。因此,它必须足够小才能放入内存。此外,每个实例都会将所有广播状态复制到其检查点中,因此所有检查点和保存点都会有广播状态的n副本(其中n是并行度(。

如果你能够对这些数据进行键控分区,那么你可能不需要广播它。听起来可能是每个员工的数据可以由employeeId键控。但如果没有,那么你就必须保持它足够小,以适应记忆。

相关内容

  • 没有找到相关文章

最新更新