Flink 集群架构& 运行模式

829 阅读5分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

 1:Flink 大数据必备技能

阿里收购Flink以后,它的生态体系越来越完善。尤其是Flink在各个大厂的发展非常迅猛,几乎成为数据开发的标配。尤其最近比较火的湖仓一体,CDC 把Flink 提升到一个新的高度。接下来梳理一下Flink 的集群架构以及运行模式。

2:Flink 集群架构

        1:JobManger

管理节点,每一个集群至少一个。管理整个集群的计算资源,Job管理与调度执行以及Checkpoint协调。

        2:TaskManger

每一个集群有多个TM,负责计算资源提供。

        3:Client

本地执行应用Main 方法解析JobGraph对应,并最终将JobGraph提交到JobManger运行,同时监控Job的执行状态。 Flink集群架构.png

3:Flink运行模式

部署模式相关解释优点缺点
Session Mode共享JobManger和TaskManger,所有提交的Job都在一个Runtime运行资源充分共享,提供资源的利用率。Job在 Flink session 集群中管理,运维简单资源隔离比较差,不是Native类型部署,Tm不易拓展
Per-Job Mode独享JobManger与TaskManger,每一个Job单独启动一个Runtime.Job之间资源隔离充分,资源根据Job需要进行申请。一般线上都使用该模式。资源相对比较浪费,JobManger需要消耗资源。
ApplicationMode(1.11提出)Application 的main 运行在Cluster上,而不是客户端。每一个Application 对应一个Runtime,Application 中可以含有多个Job有效降低贷款消耗和客户端负载,并且在applicaiton 中实现资源共享。目前仅支持Yarn和K8s,线上生产使用较少。

4:湖仓一体 &数据湖& CDC

1:湖仓一体

湖仓一体最近两年阿里巴巴在各种会议上分享比较多,个人理解:基于云上的对象存储,一份存储多份计算,全面拥抱云原生,并且计算与存储分离的这样一套架构。这种架构建议选择aliyun的MaxCompute,中小型企业自建成本很高。

2:数据湖

数据湖是一个很老的概念,在近些年又被热炒。业界对于数据湖到现在也没有一个统一的定义。在这里我们便引用 AWS 对数据湖的定义:"数据湖是一个集中式的存储库,允许存储任意结构的数据并且能将它应用于大数据处理,以及进行实时分析和机器学习等相关的应用场景。数据仓库是信息的一个中央存储库"。数据湖是Schema On Read:即在使用数据时才需要Schema信息,数据仓库是Schema On Write:即在存储数据时就需要设计好Schema。这样,由于对数据写入没有限制,数据湖可以更容易的收集数据。它对数据写入没有限制,数据湖可以更容易的收集数据。常用的解决方案如下:

数据湖定位当前支持不足备注
Hudi正如其名(Hadoop Upserts Deletes and Incrementals),主要支持 Upserts、Deletes 和 Incremental 增量数据处理.    1:基于Hadoop增量写入、删除、合并。引入时间轴,可以高效的处理增量数据。2:时间漫游。Hudi on Spark强依赖,Hudi on Flink 应用不是很多官方推荐Spark,国内很多公司推荐使用Flink。主要因为Flink才是真正流批一体
Iceberg标准的 Table Format 以及高效的 ETLIceberg 主要支持的计算引擎包括 Spark 2.4.5、Spark 3.x、Flink 1.11 以及 Presto。存在一些运维工作比如 snapshot 过期、小文件合并、增量订阅消费等功能都可以实现1:Iceberg并不支持Delete/Merge/Update2:合并小文件需要一个Spark任务进行定期合并Iceberg 是 Delta、Iceberg、Hudi 三个开源项目中最先完成 Flink 接入的开源项目
DeltaDelta 的定位是流批一体的 Data Lake 存储层,支持 update/delete/merge。Delta 目前只支持Spark引擎Delta与Spark 结合太深,与其他引擎的适配尚需时日。Delta Lake作为 Databricks 开源的项目,更侧重于在 Spark 层面上解决 Parquet 等存储格式的固有问题,并带来更多的能力提升。

3:CDC

CDC(Change Data Capture)变更数据获取的简称。使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。详细如下:
1:使用Flink Sql进行数据同步,可以将数据从一个数据同步到其他的地方,比如mysql、elasticsearch等。
2:可以在源数据库上实时的物化一个聚合视图。
3:因为只是增量同步,所以可以实时的低延迟的同步数据。
4:使用EventTime join 一个temporal表以便可以获取准确的结果。

4:总结

Flink 能做到亚秒级处理延迟,现在很多领域业务对于延迟的要求会越来越高。比如反欺诈、监控引擎、实时数据分析等。尤其是万物互联的时代,利用IOT技术可以实时分析每一个人的身体特征。提前预警&风控&智能助手让数据更懂你自己,未来已来,一起迎接新的时代。