Flink CDC 在货拉拉的落地与实践

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 陈政羽在Apache Asia Community Over Code 2024上分享了《货拉拉在Flink CDC生产实践落地》。文章介绍了货拉拉业务背景、技术选型及其在实时数据采集中的挑战与解决方案,详细阐述了Flink CDC的技术优势及在稳定性、兼容性等方面的应用成果。通过实际案例展示了Flink CDC在提升数据采集效率、降低延迟等方面的显著成效,并展望了未来发展方向。

作者:陈政羽,目前就职于深圳依时货拉拉科技术有限公司,在公司数据平台组负责湖仓一体平台和实时计算平台相关开发工作,是 Apache Amoro PMC Memeber,ALC ShenZheng Memeber ,也是 Apache Flink 社区贡献者和志愿者,目前在开源社区专注于实时计算方向以及 Amoro 社区海外和国内的运营和开发工作。

摘要:今天的文章撰写自陈政羽老师在 Apache Asia Community Over Code 2024 上的分享《货拉拉在 Flink CDC 生产实践落地》,系统地介绍货拉拉的业务背景,技术选型,整体能力构建与收益,最后分享了开源参与以及开展的未来工作和期望。

一、业务介绍

货拉拉(HuoLaLa)是一家拉货搬家跑腿发长途平台,创立于 2013 年,成长于粤港澳大湾区,是从事同城/跨城货运、企业版物流服务、搬家、零担、跑腿、冷运、汽车租售及车后市场服务的互联网物流商城。通过共享模式整合社会运力资源,完成海量运力储备,并依托移动互联、大数据和人工智能技术,搭建“方便、科技、可靠”的货运平台,实现多种车型的即时智能调度,为个人、商户及企业提供高效的物流解决方案。

截至 2023 年 12 月,货拉拉业务范围覆盖全球 11 个市场,包括中国及东南亚、南亚、南美洲等地区,其中中国内地总共覆盖 363 座城市,月活司机达 90 万,月活用户达 1200 万。

每天产生订单、司机、汽车物联网数据量是PB级别,如何稳定、高效、快速采集到这些数据,挖掘业务数据价值,释放新质生产力成为公司关键运营和决策因素

2022至2024年初,随着货拉拉业务体量提升,陆续开始有采集稳定性故障通报,原有架构不适合支撑新业务大的采集,整改迫在眉睫。采集进程、网络、硬件资源发生争抢,核心链路资源无法得到保障,数据准确性下降,从而导致触发数据熔断无法查看数据,导致业务产生舆情可能性增大。在 2023 年关于实时稳定性故障中,数据订阅的稳定性故障通报较多,数据平台组内从 2023 年 9 月已经开始关注 Flink CDC 技术,并且在 2024 年 1 月陈政羽同学加入后开始推进工程化落地。

从货拉拉业务需求层面来看,我们既要满足当下业务需求,也要面对未来高速发展的海量数据采集需求,我们面临着以下四大挑战:

    • 功能性:想利用 Flink SQL 进行一些配置化,就可以完成整库的一些同步开发,就不需要用户再去有一些额外的成本
    • 稳定性:稳定性上面来说,我们希望说这样的一些新技术下游不需要做过多的改动 SQL 任务,只需要切换 CDC 相关数据的 Kafka topic 就可以完成链路的切换,保障数据链路的稳定
    • 兼容性:业务方之前有可能使用一些 Canal 等一些数据订阅组件进行数据的订阅,我们需要对这一部分功能进行兼容,实现业务方最小的感知改动
    • 数据一致性:切换完成之后,也需要对数据的最终一致性进行一个保证,切换完后数据的结果必须要最终等价,我们会进行一些双跑验证去保证数据最终的一致性

基于以上四象限考虑,我们开始对开源社区产品进行相关技术评估和技术选型

在做数据同步技术选型时候,我们关注 稳定性、时效性、准确性、兼容性等多方面因素考虑。我们既要解决当下数据库数据采集问题,也要考虑到未来可能遇到其它业务数据库系统采集问题。通过各个组件的横向对比,选择Flink CDC ,我们可以借助 Flink的能力,不仅能保障数据时效性,还能够享受到多个上下游Connector组件生态,进行灵活搭配结合使用。最终我们选择了Apache Flink CDC 框架作为实时数据同步的框架。

