ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Flink数据倾斜优化 FlinkSql及FlinkDataStream
[打印本页]
作者:
海哥
时间:
5 天前
标题:
Flink数据倾斜优化 FlinkSql及FlinkDataStream
一.征象及解决
1).
征象
:相同 Task 的多个 Subtask 中,个别 Subtask 接收到的数据量显着大于其他 Subtask 接收到的数据量,通过Flink Web U1 可以精确地看到每个 Subtask 处理了多少数据,即可判定出 Flink 使命是否存在数据倾斜。通常,数据倾斜也会引起反压。
2).
解决
:
(1)
数据源倾斜
比如消耗 katka,但是 katka 的 topic 的分区之间数据不平衡读进来之后调用重分区算子:rescale、rebalance、shuffle,
(2)
单表分组聚合(纯流式)倾斜
API:利用 fatmmap 攒批、预聚合
SQL:开启 MiniBatch+LocalGloba
(3)
单表分组开窗聚合倾斜第一阶段聚合
key 拼接随机数前缀或后缀,进行keyby、开窗、聚合注意:聚合完不再是 WindowedStream,要获取 WimndowEnd 作为窗口标记作为第二阶段分组依据,制止差别窗口的效果聚合到一起)
第二阶段聚合:按照原来的 key 及 windowEnd 作 keyby、聚合
在项目中,用到 clickhouse,可以第一阶段打散聚合后,直接写入 clickhouse,查 clickhouse 再处理第二阶段
二.FlinkSQL中数据倾斜怎样产生的?怎样解决?
1
).产生
:在编写FlinkSQL中数据分布不平衡、key值分布不均、JOIN关联键分布不均、JOIN表巨细差异大、窗口操纵题目、并行度不当、数据动态的变化都会导致FlinkSQL在编写过程中造成数据倾斜。
2
)
.
解决
:
数据准备阶段 (数据预处理)
数据采样与分析
:在正式处理数据之前,对数据进行采样分析,相识数据的分布情况,包括数据量巨细、Key 的取值分布等。通太过析可以提前发现大概导致数据倾斜的因素,如某些 Key 的取值过于集中等,为后续的处理提供依据。
数据平衡处理
:根据数据采样分析的效果,对数据进行必要的平衡处理。如果发现数据在某个维度上分布不均匀,可以采用一些数据预处理技术,如对数据进行重新分区、打散等操纵,使数据在进入 Flink SQL 处理流程之前只管均匀分布。
SQL 语句优化
合理计划 JOIN 操纵
选择合适的 JOIN 类型
:根据参与 JOIN 的表的特点和业务需求,选择合适的 JOIN 类型。例如,当一张表较小且可以完全加载到内存中时,可以思量使用广播 JOIN(Broadcast JOIN),将小表广播到所有节点,制止数据 shuffle,从而减少数据倾斜的大概性。
优化 JOIN 条件
:确保 JOIN 条件的合理性,制止使用过于复杂或容易导致数据倾斜的关联条件。如果大概,可以对 JOIN 条件进行调整,使关联键的分布更加均匀。
优化 GROUP BY 操纵
:在使用 GROUP BY 进行分组聚适时,只管选择分布均匀的列作为分组依据。如果无法制止使用分布不均匀的列,可以思量对这些列进行预处理,如通过添加随机前缀或后缀等方式对 Key 进行打散,使数据在分组时可以大概更加均匀地分布到差别的分组中。
审慎使用窗口操纵
:在使用窗口函数时,要根据数据的特点和业务需求合理设置窗口巨细和滑动步长。如果数据在时间或其他维度上存在显着的不均匀分布,可以思量采用动态窗口或自顺应窗口,根据数据的现实情况动态调整窗口的划分,制止固定窗口导致的数据倾斜。
系统配置优化
合理设置并行度
:根据数据量巨细、数据分布情况以及集群资源等因素,合理设置 Flink 作业的并行度。一般来说,可以通过性能测试和调优等手段,找到一个合适的并行度,使数据可以大概均匀地分配到各个使命中进行处理。同时,可以思量使用自顺应并行度调整策略,根据作业的负载情况自动调整并行度。
优化资源分配
:确保集群中各节点的资源分配均匀合理,制止因资源差异导致使命调理不平衡而产生数据倾斜。可以根据节点的性能和资源情况,对使命进行合理的分配,或者使用一些资源调理算法,使资源分配更加科学。
监控与动态调整
实时监控作业状态
:在 Flink SQL 作业运行过程中,通过 Flink 的监控系统实时监控作业的运行状态,包括数据处理速率、各使命的负载情况、数据倾斜情况等。一旦发现数据倾斜题目,及时进行分析和处理。
动态调整策略
:根据监控效果,动态调整作业的相关参数和策略。例如,当发现某个使命出现数据倾斜时,可以动态调整该使命的并行度,或者对数据进行重新分区等操纵,及时缓解数据倾斜题目。
总结:针对差别场景下的FlinkSQL做出的优化
三.FlinkDataStream怎样产生的数据倾斜?如何解决?
1)
.产生
:
数据源不均匀使数据自己的特性及数据采集题目存在差异、Key分布不均匀造成业务逻辑分组处理不均、窗口巨细和滑动步长设置不当导致少量集中引发数据倾斜、特定时间段会造成数据热门题目导致数据集中从而引发数据倾斜、JOIN关联键分布不均及维表数据倾斜也会造成数据倾斜、使命并行设置和并行度的设置不均。以上题目大概会导致数据倾斜。
2).
解决
:
数据预处理
均匀采样与打散
:在数据进入 Flink 处理流程前,对数据进行均匀采样和打散处理。例如,对于按用户 ID 分区的数据,如果发现某些用户的数据量特别大,可以对这些用户的数据进行随机采样,然后将采样后的数据与其他用户的数据混合均匀。
过滤掉无效数据
:在数据源头对显着非常或无效的数据进行过滤,减少不必要的数据处理,制止这些数据对整体数据分布的影响。
优化 Key 的选择与分布
选择更合适的 Key
:在进行分组或关联操纵时,仔细分析数据特点,选择分布更均匀的 Key。如果以用户 ID 作为 Key 导致数据倾斜,可以思量根据业务规则构造新的 Key,如对用户 ID 进行哈希取模后再分组。
加盐处理
:对于 Key 分布不均匀的情况,可以通过在 Key 上添加随机前缀或后缀的方式进行 “加盐”,使数据在分区时更加均匀。
调整窗口设置
合理设置窗口巨细和滑动步长
:根据数据的流量和业务需求,调整窗口的巨细和滑动步长,制止大量数据集中在少数几个窗口中。
动态调整窗口
:根据数据的实时流量和分布情况,动态调整窗口的巨细和滑动步长,以顺应数据的变化。
优化 Join 操纵
广播小表
:如果 Join 操纵中的一张表数据量较小,可以将其广播到所有节点,制止数据在网络传输过程中的倾斜。
调整 Join 策略
:根据数据的特点和分布情况,选择合适的 Join 策略,如 Hash Join、Sort-Merge Join 等。
合理设置并行度
根据数据量和处理能力设置并行度
:通太过析数据量的巨细和系统的处理能力,合理设置使命的并行度,确保每个并行使命处理的数据量相对平衡。
动态调整并行度
:在作业运行过程中,根据数据的实时流量和处理情况,动态调整使命的并行度,以进步系统的资源利用率和处理效率。
总结:
四.总结
总而言之解决数据倾斜 1).提升性能(减少使命的执行时间、进步资源利用率)2).稳固性增强(制止人数失败、减少背压和反压) 3).降低成本(软件资源成本、运维成本) 4).效果准确性进步(制止数据丢失或重复盘算)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4