《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(1)

简介: 《《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(1)
+关注继续查看

作者:李辉


用户背景

伴鱼是一个创新驱动的互联网+教育公司,也是一个基于互联网的在线学习平台,致力于打造一个自适应学习 Adaptive Learning + 社会化学习 Social Learning 的完整语言学习环境。 



业务需求

目前伴鱼内部数据的集成需求主要体现在三块:Stat Log (业务标准化日志或称统计日志)、TiDB 及 MongoDB。另外,由于实时数仓正处于建设过程中,目前数据集成平台只涵盖离线数仓 (Hive)。  


Stat Log:业务落盘的日志将由 FileBeat 组件收集至 Kafka。由于日志为 Append Only 类型, 因此 Stat Log 集成相对简单,只需将 Kafka 数据同步至 Hive 即可。  


DB (TiDB、MongoDB):DB 数据相对麻烦,核心诉求是数仓中能够存在业务数据库的镜像,即存在业务数据库中某一时刻(天级 or 小时级)的数据快照,当然有时也有对数据变更过程的分析需求。因此 DB 数据集成需要将这两个方面都考虑进去。  


两种类型的数据集成方式差异较大,需要不同的解决方案。 


平台建设

早期伴鱼的数据集成平台主要是借助一系列开源的工具实现。在State Log方面,日志的集成并未接入平台,而是烟囱式的开发方式,数据集成的链路如下图所示: 


image.png

Kafka 中的数据先经过 Flume 同步至 HDFS,再由 Spark 任务将数据从 HDFS 导入至 Hive 并创建分区。整体链路较长且引入了第三方组件(Flume)增加了运维的成本,另外 Kafka 的原始数据在 HDFS 冗余存储也增加了存储的开销。  


DB 数据的集成主要是基于查询的方式(批的方式,通过 Select 查询进行全表扫描得到快照数据)实现,其链路如下图所示: 

image.png

用户通过平台提交集成任务,由 Airflow 定时任务扫描集成平台元数据库,生成对应的取数任务 (TiDB 的数据通过 Sqoop 工具,MongoDB 的数据则通过 Mongoexport 工具)。可以看到 V1 版本并没有获取数据库的变更的日志数据,不能满足对数据变更过程的分析诉求。  


由于 Sqoop 任务最终要从 TiDB 生产环境的业务数据库获取数据,数据量大的情况下势必对业务数据库造成一定的影响。Mongoexport 任务直接作用在 MongoDB 的隐藏节点 (无业务数据请求),对于线上业务的影响可以忽略不计。基于此,DBA 单独搭建了一套 TiDB 大数据集群,用于将体量较大的业务数据库同步至此 (基于 TiDB Pump 和 Drainer 组件),因此部分 Sqoop 任务可以从此集群拉群数据以消除对业务数据库的影响。从数据流的角度,整个过程如下图所示: 


image.png

是否将生产环境 TiDB 业务数据库同步至 TiDB 大数据集群由数仓的需求以及 DBA 对于数据量评估决定。可以看出,这种形式也存在着大量数据的冗余,集群的资源随着同步任务的增加时长达到瓶颈。并且随着后续的演进,TiDB 大数据集群也涵盖一部分数据应用生产环境的业务数据库,集群作用域逐渐模糊。  


随着时间推进,这个版本暴露的问题也逐渐增多,因此伴鱼开发了V2版本的数据集成平台,引入了 Flink,将同步的链路进行了简化。DB 数据集成从之前的基于查询的方式改成了基于日志的方式 (流的方式),大大降低了冗余的存储。 


在State Log方面,借助 Flink 1.11 版本后对于 Hive Integration 的支持,可以轻松的将 Kafka 的数据写入 Hive,从而大幅简化集成流程和组件依赖 (相比 V1 版本,去除了对 Flume 组件的依赖,数据冗余也消除了)。同时 Flink Exactly-Once 的语义也确保了数据的准确性。从数据流的角度,整个过程如下图所示: 


image.png


基于日志的方式对 DB 数据进行集成,意味着需要采集 DB 的日志数据,在目前的实现中 TiDB 基于 Pump 和 Drainer 组件(目前生产环境数据库集群版本暂不支持开启 TICDC),MongoDB 基于 MongoShake 组件,采集的数据将输送至 Kafka。  


采用这种方式,一方面降低了业务数据库的查询压力,另一方面可以捕捉数据的变更过程,同时冗余的数据存储也消除了。不过由于原始数据是日志数据,需要通过一定的手段还原出快照数据。新的链路如下图所示: 


image.png


《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(2)https://developer.aliyun.com/article/1228431

相关文章
|
1月前
|
SQL 消息中间件 存储
Flink SQL 核心概念剖析与编程案例实战
本文使用了 Docker 镜像快速安装一些基础组件,zk 和 kafka,并通过案例的方式,剖析了 SQL 的概念与详细的使用方式
|
3月前
|
分布式计算 资源调度 安全
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
110 0
|
5月前
|
SQL 消息中间件 搜索推荐
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践
273 0
|
5月前
|
SQL 调度 Apache
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(2)
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(2)
186 0
|
5月前
|
消息中间件 SQL canal
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(3)
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(3)
172 0
|
5月前
|
消息中间件 SQL canal
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(3)
《Apache Flink 案例集(2022版)》——1.数据集成——小米-Flink 流批一体在小米的实践(3)
192 0
|
5月前
|
SQL 消息中间件 Kafka
《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(2)
《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(2)
164 0
|
5月前
|
SQL 消息中间件 算法
《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(3)
《Apache Flink 案例集(2022版)》——1.数据集成——伴鱼-伴鱼基于 Flink 构建数据集成平台的设计与实现(3)
123 0
|
5月前
|
消息中间件 SQL 存储
《Apache Flink 案例集(2022版)》——1.数据集成——37手游-基于 Flink CDC + Hudi 湖仓一体方案实践
《Apache Flink 案例集(2022版)》——1.数据集成——37手游-基于 Flink CDC + Hudi 湖仓一体方案实践
198 0
|
5月前
|
消息中间件 数据采集 NoSQL
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(上)
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(上)
105 0
相关产品
实时计算 Flink版
推荐文章
更多
推荐镜像
更多