二、整体能力构建

在完成技术选型后,我们开始对现有的业务进行梳理,并且从稳定性、上层应用、平台适配、数据架构 四个方面入手去构造 CDC 整体能力(如下图)。

应用层是直接提供给飞流任务和多方业务使用的。目前包括了罗盘、实时看板、指标波动告警、交易、营销等多个业务方直接或者间接的使用 Flink CDC。

平台适配能力上面我们对配置化、感知、协议、SDK等做了适配数据架构我们希望未来借助 CDC+数据湖 构建多应用适配场景稳定性方面做了限流、HA、血缘、性能验证等多方面测试和改进。

适配性改造方面,我们去兼容了 Canal 一些功能,例如根据指定的Key去取相应的值,Hash 后分发到 Kafka对应分区上面,保障同个主键id分区有序。同时进行了相关的协议改造,可以使用 Flink SQL完成整库同步开发。

从稳定性上面,我们开发自己一套监控逻辑,保障业务连续性和稳定性。并且在原生告警上面,我们不仅做了相关监控大盘,底层还增加了 Debezium 一些指标采集上报到Flink Metric,构造整体CDC监控大盘。其中包括了原生指标 NumberOfDisconnects,一些采集等待队列大小、事件产生数量等等一些指标,这些指标有助于我们排查任务故障和了解日常使用情况,协助我们更好的去优化作业参数。

三、业务场景

公司内部目前的业务有小拉出行、货拉拉、LaLaMove、跑腿等多业务线,同时还区分国内和海外多DC环境,整体业务数据量达到 TB~PB 级别,目前已经接入的已经有实时看板、云台、 kepler、 BI 报表、Monitor 、交易等业务,陆续还有订单、跑腿等业务接入中。

1. 数据实时加工

如图上所示,业务方首先在飞流计算平台配置相关采集信息,包括采集 DB、采集库表等信息就完成了一次基础配置。完成配置后即可启动 Flink 采集任务,经过 Flink CDC 数据实时订阅后,把 MySQL 数据实时采集到 Kafka。业务方可以按需订阅自己需要的topic并且取出相关表的变更数据,通过 Flink ETL 进一步加工能力,把加工后的数据输出至 OLAP 关系型数据库、Hive 离线数仓、数据湖等不同的地方,最后业务方通过自己的业务系统加工完成相关数据后进行展示与输出。这样一条完整的数据采集、计算、存储、展示链路即可快速完成。

2. 整库同步场景

当多个任务使用同一张 MySQL 表做处理时,MySQL 数据库会启动多个连接,对 MySQL 服务器和网络造成很大的压力。飞流通过引入 Kafka 作为中间层,并封装了表和库的同步语句到 Kafka 来解决 MySQL 重复链接问题,在面对整库同步场景下,我们使用 Kafka 作为转发中间层,下游任务消费中间层数据即可,避免直接消费 binlog。

通过飞流 SQL+Flink CDC 能力,我们完善了整库同步能力。用户可以把分库分表数据进行统一采集到 Kafka 中间层,在数据下游消费即可完成统一视图构建,在一张 Hive/湖表查询分库分表数据,完成业务分析和查询操作,大大的提高业务数据连续性和便捷性。

四、链路切换

用户在切换时候,通常会对新技术会有顾虑,包括数据最终一致性,切换便捷程度,技术信任度,效率等多方面去考察是否值得切换。为了打消用户疑虑,同时让切换更加丝滑,我们团队提供了多种切换方式,新链路只需用户完成页面SQL基本配置/一键采集页面拖拉拽即可完成数据采集,简单方便。

对于历史用户希望全链路切换至 Flink CDC,我们提供了简单切换思路和复杂切换的方式

简单链路的切换我们可以通过双采集模式,把 CDC 接入新的采集表中,通过 Flink SQL Union 逻辑完成数据合并操作,按照时间进行切分数据进入时间,即可完成链路切流动作。业务做到无感知完成 Flink CDC 链路接入。

