「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
1:Flink 大数据必备技能
阿里收购Flink以后,它的生态体系越来越完善。尤其是Flink在各个大厂的发展非常迅猛,几乎成为数据开发的标配。尤其最近比较火的湖仓一体,CDC 把Flink 提升到一个新的高度。接下来梳理一下Flink 的集群架构以及运行模式。
2:Flink 集群架构
1:JobManger
管理节点,每一个集群至少一个。管理整个集群的计算资源,Job管理与调度执行以及Checkpoint协调。
2:TaskManger
每一个集群有多个TM,负责计算资源提供。
3:Client
本地执行应用Main 方法解析JobGraph对应,并最终将JobGraph提交到JobManger运行,同时监控Job的执行状态。
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 以及高效的 ETL | Iceberg 主要支持的计算引擎包括 Spark 2.4.5、Spark 3.x、Flink 1.11 以及 Presto。存在一些运维工作比如 snapshot 过期、小文件合并、增量订阅消费等功能都可以实现 | 1:Iceberg并不支持Delete/Merge/Update2:合并小文件需要一个Spark任务进行定期合并 | Iceberg 是 Delta、Iceberg、Hudi 三个开源项目中最先完成 Flink 接入的开源项目 |
Delta | Delta 的定位是流批一体的 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技术可以实时分析每一个人的身体特征。提前预警&风控&智能助手让数据更懂你自己,未来已来,一起迎接新的时代。