Oracle 到 Elasticsearch 数据同步
· 阅读需 5 分钟
简述
Elasticsearch 是一个分布式的实时搜索与数据分析引擎,具有强大的可扩展性和高度的灵活性。CloudCanal 对于 Elasticsearch 的支持经过了多轮迭代,支持版本从 6.x 和 7.x 一路扩展到 8.x,并适配了其丰富多样的 API。
同时 CloudCanal 对 Oracle 源端同步技术进行了多处优化,大幅提升了数据同步的稳定性和可靠性。
本文主要介绍如何快速构建一条 Oracle 到 Elasticsearch 的数据同步链路。
技术点
Oracle 基于 LogMiner 的实时同步
CloudCanal 在 Oracle 源端的增量同步中,通过 LogMiner 分析 redo 日志,并结合多轮优化,显著提升了同步的稳定性与效率,已在用户生产环境中成功验证。主要特点包括:
- Oracle RAC 支持与优化:专为 Oracle RAC 场景优化,确保数据同步的完整性和一致性。
- 标准化 LogMiner 解析:默认采用 LogMiner 标准方法(ADD_FILE)解析 redo 日志,并提供 CONTINUOUS_MINE 作为补充(取决于 Oracle 版本)。
- 全事件消费模式:支持全事件消费,保障同步过程中的稳定性。
- 超大事务处理:本地缓存超大变更数据,处理源端 Oracle 超过百万级的变更。
- 位点回溯:在消费出错时,支持使用时间戳、SCN 回溯位点,增强容错能力。
- 数据校验与订正:提供定时的数据校验和订正机制,确保数据质量稳定。
经过以上优化,CloudCanal 在 Oracle 同步场景中表现更加稳健可靠,适应各种复杂的数据同步需求。
自动创建 Elasticsearch 索引和映射结构
CloudCanal 迁移同步任务支持自动将源端数据库表结构映射成 Elasticsearch 索引,该过程中允许用户在 列 级别上,个性化设置自己需要的索引和映射(Mapping)结构。这些设置包括:
- 每个列可以指定是否需要索引。
- 可以对 TEXT 类型的列设置 Elasticsearch 映射中的分词器(标准分词器)。
- 自定义设置索引分片数、副本数。
生成内置 _id 并指定路由字段
在写入 Elasticsearch 时,_id 字段用于唯一标识每个文档(Doc)。数据路由基于 _id 值,确保数据分片定位一致。CloudCanal 数据同步默认遵循以下策略 生成 _id:
- 单主键表:对于单一主键表,默认使用源端关系表的主键列值作为 _id。
- 多主键表:对于多主键表,通过分隔符
$连接多个主键列的值,组合成唯一 _id(可以通过参数pkSeparator自定义分隔符)。 - 无主键表:若表无主键,则将所有列的值用
$连接,生成唯一的 _id。
此默认设置确保了每条数据在 Elasticsearch 中具有唯一的标识,同时提供稳定的分片路由。
操作示例
步骤 1: 安装 CloudCanal
请参考 全新安装(Docker Linux/MacOS),下载安装 CloudCanal 私有部署版本。
步骤 2: 添加数据源
登录 CloudCanal 控制台,点击 数据源管理 > 新增数据源 。