对于复杂的链路,我们可以使用多层逐层对数。这里给大家展示了我们实时大屏切换的流程。实时大屏由于多实时链路之间延迟计算差异特性,对DM层设计了独特的对数方案,多达 15+ 对数规则,利用现有的云台,加速可视化分析的过程,在对数中累计修复双跑链路不一致问题 2 个。

切换过程中我们也遇到了数据性一致性的挑战,于是我们基于公司内部工具和一些常见的数学统计方法,设计了一套科学的方法论区对齐数据格式和数据准确性。我们需要统计 Flink CDC 与 Canal 数据差异率,利用常用统计学方法找出异常数据进行逐步归因排查,并且输出结论报告给到业务方,让业务方放心切换。

从上图可以看到,我们利用公司云台产品,去做数据校验可视化。在实时大屏这个业务里面,它的指标会比较多,其中一个比较关键性的指标叫做响应时长中位数。大家从图中可以看到我们会从以下几个方面去输出一些对数的一些结论。首先我们会从数据的一个总量、总记录数去对比差异,同时还会通过一些利用一些统计学的一些方法去逐步地找出这两条链路上面的一些数据上的一些不同或者是趋势。例如利用正负 rate 分布差异、统计表指标差值 max 的平均值、差异率趋势等等的这样的一些指标。然后大家可以看到第二幅图,我们是统计了每一个分片时间内每一条数据以及是一些值的一些差异率。我们这边可以利用公司内部云台上面的一些功能,把这一部分数据进行一些交叉对比后,产出结论给到业务方进行快速双链路对数这样的一个动作。

五、整体收益

切换后,我们从多个维度去对比切换前后带来的收益,我们主要针对以下这几个维度进行量化对比

  • 采集性能对比:采集吞吐量、采集延迟、数据延迟、数据格式大小
  • 采集业务切换效果对比:业务方反馈切换后的整体情况
  • 采集稳定性:对比采集稳定性提升,故障和冒烟总次数是否下降

1. 日常采集Canal / Flink CDC 延迟对比

大家可以看到这是 CDC 跟 Canal 日常的一些采集的一些延迟对比,当业务方把从这个 Canal 切换到 CDC 之后,对比原链路突刺减少,采集稳定性大幅度提升,整体的延迟下降率最高达到80%(最高延迟从30S下降到3S)。业务反馈数据时效性提示,同时因为采集延迟的下降,业务反馈整体的一个数据统计双流Join、准确性等各方面都得到了一定程度的提升。

2. 归档任务恢复

第二个场景的话是深夜归档的一些任务,因为在深夜的时候有一些业务方需要对数据进行一些备份或者是回刷的一些操作。这种操作导致 DB 的 IO 大量提升,也会影响当前的一些采集任务。在这样高负载的场景下, Canal 的最大延迟可以达到 250 秒, CDC 的延迟在 30 秒就可以去恢复。经过研究因为 CDC 它支持断点续传,同时的 CDC 具有 GTID 切换恢复能力,所以在任务采集的自愈性和恢复能力上面更加显著。

最后我给大家展示一下当前的一个链路的一个切换情况,当前已经有 50 多个链路替换为Flink CDC,每天处理数据量达到TB级别,陆陆续续海外国内业务方主动询问Flink CDC 技术和相关切换SOP流程。从整体效果来对比,大家看到下图基本上延迟都在 1-2 秒左右,然后对比以前的采集模式,当前的采集效率得到大幅提升,同时延迟下降十分明显。同时借助Flink引擎的分布式处理能力,数据发送的吞吐量提升,稳定性得到保障。

同时我们在存储上面也有一些额外的收获,我们自己实现了一套协议(兼容Debezium)后,对比原来Canal的协议,Kafka中间的存储量下降20%-60% 不等(下图是其中一个分库分表存储量对比)

六、开源参与

我们在贡献这一部分代码的同时,我们也积极跟开源社区合作,不仅积极在社区贡献Feature,同时在今年7月在参加 Apache Asia Community Over Code 2024 国际会议,作为实时计算生产案例去参加这一部分的演讲,在这里也非常感谢阿里实时计算团队的 @庆盛 @徐榜江 老师以及其团队给予我们的协助,帮助货拉拉快速落地Flink CDC用于生产环境。

