Flink CDC + OceanBase 全增量一体化数据集成方案

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 王赫在 5.21 Flink CDC Meetup 的分享。

本文整理自 OceanBase 技术专家王赫(川粉)在 5 月 21 日 Flink CDC Meetup 的演讲。主要内容包括:

  1. OceanBase 介绍
  2. Flink CDC OceanBase Connector 实现原理
  3. Flink CDC + OceanBase 应用场景
  4. Flink CDC OceanBase Connector 未来展望

点击查看直播回放 & 演讲PDF

一、OceanBase 介绍

img

OceanBase 是蚂蚁集团自研的分布式数据库。从 10 年开始立项并研发迭代,最早的用户是淘宝的收藏夹。14 年,OceanBase 研发团队从淘宝迁移至蚂蚁集团,主要负责支持支付宝内部的去 IOE 工作,即替换支付宝所用的 Oracle 数据库。目前,蚂蚁集团数据库已经全部迁移到 OceanBase。2021 年 6 月 1 号,OceanBase 正式地对外开源,开放了 MySQL 兼容的版本。

OceanBase 数据库经历了三代架构升级,从最初应用于电商的分布式存储系统,到后面通用的分布式数据库,再到如今企业级的分布式数据库。

img

上图展示了 OceanBase 的架构。

最上层的 App 通过 OBProxy(负载均衡代理)访问 OceanBase 数据库的 server 端, server 端的数据存在多个副本,副本之间的关系类似于数据库架构中的主从关系,但它是表级别的,即分区表的分区是以表级别为单位存在多个副本,然后打散存在于多个 server 中。

OceanBase 的架构具有以下几个特点:

  • 无共享架构:每个节点均有自己完整的 SQL 引擎、存储引擎和事务处理逻辑,节点之间完全对等,不存在分层结构。
  • 分区级可用性:提供分区级的可用性。在 OceanBase 数据库中,分区是可靠性和扩展性的基本单元,实现了访问路由、负载均衡以及自动故障恢复。
  • 高可用 + 强一致性:由于数据存在多个副本,多个副本之间通过 Paxos 的一致性协议来提供高可靠性,并且确保日志的持久化在多数派节点成功。

img

OceanBase 的核心特性有以下六点:

  1. 高可用:基于 Paxos 协议,强一致性。少数副本故障,数据不丢,服务不停。
  2. 高扩展:支持在线水平扩展、缩容,且各个节点之间可以自动实现负载均衡。
  3. 高兼容:社区版提供了 MySQL 协议和语法的兼容。
  4. 低成本: OceanBase 数据库存储的使用成本约为 MySQL 的 1/3 左右。因为其对硬件品质要求较低,且对存储进行了非常多的优化,“存储压缩比” 极致。
  5. 多租户:租户之间的资源完全隔离,不同业务方只需在自己的租户中进行数据管理,可以节省一定的成本。
  6. HTAP:在一套引擎中同时实现了 OLTP 和 OLAP 的功能。

二、Flink CDC OceanBase Connector 实现原理

img

当前主流的 CDC 实现方式主要是借助于数据库的日志,获取到数据库的增量日志之后,要确保它的有序性和完整性,再针对这些日志做处理,然后写入到目的端,比如数仓或查询引擎。

img

OceanBase 对于增量数据的获取提供了一些组件。因其本身是分布式数据库,那么它的数据在落到日志时也是分散状态。它提供了一个 obcdc 组件用于获取数据库日志。它会与 OceanBase server 端通过 RPC 进行交互,拉取到原始的日志信息。经过一定的处理后,可以吐出有序的日志流,下游再通过接入 obcdc 组件消费有序的日志流。

目前主要的下游消费端有三类:

  • oblogproxy:开源组件,消费日志流的服务, Flink CDC 依赖于此组件来实现增量的数据拉取。
  • OMS store: OceanBase 对外提供的数据迁移服务。商业版的 OMS 已经迭代了很多版本,支持很多数据源。去年,OMS 提供了社区版的支持,主要支持了 OceanBase 的社区版以及 MySQL 两种数据源。
  • JNI client:可以通过 JNI 的日志客户端直接使用 obcdc 与 OBSserver 进行交互拉取增量日志,正在开源计划中。

