我使用的是一个flink流式java应用程序,输入源为kafka。我的应用程序总共使用了4个流。一个是主数据流,另外三个用于广播流。
a流是主流,它从Kafka源源不断地流过。
流b是浓缩数据的数据集。流b是流c、流d、流e的组合流。这是一个大的(所有3流大小都是大的)。
流c、流d、流e流对象类型不同(例如,一个流类型是employee,另一个流类型是attendancedetails,另一个流类型是salarydetails,等等……)。
我加入了三个广播流使用任何一种类型。我已经作为流b进行了广播,并且能够接收广播过程函数上下文状态(即在processbroadcastelement()中)。
我的问题是,
是否可以在广播状态下存储大数据?
有可能广播大数据吗?
如果可能的话,对于存储大数据意味着,有多少数据(即数据大小)能够以广播状态存储,并且能够应用容错和flink检查点?我的flink系统内存和存储大小为:
Memory: 8 GB
Disk Size: 20-25 GB
如何为flink中的广播状态配置内存大小?
注:据我所知,flink广播状态在运行时保存在内存中(这意味着广播状态不会存储在rocksdb中),广播流用作低吞吐量事件流。因为目前,rocksdb状态后端不可用于操作员状态。
1条答案
按热度按时间ifsvaxew1#
广播状态的工作副本总是在堆上;不是在rocksdb。所以,它必须足够小,以适应记忆。此外,每个示例将把所有广播状态复制到其检查点中,因此所有检查点和保存点都将有n个广播状态副本(其中n是并行度)。
如果能够对该数据进行密钥分区,则可能不需要广播它。听起来可能是每个雇员的数据,可以由employeeid键入。但如果没有,那么你就必须保持足够小,以适应记忆。