七、未来展望

从数据入湖,我们希望 Flink CDC 支持数据入湖,为数据的时效性带来新的新鲜度。社区目前已经支持Paimon数据入湖,希望未来使用 Flink CDCYAML 作业配置,即可实现入湖 ETL + Schema Evolution 能力,完成数据入湖入仓的整个链路场景。

从稳定性建设上面,我们会继续持续深耕 Flink CDC 任务链路预警系统的一些开发,提升数据采集、感知和发现能力,做到业务方的一个及时预警。同时我们也会探索这一部分数据的实时入库同步,然后通过数据湖来搭配去解决数据修正慢、数据回溯慢的等问题。我们也会保障 CDC 底层数据链路采集的稳定性和正确性,保障在不同的复杂采集数据类型上面的一些正确的语义,提升数据采集稳定性,让业务平安夜时长提升,提升平台和值班人员幸福感

我们也会积极跟开源社区开展合作,把一些内部的一些 Feature 和社区进行分享,以及是把一些相关案例去给到我们的开源社区。同时在组内外开展 Flink CDC 的一些技术培训,包括像最近公司的派课堂培训用户使用 Flink CDC 完成数据入库,去完善周边的一些生态和功能。包括后续希望使用 Amoro + Flink CDC + Paimon/Iceberg + Dinky / SP 等平台形成完整入湖管理能力,同时和各大社区一起开发相关 Feature,并在公司落地服务业务。


欢迎大家多多关注 Flink CDC,从钉钉用户交流群[1]、微信公众号[2]、Slack 频道[3]、邮件列表[4]加入 CDC 用户社区,以及在 Flink CDC GitHub 仓库[5]上参与代码贡献!


[1] “ Flink CDC 社区 ② 群”群的钉钉群号:80655011780

[2] ” Flink CDC 公众号“的微信号:ApacheFlinkCDC

[3] https://flink.apache.org/what-is-flink/community/#slack

[4] https://flink.apache.org/what-is-flink/community/#mailing-lists

[5] https://github.com/apache/flink-cdc


更多内容

img


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc

