处理 flink 广播流中的大数据

Posted

技术标签:

【中文标题】处理 flink 广播流中的大数据【英文标题】:Process large data in flink broadcast stream 【发布时间】:2020-07-24 06:22:40 【问题描述】:

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

Stream A是主流,从Kafka源源不断地流出。

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

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

我使用 Either 类型加入了三个广播流。我已作为 Stream B 进行广播,并且能够在广播过程功能上下文状态中接收(即在 processBroadcastElement() 中)。

我的问题是,

    Broadcast状态下可以存储大数据吗?

    可以广播大数据吗?

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

       Memory: 8 GB
       Disk Size: 20-25 GB

如何在 Flink 中配置 Broadcast state 的内存大小?

注意:据我了解,Flink Broadcast State 是在运行时保存在内存中的(也就是说广播状态不会存储在rocksdb中),并且广播流被用作低吞吐量事件溪流。由于目前,RocksDB 状态后端不适用于操作员状态。

【问题讨论】:

【参考方案1】:

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

如果您能够对这些数据进行密钥分区,那么您可能不需要广播它。听起来它可能是每个员工的数据,可以由employeeId 键入。但如果不是,那么您必须将其保持得足够小以适应内存。

【讨论】:

嗨大卫,感谢您的信息。我的 flink 系统的 Flink 广播状态内存限制是多少。我的 flink 系统配置是 Memory: 8GB and Disk Space Approx:25GB and No.of Processor: 4? 另外,是否可以在Flink中自定义Broadcast状态的内存大小? 您必须进行试验才能发现环境中的限制。广播状态在堆上,与堆的其他用户竞争。所以让堆尽可能大。 好的..让我检查一下

以上是关于处理 flink 广播流中的大数据的主要内容,如果未能解决你的问题,请参考以下文章

月薪3万+的大数据人都在疯学Flink,为什么?

Flink入门——Apache Flink介绍

Flink BroadCastState实现事件流广播流 双流connect(java版本)

Flink为何会在众多大数据框架中脱颖而出

大数据——Flink Broadcast State 广播状态

图解大数据 | 基于Spark RDD的大数据处理分析