img

目前开源社区提供的 OceanBase CDC 组件主要有两个:

  • OceanBase Canal:Canal 是阿里巴巴对外开源的 MySQL 增量日志拉取工具。 OceanBase 社区基于开源版的 Canal 最新代码,增加了对于 OceanBase 增量日志的拉取解析能力。
  • Flink CDC:通过 oblogproxy 使用 obcdc,从 OceanBase 拉到增量日志之后通过另外的开源组件 logproxy-client 消费增量日志,并进行处理。

img

上图左下角是动态表的定义方式,数据流在 Flink 中会通过动态表的形式转化成表。只有转化成一张表,才能对其进行 SQL 操作。之后由 Continuous Queries 对不断增长的流式表进行 query,获取到的数据依然是表结构,再将其转化成流数据发往下游。

img

上图展示了 Flink CDC 的实现原理。

Flink CDC Connector 只做对源端数据的读取,即只负责将数据从数据源读到 Flink 引擎。

当前的 Flink CDC Connector 主要分为以下三类:

  • MySqlSource:实现了最新的 source 接口以及并发读取。
  • DebeziumSourceFunction:基于 Debezium 实现了 SourceFunction,支持旧版 MySQL、Oracle、MongoDB、SqlServer、PostgreSQL。
  • OceanBaseSourceFunction:实现了 SourceFunction 接口,分别基于 JDBC 和 logproxy-cilent 实现了全量和增量读取。

img

上图展示了 Flink CDC OceanBase Connector 的数据路径。

增量数据首先通过 logproxy 进行拉取, logproxy-client 会监听到增量日志的数据流,数据流进入到 Flink CDC 之后通过 Flink CDC 的处理逻辑写入到 Flink 。全量数据通过 JDBC 进行拉取。

当前 Flink CDC OceanBase Connector 支持的能力,主要受限于 logproxy,目前能够支持从指定时间拉取数据。但由于 OceanBase 是分布式数据库,无法精确地找到日志增量数据的起点,而通过时间戳来指定可能会存在一些重复数据。

在全量阶段,又因为 OceanBase 社区版没有表锁,因此全量数据的读取也无法通过加锁来确定数据边界。

基于以上两方面的考虑,目前暂时只支持 at-least-once 工作模式,还未实现 exactly-onece。

三、Flink CDC + OceanBase 应用场景

img

3.1 场景 1:基于分库分表的数据集成

Flink CDC 是全增量一体化, OceanBase Connector 对数据表的读取支持正则匹配。针对分库分表的一些场景,可以通过 OceanBase Connector 创建动态表来读取数据源的数据,然后写入到一张表中,实现表数据的汇聚。

img

3.2 场景 2:跨集群/租户的数据集成

OceanBase 是多租户系统,目前对于社区版的 MySQL 租户还未实现跨租户的访问能力。因此,如果需要读取跨租户的数据,还需通过多个数据库的连接来实现分别读取。而 Flink CDC 天然适合这项工作,相当于每个租户都对应一个动态表来做数据源读取的通道,然后在 Flink 中汇聚。

img

3.3 场景 3:多种数据源的数据集成

可以对不同种类数据源进行数据汇聚,对于 MySQL、TiDB 等与 MySQL 协议兼容的数据源的集成,因为数据格式是一样的,基本不存在改动成本。

img

3.4 场景 4:搭建 OLAP 应用

OceanBase 是 HTAP 数据库,不仅 TP 能力强,还能够作为数仓来使用。Flink 中的 JDBC connector 支持写入数据到兼容 MySQL 协议的数据库,因此可以通过使用 Flink CDC 来读取源端数据,再将这些数据通过 Flink JDBC connector 写入到 OceanBase 中,将 OceanBase 当作目标端来使用。

目前,OceanBase 提供了 SQL、Table API 和 HBase API 三种数据使用方式,所有使用方式所需组件都已开源。

四、OceanBase Connector 未来展望

img

上图列出了 OceanBase CDC 方案现状。

