乐趣区

关于flink:Flink-CDC-OceanBase-全增量一体化数据集成方案

本文整顿自 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 相干技术问题,可扫码退出社区钉钉交换群
第一工夫获取最新技术文章和社区动静,请关注公众号~

流动举荐

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

退出移动版