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

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

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

一、OceanBase 介绍

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

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

上图展示了 OceanBase 的架构。

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

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

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

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

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

二、Flink CDC OceanBase Connector 实现原理

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

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

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

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

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

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

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

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

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

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

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

上图展示了 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 应用场景

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

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

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

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

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

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

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 未来展望

上图列出了 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 ,因此增量和全量的重叠部分可能存在数据冗余。

未来,我们首先会优化数据读取。对全量部分做并行化处理,使用新的 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 CDC + OceanBase 全增量一体化数据集成方案相关推荐

  1. ChunJunOceanBase联合方案首次发布:构建一体化数据集成方案

    8月27日,ChunJun社区与OceanBase社区联合组织的开源线下Meetup成功举办,会上重磅发布了「OceanBase&ChunJun:构建一体化数据集成方案」. 这是OceanBa ...

  2. 多端异构数据集成方案

    概述 多端异构,一般来说这是数据集成系统最复杂的情况,而前面部分我们将讨论多端同构场景下的做法,再逐渐延伸到文章主题部分,即多端异构的场景. 多端同构 所谓多端同构,就是终端类型可以是多种,但是使用的 ...

  3. Flink + Iceberg + 对象存储,构建数据湖方案

    简介:上海站 Flink Meetup 分享内容,如何基于Flink.对象存储.Iceberg 来构建数据湖生态. 本文整理自 Dell 科技集团高级软件研发经理孙伟在 4 月 17 日 上海站 Fl ...

  4. [GIS热点] 3DGIS-GIS数码城市(CCGIS) | BIM与GIS | 构建三维模型的技术手段 | CAD的数据模型 | CAD与GIS建模差异 | CAD与GIS的数据集成方案

    文章目录 3D GIS 背景:GIS数码城市 三维城市模型 CAD与GIS CAD的数据模型 几种常见三维系统及其文件格式 CAD与GIS建模的差异 CAD/GIS集成常用的数据模型 BIM与GIS ...

  5. 全终端办公电子邮件集成方案

    面临挑战 应用场景复杂,经常需要在不同终端进行切换,多屏.跨屏及移动办公要求高: 业务系统较多,需要同时支持多种业务的开展,对第三方应用集成及协同办公要求高: 对邮件系统的稳定及高效性要求高,自动化运 ...

  6. SqlServer数据库数据集成方案

    链接服务器方式: --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlink ...

  7. Flink CDC 新一代数据集成框架

    前言: 主要讲解了技术原理,入门与生产实践,主要功能:全增量一体化数据集成.实时数据入库入仓.最详细的教程.Flink CDC 是Apache Flink的一个重要组件,主要使用了CDC技术从各种数据 ...

  8. Flink CDC 系列 - Flink CDC 如何简化实时数据入湖入仓

    摘要:本文整理自伍翀 (云邪).徐榜江 (雪尽) 在 Flink Forward Asia 2021 的分享,该分享以 5 个章节详细介绍如何使用 Flink CDC 来简化实时数据的入湖入仓, 文章 ...

  9. FFA 2022 专场解读 - 实时风控 实时湖仓 数据集成

    Flink Forward Asia 2022 将于 11 月 26-27 日在线上举办,议程内容正式上线! FFA 2022 官网:https://flink-forward.org.cn/ 实时风 ...

最新文章

  1. CTFshow php特性 web129
  2. Go中new和make的区别
  3. jzoj1478-堆排序【堆】
  4. 【咸鱼教程】置于后台停止计时,修改引擎源码解决。
  5. 判断点在直线的哪一侧_【倒车入库】车身是否“正直”该怎么判断?
  6. 对象创建型 - 单利模式
  7. L1-037 A除以B (10 分)—团体程序设计天梯赛
  8. 短消息代理(cmpp20 smproxy)要怎么创建java项目_基于华为smproxy开发的cmpp3
  9. C++ VS2017 编译调用 gflags
  10. 关于多目标跟踪的一点理解
  11. 超实用超全 || ZBrush笔刷大合集
  12. JDK源码学习系列07----Stack
  13. ITSM系统_CMDB设计_业务要件
  14. nvme协议 sata接口_NVMe/SATA SSD有啥不一样?萌新怎么选
  15. Java 使用redis 设计一个每天重新开始计数的计数器
  16. ZOJ2343 Robbers(贪心)
  17. Android 原生 多屏显示 (分屏) 原理 解析
  18. 异或的4种神奇的运用场景
  19. JDK JRE JVM三者之间的关系,以及JDK JRE包含的结构是什么?
  20. JIRA on K8s helm部署实战

热门文章

  1. TYPORA语法大全
  2. 图片上传并保存到数据库以及显示图片
  3. 全国等级计算机模拟考试,全国计算机等级考试一级模拟试题15
  4. 数据分析进阶之路——目标拆解方法
  5. 圆周率 我国古代数学家对圆周率方面的研究工作,成绩是突出的。三国时期的刘徽、南北朝时期的祖冲之都在这个领域取得过辉煌战绩。
  6. 港大Data Science 面试笔试小结
  7. python多线程爬取淘宝商家图片
  8. 强连通分量——tarjan算法缩点
  9. 第二章 控制方程离散化之低阶格式(一)
  10. 学数据分析师有专业要求吗?