发布日期:2024-12-25 06:05 点击次数:101
本文作家为数新智能高档架构各人李斌松,曾在科大讯飞、阿里、同盾等公司端庄过大数据平台的架构设想与竣事。某省医保局技俩对多地及时数据采集的条目较高,数新智能调研后笃定Flink CDC YAML功课巧合知足大部分的业务场景,研发团队辘集Flink CDC YAML功课的臆想特色,在社区版块基础上进行矫正与优化,最终取得勤俭计较资源高达90%以上、数据及时同步达到秒级蔓延的效劳。
一、技俩配景
某省医疗保险局使用省级大数据平台统筹该省通盘地市的医疗保险。在原有的平台架构下,省医疗保险局将通盘地市以及省级的数据汇注后以T+1的花样提供给国度平台。如下图所示:
但跟着对及时数据的条目越来越高,省医疗保险局之前采购的离线平台以及及时平台,遭遇了多条数据采集链路从各地市采集数据,酿成各地市数据库压力大,不同采集链路存在数据一致性的问题。每个地市需要同步数据到备份库,导致地市的数据爱护责任量强大。基于以上痛点,某省医疗保险局决定对现存平台进行升级矫正。
二、架构设想
Flink在国内有极端庸碌的应用基础,咱们在过往实施的技俩中,在及时计较框架选型上会优先推敲Flink臆想的技能栈,并照旧在使用Flink CDC当作及时数据入湖器用上蕴蓄了比拟熟练的实施训诫。Flink CDC 3.0版块引入了Pipeline的架构设想,功能更为完善,聚焦于数据集陋习模,通过YAML功课撑抓了全增量一体化、整库同步、Schema Evolution、Transform等才略。辘集省医疗保险局蓄意使用Paimon当作大数据存储的配景,Flink YAML功课是知足咱们及时数据入湖场景条目的理念念决策。
某省医疗保险局的技俩中,各地市需要同步的数据来自于地市的多个系统,波及700+数据库实例,500+逻辑表,其中大部分表均是分库分表容貌,漫衍在多个数据库实例中。吞并份数据,需要写入省医保平台的多个存储系统,包括:数据湖平台Paimon、GaussDB(DWS)数据库、TBase数据库、TDSQL数据库等。如下图所示:
若是端到端的数据采集满盈依赖MySQL当作数据源,需要屡次采集地市MySQL的Binlog,这会带来数据库劳动的背负。因此咱们引入了Kafka当作中间存储,各个地级市的MySQL库数据先采集到Kafka,再从Kafka读取数据写入到Paimon数据湖存储和MPP数据库。
三、技能挑战
由于当今Flink CDC YAML功课关于客户环境的一些数据源类型、及时同步场景尚未撑抓,无法平直知足该技俩标及时同步业务场景。咱们在社区Flink CDC 3.1的版块上也作念了定制化的二次开采。包括以下内容:
3.1 Kafka Sink输出表结构变更
技能挑战Flink CDC将原始MySQL DDL SQL贯通生成表结构变更事件(SchemaChangeEvent),在Sink侧照旧莫得原始的DDL SQL语句,况兼Kafka Sink莫得把这个表结构变更事件发送出来,因此下流莫得主见平直通过Kafka的输出获得到上游表结构的变化信息。惩办决策为了惩办这个问题,咱们把表结构变更事件平直转为JSON字符串并通过Kafka Pipeline写出,不才游系统消费Kafka Topic读到表结构变更事件对应的JSON后,再反序列为表结构变更事件,下流系统据此引申表结构变更操作。
因为SchemaChangeEvent的子类莫得默许构造函数,为了巧合序列化或者反序列化,咱们在SchemaChangeEvent 偏执子类上添加不错用于JSON序列化的注解。代码如下。
3.2 减少功课数
技能挑战
由于医保业务会产生海量的C端数据,而且每个地市的MySQL业务表基本王人是分库分表分实例部署模式,悉数有470+数据源。为了减少Flink CDC YAML功课的数目和资源花费,需要多个数据源合并在吞并个任务里采集Binlog,并按信得过例分发。
惩办决策
咱们扩张了Flink CDC的Composer模块以撑抓竖立多个DataSource,每个DataSource创建一个DataStream,终末合并通盘的DataSource,使得只需要一个功课就巧合完成多个实例的数据同步。改革代码如下:
3.3 分库分表合并
技能挑战
不同地市吞并业务表数据采集写入吞并Topic 中,通过Transform 添加地市编码,再消费Kafka数据入湖。由于地市吞并业务表结构有一些微弱辞别,举例字段类型、字段个数、字段规定不一致。而Flink CDC里的数据变更事件(DataChangeEvent)不包含表结构信息,需要通过中心节点(SchemaRegistry)进行爱护,竣事复杂度比拟高,在Flink CDC 3.1版块里在包含Transform的分库分表合并场景下的撑抓并不完善,咱们但愿巧合以更简陋的花样撑抓表结构变更的场景。
惩办决策
为惩办这个问题,咱们在数据变更事件中添加Schema信息,在Transform和Sink 处理时就能平直笃定表结构信息, 从而减少与其他组件的交互,裁汰表结构信息爱护的复杂度。
这个改革在Transform和Sink上需要休养的代码比拟多,亦然咱们在竣事决策的经过中,开采难度最大的场合。下图是Paimon Sink 改革的决策:
3.4 其他新增功能
撑抓逻辑删除
咱们在Sink节点里添加了界说逻辑删除字段的竖立,关于上游的删除操作,在竖立了这个参数以后,不会执行进行数据删除,而是修复这个逻辑删除字段为 true 当作记号,从而保证所罕有据变更王人巧合被齐备纪录,简陋对医疗数据进行存档和数据回放。下图展示了在YAML功课何如竖立一个逻辑删除字段:
脏数据管制
在Transform疏导阶段以及Sink写入阶段王人有可能出现失败的情况,关于这些同步经过中因为类型或者数值死心导致处理失败的数据,咱们界说为脏数据,脏数据的出现会导致任务失败,从而使得蔓延抓续上涨。
在出现脏数据时,咱们会将这些脏数据写入事前界说好的Kafka Topic,幸免因为数据颠倒导致任务写入失败,同期咱们在Flink CDC的事件里纪录数据开头的数据源和功课信息,简陋后续分析。为此在采集MySQL数据时,咱们在数据变更事件里添加数据源地址信息和任务信息,如下图所示,展示了在 Kafka里存储的一条脏数据的内容。
撑抓MySQL/PostgreSQL Sink
在某省医保局也存在一些使用 MySQL/PostgreSQL 当作存储的业务,为了撑抓将数据同步到这些存储,咱们也拓展撑抓了竣事YAML功课的MySQL/PostgreSQL Sink。
追思
当今这些改革正在冉冉孝顺给社区,咱们但愿巧合与社区沿途激动Flink CDC YAML功课的快速发展。举例在CDC 3.1版块刚刚撑抓Paimon Sink, 咱们很快就运转考证使用了,况兼积极和社区同学互助激动完善Paimon Sink竣事,经过几次迭代,Paimon Sink在咱们线上环境的应用照旧比拟踏实了。
四、实施效劳
截止当今,浙江数新辘集有限公司(简称:数新智能)CyberData平台已在某省医保局完成Flink CDC YAML功课的坐褥实践落地,稳重撑抓来自于10多个地市的700+数据库实例,500+逻辑表,15000+物理表的及时数据同步场景。为撑抓上述同步场景,悉数竖立500+ Flink CDC YAML功课,每个任务1 Core 2 GB * 2个并发,执行需要500 Core 1000 GB,通过Flink CDC YAML功课竣事整库同步、分库分表同步。此技俩执行得到以下多方面的效益:
1.大幅升迁资源诳骗率:通过YAML功课特别的数据及时同步架构,大幅裁汰用于数据同步的计较资源花费。预测可比Flink SQL功课勤俭Flink集群计较资源高达90%以上。
2.减少爱护资本:通过和洽一套数据平台,各地市取消备份库,裁汰各地市备份库爱护东说念主力和物力插足。
3.升迁数据治理水平:通过平台引入的数据比对技能,数据的一致性得到灵验保险。通过脏数据收罗,巧合对颠倒数据进行跟踪。
4.升迁数据及时同步才略:从地市到省级再到国度中心,均竣事查询及时数据才略,反馈蔓延达到秒级别。