当前主流的 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,获取到的数据依然是表结构,再将其转化成流数据发往下游。