OMS 社区版:它是 OMS 商业版的功能子集,但是没有开源。作为白屏工具,其操作友好,且全增量一体化,附带数据校验和运维的能力。它的不足在于部署流程稍显繁琐,只对 MySQL 和 OceanBase 社区版两种数据源做了支持,且不支持增量 DDL。

DataX + Canal/Otter:它是开源方案,通过 DataX + Canal/Otter 做数据迁移工作。Otter 是 Canal 的父项目,主要针对异地多活,能够支持双向数据同步,其增量数据读取基于 Canal 。此方案的优势在于支持多种目的端,对 HBase、ES 以及关型数据库 RDB 都提供了支持;不足之处在于,Canal 和 Otter 做增量,DataX 做全量,增量和全量分开的方式比较割裂,衔接部分会出现数据冗余。

Flink CDC: 纯开源方案,社区活跃,且社区用户增长速度快,支持多种源端和目的端,全增量一体化。同时,Flink 作为非常优秀的大数据处理引擎,可以做 ETL。其不足之处在于,OceanBase Connector 目前不支持增量 DDL,以及没有实现 exactly-once ,因此增量和全量的重叠部分可能存在数据冗余。

img

未来,我们首先会优化数据读取。对全量部分做并行化处理,使用新的 source 接口的并行化处理框架;增量部分,跳过 logproxy 服务,直接从 OceanBase 数据库拉取增量数据,即通过 JNI client 使用 obcdc 组件直接拉取数据。

其次,丰富功能特性。目前 Flink CDC 只支持社区版 OceanBase ,而 OceanBase 社区版和企业版在增量日志读取方面使用的组件完全一样,因此只需较小改动即可支持企业版的增量读取;支持增量 DDL、exactly-once 模式以及限速。

最后,提高代码质量。首先会增加端到端的测试;格式转化部分,使用 runtime converter 代替 JdbcValueConverters,提高性能;实现对新版 source 接口(并行处理框架)的支持。

问答

Q:Flink CDC OceanBase Connector 开源后的易用性和稳定性如何?

A:易用性方面,开源一年以来,我们陆续增加了很多开源组件,包括 OMS、OCP 等非开源社区版生成功能的支持;稳定性方面,OceanBase 已经在蚂蚁内部大量应用, MySQL 兼容版本也已经在包括快手在内的 20 多家企业中投入大规模应用,因此无须担心其稳定性。

Q:OceanBase 的分片信息、索引信息等元数据存储在哪里?

A:存储在 OB server 内,可以通过 SQL 直接进行查询。

点击查看直播回放 & 演讲PDF


更多 Flink 相关技术问题,可扫码加入社区钉钉交流群
第一时间获取最新技术文章和社区动态,请关注公众号~

O1CN01tmtpiy1iazJYZdixL_!!6000000004430-2-tps-899-548.png"

活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算Flink版现开启活动:
99 元试用 实时计算Flink版(包年包月、10CU)即有机会获得 Flink 独家定制卫衣;另包 3 个月及以上还有 85 折优惠!
了解活动详情:https://www.aliyun.com/product/bigdata/sc

image.png

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
11天前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
33 9
|
2月前
|
算法 API Apache
Flink CDC:新一代实时数据集成框架
本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。
587 1
Flink CDC:新一代实时数据集成框架
|
2月前
|
消息中间件 canal 数据采集
Flink CDC 在货拉拉的落地与实践
陈政羽在Apache Asia Community Over Code 2024上分享了《货拉拉在Flink CDC生产实践落地》。文章介绍了货拉拉业务背景、技术选型及其在实时数据采集中的挑战与解决方案,详细阐述了Flink CDC的技术优势及在稳定性、兼容性等方面的应用成果。通过实际案例展示了Flink CDC在提升数据采集效率、降低延迟等方面的显著成效,并展望了未来发展方向。
538 14
Flink CDC 在货拉拉的落地与实践
|
2月前
|
机器学习/深度学习 DataWorks 数据挖掘
基于阿里云Hologres和DataWorks数据集成的方案
基于阿里云Hologres和DataWorks数据集成的方案
70 7
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
290 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
368 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
318 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
168 2
|
5月前
|
监控 前端开发 Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成

相关产品

  • 实时计算 Flink版