小米Flink流批一体实践
一、小米的大数据发展演变
-
2019 年之前,小米的实时计算主要以 SparkStreaming 为主,少部分 Storm,离线计算以 Spark 为主。
-
2019 年,开始接入 Flink,并广泛应用于信息流搜索推荐、广告实时样本、实时 ETL 等场景,逐步替换了原来的 SparkStreaming 作业,得益于 Flink 框架的各种优秀特性,我们在作业的正确性,实时性,资源使用效率方面都有较大提升。
-
2020 年,开始接入使用 FlinkSQL,并广泛用于实时数仓的建设和实时 ETL 作业的开发。FlinkSQL 的实时数仓将数据链路由 T+1 降低到了秒级。
-
2021 年,开始接入数据湖 Iceberg,基于 Flink 和 Iceberg 来构建流批一体的实时数仓解决方案,并在小米内部的部分业务进行了落地,证明流批一体在赋能业务、提升作业开发效率、简化链路节省资源的方面是可行的。
二、流批一体的平台建设
2.1 元数据管理
-
第一级 Catalog,主要由服务名和集群名拼接而成。
-
第二级 Database,它与大部分系统的 Database 保持一致。没有 Database 的系统默认使用 default 来代替。
-
第三级 Table,也与系统的 Table 保持一致,比如消息队列的 topic 名, Elasticsearch 的索引名。
2.2 权限管理
2.3 作业调度
2.4 Flink 的生态建设
三、流批一体应用场景
-
第一部分是实时数据的收集,小米内部主要分为两大类, 分别是日志数据和 DB 的 Binlog 数据。这里主要介绍 DB 系统的 Binlog 数据收集。最初我们使用小米自研的 LCS Binlog 服务来进行统一的 Binlog 收集,类似于 Canal 服务,通过该服务将 Binlog 的数据统一收集到消息队列中。
-
第二部分则是数据的转储, 将使用 Spark Streaming 任务将消息队列中的数据导入其他系统,比如 Kudu 或 HDFS。
四、未来规划
往期精选
往期推荐