背景
在数据中台建设过程中,一个典型的数据集成场景是将 MQ (Message Queue,例如 Kafka、RocketMQ 等)的数据导入到 Hive 中,以供下游数仓建设以及指标统计。由于 MQ-Hive 是数仓建设第一层,因此对数据的准确性以及实时性要求比较高。
本文主要围绕 MQ-Hive 场景,针对目前字节跳动内已有解决方案的痛点,提出基于 Flink 的实时解决方案,并介绍新方案在字节跳动内部的使用现状。
已有方案及痛点
字节跳动内已有解决方案如下图所示,主要分了两个步骤:
通过 Dump 服务将 MQ 的数据写入到 HDFS 文件
再通过 Batch ETL 将 HDFS 数据导入到 Hive 中,并添加 Hive 分区
痛点
任务链较长,原始数据需要经过多次转换最终才能进入 Hive
实时性比较差,Dump Service、Batch ETL 延迟都会导致最终数据产出延迟
存储、计算开销大,MQ 数据重复存储和计算
基于原生 Java 打造,数据流量持续增长后,存在单点故障和机器负载不均衡等问题
运维成本较高,架构上无法复用公司内 Hadoop/Flink/Yarn 等现有基础设施
不支持异地容灾
基于 Flink 实时解决方案
优势
针对目前公司传统解决方案的痛点,我们提出基于 Flink 的实时解决方案,将 MQ 的数据实时写入到 Hive,并支持事件时间以及 Exactly Once 语义。相比老方案,新方案优势如下所示:
基于流式引擎 Flink 开发,支持 Exactly Once 语义
实时性更高,MQ 数据直接进入 Hive,无中间计算环节
减少中间存储,整个流程数据只会落地一次
支撑 Yarn 部署模式,方便用户迁移
资源管理弹性,方便扩容以及运维
支持双机房容灾
整体架构
整体架构如下图所示,主要包括 DTS(Data Transmission Service) Source、DTS Core、DTS Sink 三大模块,具体功能如下:
DTS Source 接入不同 MQ 数据源,支持 Kafka、RocketMQ 等
DTS Sink 将数据输出到目标数据源,支持 HDFS、Hive 等
DTS Core 贯穿整个数据同步流程,通过 Source 读取源端数据,经过 DTS Framework 处理,最后通过 Sink 将数据输出到目标端。
DTS Framework 集成类型系统、文件切分、Exactly Once、任务信息采集、事件时间、脏数据收集等核心功能
支持 Yarn 部署模式,资源调度、管理比较弹性
Exactly Once
Fl
Flink实时数据集成方案

为解决字节跳动内部MQ-Hive链路的痛点,本文提出基于Flink的实时解决方案,实现MQ数据实时写入Hive,支持ExactlyOnce语义,提升实时性与准确性,减少存储与计算开销。
最低0.47元/天 解锁文章
2万+