retouch_2024070417440476.jpg

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
5月前
|
存储 监控 数据挖掘
京东物流基于Flink & StarRocks的湖仓建设实践
本文整理自京东物流高级数据开发工程师梁宝彬在Flink Forward Asia 2024的分享,聚焦实时湖仓的探索与建设、应用实践、问题思考及未来展望。内容涵盖京东物流通过Flink和Paimon等技术构建实时湖仓体系的过程,解决复杂业务场景下的数据分析挑战,如多维OLAP分析、大屏监控等。同时,文章详细介绍了基于StarRocks的湖仓一体方案,优化存储成本并提升查询效率,以及存算分离的应用实践。最后,对未来数据服务的发展方向进行了展望,计划推广长周期数据存储服务和原生数据湖建设,进一步提升数据分析能力。
477 1
京东物流基于Flink & StarRocks的湖仓建设实践
|
3月前
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
208 9
Flink在B站的大规模云原生实践
|
4月前
|
数据采集 SQL canal
Amoro + Flink CDC 数据融合入湖新体验
本文总结了货拉拉高级大数据开发工程师陈政羽在Flink Forward Asia 2024上的分享,聚焦Flink CDC在货拉拉的应用与优化。内容涵盖CDC应用现状、数据入湖新体验、入湖优化及未来规划。文中详细分析了CDC在多业务场景中的实践,包括数据采集平台化、稳定性建设,以及面临的文件碎片化、Schema演进等挑战。同时介绍了基于Apache Amoro的湖仓融合架构,通过自优化服务解决小文件问题,提升数据新鲜度与读写平衡。未来将深化Paimon与Amoro的结合,打造更高效的入湖生态与自动化优化方案。
233 1
Amoro + Flink CDC 数据融合入湖新体验
|
4月前
|
SQL 存储 NoSQL
Flink x Paimon 在抖音集团生活服务的落地实践
本文整理自抖音集团数据工程师陆魏与流式计算工程冯向宇在Flink Forward Asia 2024的分享,聚焦抖音生活服务业务中的实时数仓技术演变及Paimon湖仓实践。文章分为三部分:背景及现状、Paimon湖仓实践与技术优化。通过引入Paimon,解决了传统实时数仓开发效率低、资源浪费、稳定性差等问题,显著提升了开发运维效率、节省资源并增强了任务稳定性。同时,文中详细探讨了Paimon在维表实践、宽表建设、标签变更检测等场景的应用,并介绍了其核心技术优化与未来规划。
442 10
Flink x Paimon 在抖音集团生活服务的落地实践
|
4月前
|
SQL 关系型数据库 MySQL
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
Apache Flink CDC 3.4.0 版本正式发布!经过4个月的开发,此版本强化了对高频表结构变更的支持,新增 batch 执行模式和 Apache Iceberg Sink 连接器,可将数据库数据全增量实时写入 Iceberg 数据湖。51位贡献者完成了259次代码提交,优化了 MySQL、MongoDB 等连接器,并修复多个缺陷。未来 3.5 版本将聚焦脏数据处理、数据限流等能力及 AI 生态对接。欢迎下载体验并提出反馈!
803 1
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
|
4月前
|
资源调度 Kubernetes 调度
网易游戏 Flink 云原生实践
本文分享了网易游戏在Flink实时计算领域的资源管理与架构演进经验,从Yarn到K8s云原生,再到混合云的实践历程。文章详细解析了各阶段的技术挑战与解决方案,包括资源隔离、弹性伸缩、自动扩缩容及服务混部等关键能力的实现。通过混合云架构,网易游戏显著提升了资源利用率,降低了30%机器成本,小作业计算成本下降40%,并为未来性能优化、流批一体及智能运维奠定了基础。
239 9
网易游戏 Flink 云原生实践
|
5月前
|
SQL API Apache
Dinky 和 Flink CDC 在实时整库同步的探索之路
本次分享围绕 Dinky 的整库同步技术演进,从传统数据集成方案的痛点出发,探讨了 Flink CDC Yaml 作业的探索历程。内容分为三个部分:起源、探索、未来。在起源部分,分析了传统数据集成方案中全量与增量割裂、时效性低等问题,引出 Flink CDC 的优势;探索部分详细对比了 Dinky CDC Source 和 Flink CDC Pipeline 的架构与能力,深入讲解了 YAML 作业的细节,如模式演变、数据转换等;未来部分则展望了 Dinky 对 Flink CDC 的支持与优化方向,包括 Pipeline 转换功能、Transform 扩展及实时湖仓治理等。
664 12
Dinky 和 Flink CDC 在实时整库同步的探索之路
|
3月前
|
消息中间件 SQL 关系型数据库
Flink CDC + Kafka 加速业务实时化
Flink CDC 是一种支持流批一体的分布式数据集成工具,通过 YAML 配置实现数据传输过程中的路由与转换操作。它已从单一数据源的 CDC 数据流发展为完整的数据同步解决方案,支持 MySQL、Kafka 等多种数据源和目标端(如 Delta Lake、Iceberg)。其核心功能包括多样化数据输入链路、Schema Evolution、Transform 和 Routing 模块,以及丰富的监控指标。相比传统 SQL 和 DataStream 作业,Flink CDC 提供更灵活的 Schema 变更控制和原始 binlog 同步能力。
|
6月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
6月前
|
存储 运维 监控
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
本文总结了阿里妈妈数据技术专家陈亮在Flink Forward Asia 2024大会上的分享,围绕广告业务背景、架构设计及湖仓方案演进展开。内容涵盖广告生态运作、实时数仓挑战与优化,以及基于Paimon的湖仓方案优势。通过分层设计与技术优化,实现业务交付周期缩短30%以上,资源开销降低40%,并大幅提升系统稳定性和运营效率。文章还介绍了阿里云实时计算Flink版的免费试用活动,助力企业探索实时计算与湖仓一体化解决方案。
781 3
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践

相关产品

  • 实时计算 Flink版