前言:
一般情况下,CDC 技术主要面向数据库的变更,用于捕获数据库中数据变更的技术。而 Flink CDC+ OceanBase 全增量一体化数据集成方案是将传统的数据库 CDC 技术跟 Flink 优秀的管道能力和丰富的上下游生态结合,将 CDC 数据通过加工后同步到下游,最终生成一个 OceanBase 解决方案,实现全量和增量的一体化同步。
该方案的优势有两点:一是它可以通过一个组件、一条链路就解决数据同步需求,其链路更短,组件更少;二是 Flink SQL 支持分库分表聚合和 ETL,极大地降低了用户使用门槛,用户通过一个 Flink SQL 作业就完成了 CDC 的数据分析、加工和同步。
摘要:
本文整理自 OceanBase 开源生态工具研发技术专家王赫,在深入浅出 OceanBase 线上技术直播第二期的分享。
本篇内容主要分为五个部分:
1.CDC 技术简介
2.OceanBase CDC 组件介绍
3.Flink CDC 简介
4.体验Flink CDC OceanBase Connector
5.总结
一、CDC技术简介
CDC 是 Change Data Capture 变更数据获取的简称,其核心思想是先监测并捕获数据库的变动,包括数据或数据表的插入 INSERT、更新 UPDATE 、删除 DELETE 等,再通过将这些变更按发生的顺序完整记录下来,写入到消息中间件中,以供其他服务进行订阅及消费。
目前,国内比较流行的 CDC 开源技术是 Alibaba Canal,早期主要用于阿里巴巴开源的 MySQL 增量数据订阅和消费组件。OceanBase 基于最新代码开发适配了 OceanBase 社区版数据源,支持增量 DDL、DML,以及库、表和列过滤,基于 Zookeeper 实现高可用集群部署。Client Adapter 适配多种目的端容器,配合 Alibaba Otter 可实现异地多活。
国外也有一个比较流行的开源 CDC 框架叫 Debezium,支持:
DDL和DML的操作日志同步;支持使用数据的主键或唯一键作为消息体的key;支持快照模式和全量同步;
除此之外,Debezium还支持多种数据源,使用 Debezium Server 可以作为嵌入引擎集成到程序中,数据不经 Kafka 直接写入消息系统。
二、OceanBase CDC组件介绍
OceanBase 社区版的 CDC 组件主要有以下四种:
obcdc (原liboblog) 提供增量日志顺序拉取功能;
oblogmsg 提供解析增量日志格式功能;
oblogproxy 提供增量日志拉取服务;
oblogclient 连接 oblogproxy 获取增量日志。
除了以上几种源代码开放的项目之外,OMS 社区版提供了 OceanBase 一站式数据迁移工具套件服务。它不但可以做增量数据的迁移,而且可以做全量数据迁移、全量数据校验等。
上图是 OceanBase 社区版 CDC 组件架构,主要包括 oblogproxy 和 OMS 社区版。其中 Canal 和 Flink CDC 集成了 oblogclient 的能力,通过连接 oblogproxy 获取增量日志。
三、Flink CDC 简介
目前,Flink CDC支持多种数据源,如MySQL、PostgreSQL、Oracle等。Flink CDC提供了对多种数据库的全量和增量数据的读取能力,当数据读到Flink之后,会自动交由FlinkSQL引擎处理。
Flink 是流批一体的处理引擎,Flink CDC 提供了动态表结构。左图显示了流式数据和动态表的对应关系。右图显示了 Continuous Queries 的多次执行结果。
上图是 Flink CDC 的工作原理,基于 Debezium 实现了 SourceFunction 接口,支持MySQL、Oracle、MongoDB、PostgreSQL、SQLServer。
最新的 MySQL 数据源读取实现了 Source 接口,相比 SourceFunction 的实现增强了并发读取。
OceanBaseRichSourceFunction 实现了 SourceFunction 接口,分别基于 JDBC 和 oblogclient 实现了全量和增量读取。
四、体验Flink CDC OceanBase Connector
首先,配置docker-compose.yml并启动容器。在docker-compose.yml 所在目录下执行命令:docker-compose up-d 启动需要的组件。
然后准备数据,使用新创建的用户名和密码进行登陆:docker-compose exec observer obclient-h127.0.0.1-P2881-uroot-ppsw。下载需要的依赖包,在 Flink SQL CLI 中使用 Flink DDL 创建表。
设置间隔时间为3秒,本地时区为 Asia/Shanghai,创建订单表,创建商品表,创建关联后的订单数据表。执行读取和写入 。
完成上述操作后,在Kibana中查看数据。访问:
http://localhost:5601/app/kibana#/management/kibana/index_pattern
创建index pattern enriched_orders, 之后我们就可以在 http://localhost:5601/app/kibana#/discover 看到写入的数据了。
修改监听表数据,查看增量数据变动。在 OceanBase 中依次执行如下修改操作,每执行一步就刷新一次 Kibana,我们可以看到 Kibana 中显示的订单数据将实时更新。
最后,进行环境清理。将 docker-compose.yml 文件所在的目录,执行以下命令,停止所有容器:docker-compose down。进入 Flink 的部署目录,停止 Flink集群:./bin/stop-cluster.sh。
五、总结
Flink CDC是一个全增量一体化的数据迁移方案,支持多种源端类型,并且可以借助Flink SQL实现对流式数据的ETL处理。截止Flink CDC 2.2发布,该项目累计有44位贡献者,4位Maintainer,社区用户群超过4000人。
Flink CDC 从 2.2 开始加入了 OceanBase Connector,目前实现了对多库、多表的全量数据和增量 DML 的 at-least-once 读取。在未来的版本中,Flink CDC OceanBase Connector 会逐步添加对并发读取、增量 DDL 和 exactly-once 的支持。
接下来,我们来对现有的 CDC 方案进行对比。OMS社区版是白屏操作工具,有一个统一的前端界面,提供了全量+增量+数据校验+运维的一站式服务,在线上久经考验。DataX+Canal/Otter 是一个纯开源方案。 Canal支持多种目的端和增量 DDL,Otter 支持双活。
结语
Flink CDC 是纯开源方案,且社区活跃,支持多种数据源和目的端,全量+增量一体化。尤其值得一提的是,Flink CDC支持分库分表聚合和ETL,用户使用门槛低。想象一下,对于现有的 CDC 方案而言,数据清洗、分析、聚合操作流量十分之复杂,而现在利用 Flink SQL 双流JOIN、维表JOIN 等方式,可以非常轻松地实现各种业务逻辑的加工处理。
联系我们
欢迎广大 OceanBase 爱好者、用户和客户随时与我们联系、反馈,方式如下:
社区版官网论坛
社区版项目网站提 Issue
钉钉群:33254054