当 TiDB 与 Flink 相结合:高效、易用的实时数仓
随着互联网飞速发展,企业业务种类会越来越多,业务数据量会越来越大,当发展到一定规模时,传统的数据存储结构逐渐无法满足企业需求,实时数据仓库就变成了一个必要的基础服务。以维表 Join 为例,数据在业务数据源中以范式表的形式存储,在分析时需要做大量的 Join 操作,降低性能。如果在数据清洗导入过程中就能流式的完成 Join,那么分析时就无需再次 Join,从而提升查询性能。
利用实时数仓,企业可以实现实时 OLAP 分析、实时数据看板、实时业务监控、实时数据接口服务等用途。但想到实时数仓,很多人的第一印象就是架构复杂,难以操作与维护。而得益于新版 Flink 对 SQL 的支持,以及 TiDB HTAP 的特性,我们探索了一个高效、易用的 Flink+TiDB 实时数仓解决方案。
实时数仓的概念
数据仓库的概念在 90 年代由 Bill Inmon 提出,是指一个面向主题的、集成的、相对稳定的、反映历史变化的集合,用于支持管理决策。当时的数据仓库通过消息队列收集来自数据源的数据,通过每天或每周进行一次计算以供报表使用,也称为离线数仓。

实时数仓的 Lambda 架构
实时数仓的 Kappa 架构
总结一下,对于实时数仓,Lambda 架构需要维护流和批两套引擎,开发成本相较其它两者更高。相比于 Kappa 架构,实时 OLAP 变体架构可以执行更加灵活的计算,但需要依赖额外的实时 OLAP 算力资源。接下来我们将介绍的 Flink + TiDB 实时数仓方案,就属于实时 OLAP 变体架构。
关于实时数仓及这些架构更加详细的对比说明,有兴趣的读者可以参考 Flink 中文社区的这篇文章。
Flink + TiDB 实时数仓
对于 Flink + TiDB 实时数仓,下面是几种常用的搭建原型,可以用来满足不同的需求,也可以在实际使用中自行扩展。
以 MySQL 作为数据源
以 MySQL 作为数据源的简便架构
这个架构的优点是非常简洁方便,在 MySQL 和 TiDB 都准备好对应数据库和表的情况下,可以通过只编写 Flink SQL 来完成任务的注册与提交。读者可以在本文末尾的【在 docker-compose 中进行尝试】一节中尝试此架构。
以 Kafka 对接 Flink
以 MySQL 作为数据源,经过 Kafka 的架构示构
以 TiDB 作为数据源
TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,可以利用其将 TiDB 的变更数据输出到消息队列中,再由 Flink 提取。
以 TiDB 作为数据源,通过 TiCDC 将 TiDB 的增量变化输出到 Flink 中
案例与实践
上个部分介绍了一些基础的架构,实践中的探索往往更加复杂和有趣,这一部分将介绍一些具有代表性和启发性的用户案例。
小红书
小红书 Flink TiDB 集群架构
整个过程形成了 TiDB 的闭环,将后续分析任务的 Join 工作转移到了 Flink 上,并通过流式计算来缓解压力。目前这套方案已经支持起了小红书的内容审核、笔记标签推荐、增长审计等业务,经历了大吞吐量的线上业务考验且持续运行稳定。
贝壳金服
贝壳金服数据分析平台架构
利用以上的结构,可以将数据服务中的主表进行实时 Join 落地,然后服务方只需要查询单表。这套系统在贝壳金服已经深入各个核心业务系统,跨系统的数据获取统一走数据组的数据服务,省去了业务系统开发 API 和内存聚合数据代码的开发工作。
智慧芽
智慧芽数据分析平台架构
用户体验:在使用了新架构后,入库数据量、入库规则和计算复杂度都大大下降,数据在 Flink Job 中已经按照业务需求处理完成并写入 TiDB,不再需要基于 Redshift 的 全量 ODS 层进行 T+1 ETL。基于 TiDB 构建的实时数仓,通过合理的数据分层,架构上获得了极大的精简,开发维护也变得更加简单;在数据查询、更新、写入性能上都获得大幅度提升;在满足不同的 adhoc 分析需求时,不再需要等待类似 Redshift 预编译的过程;扩容方便简单易于开发。目前这套架构正在上线,在智慧芽内部用来进行用户行为分析和追踪,并汇总出公司运营大盘、用户行为分析、租户行为分析等功能。
网易互娱
网易 2001 年正式成立在线游戏事业部,经过近 20 年的发展,已跻身全球七大游戏公司之一。在 App Annie 发布的“2020 年度全球发行商 52 强”榜单中,网易位列第二。
在网易互娱计费组的应用架构中,一方面使用 Flink 完成业务数据源到 TiDB 的实时写入;另一方面,以 TiDB 作为分析数据源,在后续的 Flink 集群中进行实时流计算,生成分析报表。此外,网易互娱现在内部开发了 flink 作业管理平台,用于管理作业的整个生命周期。
知乎
3. Flink TiDB Catalog,可以在 Flink SQL 中直接使用 TiDB 的表,无需再次创建。
在 docker-compose 中进行尝试
如果大家对 Flink+TiDB 实时数仓方案有兴趣、疑惑,或者在探索实践过程中积累了想要分享的经验,欢迎到 TiDB 社区(如 AskTUG)、Flink 社区(如 Flink 中文邮件)或通过我的邮件(qizhi@pingcap.com)进行探讨。
参考阅读:
基于 Flink 的典型 ETL 场景实现方案,Flink 中文社区关于实时数仓概念及流上 Join 的讨论。
How We Use a Scale-Out HTAP Database for Real-Time Analytics and Complex Queries,小红书使用 TiDB 的实践分享文章。
How We Build an HTAP Database That Simplifies Your Data Platform,TiDB 的 HTAP 架构以及在数据平台上的应用。
TiDB: A Raft-based HTAP Database,TiDB 原理论文。
Flink SQL CDC 上线!我们总结了 13 条生产实践经验,Flink 中文社区,关于 Flink SQL CDC 的运维生产经验。
关注公众号:拾黑(shiheibook)了解更多 [广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 习近平同法国总统马克龙通电话 7903926
- 2 朝驱逐舰下水事故最新调查结果公布 7808165
- 3 特朗普政府禁止哈佛大学招收国际生 7712443
- 4 美国“芯”机算尽 难阻中国 7617873
- 5 中国海警依法对菲船只喷射水炮 7523070
- 6 武大回应校门被淹1米深:每年都这样 7426249
- 7 被工作人员碰餐盘 孙颖莎急忙制止 7331390
- 8 小米汽车首款SUV小米YU7发布 7237402
- 9 蔡明居然是贾冰的干妈 7140560
- 10 雷军:别指望自研芯片上来就碾压苹果 7045868