Doris实战——结合Flink构建极速易用的实时数仓_flink doris(1)

综上可知,利用 Flink CDC结合Doris 两阶段事务提交保证了数据写入一致性。需要注意的是,在该过程中可能遇到一个问题:如果事务预提交成功、但 Flink Checkpoint 失败了该怎么办?针对该问题,Doris 内部支持对写⼊数据进⾏回滚(Rollback),从⽽保证数据最终的⼀致性

3.1.3 DDL 和 DML 同步

随着业务的发展,部分用户可能存在RDS Schema的变更需求。当RDS表结构发生变更时,用户期望Flink CDC不但能够将数据变化同步到Doris,也希望将 RDS 表结构的变更同步到 Doris,⽤户则无需担⼼ RDS 表结构和 Doris 表结构不⼀致的问题。

  • Light Schema Change

Apache Doris 1.2.0 已经实现了  Light Schema Change 功能,可满⾜ DDL 同步需求,快速⽀持 Schema 的变更

Light Schema Change的实现原理相对简单,对数据表的加减列操作,不再需要同步更改数据文件,仅需要再FE中更新元数据即可,从而实现毫秒级的Schema Change 操作。由于 Light Schema Change 只修改了 FE的元数据,并没有同步给 BE。因此会产⽣ BE 和 FE Schema 不⼀致的问题。为了解决这种问题,我们对 BE 的写出流程进⾏了修改,具体包含三个⽅⾯。

(1)数据写入:FE会将 Schema 持久化到元数据中,当 FE 发起导⼊任务时,会把最新的 Schema 一起发给 Doris BE,BE 根据最新的Schema对数据进⾏写⼊,并与 RowSet 进⾏绑定。将该 Schema 持久化到 RowSet 的元数据中,实现了数据的各⾃解析,解决了写⼊过程中 Schema 不⼀致的问题。

**(2)数据读取:**FE ⽣成查询计划时,会把最新的 Schema 附在其中⼀起发送给 BE,BE 拿到最新的 Schema 后对数据进⾏读取,解决读取过程中 Schema 发⽣不⼀致的问题。

**(3)数据 Compaction:**当数据进⾏ Compaction 时,我们选取需要进⾏ Compaction 的 RowSet中最新的Schema作为之后RowSet 对应的 Schema,以此解决不同 Schema 上 RowSet 的合并问题

经过对 Light Schema Change 写出流程的优化后, 单个 Schema Chang 从 310 毫秒降低到了 7 毫秒,整体性能有近百倍的提升,彻底的解决了海量数据的 Schema Change 变化难的问题。

  • Flink CDC DML 和DDL同步

有了 上述Light Schema Change 的保证,Flink CDC 能够同时⽀持DML 和DDL 的数据同步。那么是如何实现的呢?

(1)开启 DDL 变更配置:在 Flink CDC 的 MySQL Source 侧开启同步 MySQL DDL 的变更配置,在 Doris 侧识别 DDL 的数据变更,并对其进⾏解析。

(2)识别及校验:当 Doris Sink 发现 DDL 语句后,Doris Sink 会对表结构进⾏验证,验证其是否⽀持 Light Schema Change。

(3)发起 Schema Change :当表结构验证通过后,Doris Sink 发起 Schema Change 请求到 Doris,从⽽完成此次 Schema Change 的变化。

解决了数据同步过程中源数据⼀致性的保证、全量数据和增量数据的同步以及 DDL 数据的变更后,一个完整的数据同步⽅案就基本形成了。

3.2 如何基于Flink实现多种数据集成

除了上文中所提及的基于 Flink CDC 进行数据增量/全量同步外,我们还可以基于 Flink Job 和 Doris 来构建多种不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值