目录
0- 前言
摘要:本文整理自小米软件开发工程师金风在 Flink Forward Asia 2021 流批一体专场的演讲。本篇内容主要分为四个部分:
1- 小米的大数据发展演变
-
2019 年之前,小米的实时计算主要以 SparkStreaming 为主,少部分 Storm,离线计算以 Spark 为主。
-
2019 年,开始接入 Flink,并广泛应用于信息流搜索推荐、广告实时样本、实时 ETL 等场景,逐步替换了原来的 SparkStreaming 作业,得益于 Flink 框架的各种优秀特性,我们在作业的正确性,实时性,资源使用效率方面都有较大提升。
-
2020 年,开始接入使用 FlinkSQL,并广泛用于实时数仓的建设和实时 ETL 作业的开发。FlinkSQL 的实时数仓将数据链路由 T+1 降低到了秒级。
-
2021 年,开始接入数据湖 Iceberg,基于 Flink 和 Iceberg 来构建流批一体的实时数仓解决方案,并在小米内部的部分业务进行了落地,证明流批一体在赋能业务、提升作业开发效率、简化链路节省资源的方面是可行的。
上图是小米当前的实时和离线框架,目前是多种框架并存的状态。业务开发人员无论是写 SQL 作业还是写 Jar 包作业,都至少要维护两套代码。公司内部的计算引擎团队也需要花两拨人力分别去维护不同的计算框架,同时平台层也需要对不同的计算引擎去做不同的适配。
基于流批一体的改造,无论是实时还是离线都只需要维护一套计算框架,为业务开发人员、平台提供方和计算引擎的支持方节省了一半的人力资源。
2- 流批一体的平台建设
为了探索流批一体,我们也做了很多相关的探索和实践。
对于流批一体的平台化建设,主要分为 4 个方面,分别是元数据管理、权限管理、作业调度以及 Flink 的生态建设。
2.1- 元数据管理
我们基于 Metacat 做了统一的元数据管理,由 Metacat 统一对接下游不同的存储系统和上游的计算引擎。
基于 Metacat,内部的所有系统都被统一划分成三级结构,与 FlinkSQL 的三级结构相对应。
-
第一级 Catalog,主要由服务名和集群名拼接而成。
-
第二级 Database,它与大部分系统的 Database 保持一致。没有 Database 的系统默认使用 default 来代替。
-
第三级 Table,也与系统的 Table 保持一致,比如消息队列的 topic 名, Elasticsearch 的索引名。
在构建好统一的元数据管理之后,只需要写一条 DML 语句即可完成一个实时将消息队列数据入湖作业的开发。