{"id":29571903,"url":"https://github.com/oceanbase/flink-oceanbase-migrate-tool","last_synced_at":"2025-07-19T04:36:34.257Z","repository":{"id":289427124,"uuid":"970438659","full_name":"oceanbase/flink-oceanbase-migrate-tool","owner":"oceanbase","description":"flink-oceanbase-migrate-tool (Flink-OMT for short) is a data migration tool provided by OceanBase, which is used to import data from the source database into OceanBase through Flink.","archived":false,"fork":false,"pushed_at":"2025-04-23T07:25:32.000Z","size":75,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-23T08:28:02.249Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oceanbase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-22T02:49:45.000Z","updated_at":"2025-04-23T07:27:36.000Z","dependencies_parsed_at":"2025-04-23T08:40:09.559Z","dependency_job_id":null,"html_url":"https://github.com/oceanbase/flink-oceanbase-migrate-tool","commit_stats":null,"previous_names":["oceanbase/flink-oceanbase-migrate-tool"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oceanbase/flink-oceanbase-migrate-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oceanbase%2Fflink-oceanbase-migrate-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oceanbase%2Fflink-oceanbase-migrate-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oceanbase%2Fflink-oceanbase-migrate-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oceanbase%2Fflink-oceanbase-migrate-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oceanbase","download_url":"https://codeload.github.com/oceanbase/flink-oceanbase-migrate-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oceanbase%2Fflink-oceanbase-migrate-tool/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265889162,"owners_count":23844539,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-19T04:36:33.590Z","updated_at":"2025-07-19T04:36:34.247Z","avatar_url":"https://github.com/oceanbase.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# flink-oceanbase-migrate-tool\n\n[English](README_EN.md) | 简体中文\n\n# 项目介绍\n\nflink-oceanbase-migrate-tool（简称 Flink-OMT）是 OceanBase 提供的数据迁移工具，用于将源数据库的数据通过 Flink 导入 OceanBase。该工具使得用户能够以 YAML 配置文件的形式，优雅地定义其数据同步流程，自动化生成定制化的 Flink 算子并且提交 Flink 作业。\nFlink-OMT 深度集成并由 Apache Flink 驱动，提供以下核心功能：\n\n+ ✅ 端到端的数据集成框架\n+ ✅ 具备表结构自动同步的能力\n+ ✅ 支持多库多表同步\n+ ✅ [支持多库多表路由同步](./doc/route.md)\n\n当前 Flink-OMT 仅支持StarRocks作为源数据库。\n\n# 编译与构建\n\n```shell\ngit clone https://github.com/oceanbase/flink-oceanbase-migrate-tool.git\ncd flink-oceanbase-migrate-tool\nmvn clean package -DskipTests\n\n# Or specify the flink version to build\nmvn clean package -DskipTests -Dflink.majorVersion=1.19 -Dflink.version=1.19.1\n```\n\n# 使用\n\n```shell\n\u003cFLINK_HOME\u003ebin/flink run \\\n     -D execution.checkpointing.interval=10s\\\n     -D parallelism.default=1\\\n     -c com.oceanbase.omt.cli.CommandLineCliFront\\\n     lib/flink-omt-1.0-SNAPSHOT.jar \\\n     -config config.yaml\n```\n\n# OceanBase Sink\n\nOceanBase Sink支持以JDBC或者旁路导入的方式，同步数据到OceanBase。\n\n+ OceanBase Sink的实现依赖于[flink-connector-oceanbase](https://github.com/oceanbase/flink-connector-oceanbase)项目。\n+ 关于 OceanBase 的旁路导入功能，见 [旁路导入文档](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001428636)\n\n## 示例\n\n+ JDBC方式\n\n```yaml\noceanbase:\n  url: jdbc:mysql://localhost:2881/test\n  username: root@test\n  password: ****\n  schema-name: test\n```\n\n+ 旁路导入方式\n\n```yaml\noceanbase:\n  type: direct-load\n  url: jdbc:mysql://localhost:2881/test\n  username: root@test\n  host: localhost\n  port: 2882\n  password: ****\n  schema-name: test\n```\n\n## OceanBase Sink配置项\n\n### JDBC方式配置项\n\n+ 实现依赖于[flink-connector-oceanbase](https://github.com/oceanbase/flink-connector-oceanbase)项目，可参考相关文档：[https://github.com/oceanbase/flink-connector-oceanbase/blob/main/docs/sink/flink-connector-oceanbase_cn.md](https://github.com/oceanbase/flink-connector-oceanbase/blob/main/docs/sink/flink-connector-oceanbase_cn.md)\n\n|                 参数名                  |           默认值            |    类型    |                                    描述                                     |\n|--------------------------------------|--------------------------|----------|---------------------------------------------------------------------------|\n| type                                 | jdbc                     | String   | OceanBase Sink数据同步方式，支持jdbc和direct-load，默认为jdbc。                          |\n| url                                  |                          | String   | 数据库的 JDBC url。                                                            |\n| username                             |                          | String   | 连接用户名。                                                                    |\n| password                             |                          | String   | 连接密码。                                                                     |\n| schema-name                          |                          | String   | 连接的 schema 名或 db 名。                                                       |\n| table-name                           |                          | String   | 表名。                                                                       |\n| driver-class-name                    | com.mysql.cj.jdbc.Driver | String   | 驱动类名，默认为 'com.mysql.cj.jdbc.Driver'，如果设置了其他值，需要手动引入对应的依赖。                 |\n| druid-properties                     |                          | String   | Druid 连接池属性，多个值用分号分隔。                                                     |\n| sync-write                           | false                    | Boolean  | 是否开启同步写，设置为 true 时将不使用 buffer 直接写入数据库。                                    |\n| buffer-flush.interval                | 1s                       | Duration | 缓冲区刷新周期。设置为 '0' 时将关闭定期刷新。                                                 |\n| buffer-flush.buffer-size             | 1000                     | Integer  | 缓冲区大小。                                                                    |\n| max-retries                          | 3                        | Integer  | 失败重试次数。                                                                   |\n| memstore-check.enabled               | true                     | Boolean  | 是否开启内存检查。                                                                 |\n| memstore-check.threshold             | 0.9                      | Double   | 内存使用的阈值相对最大限制值的比例。                                                        |\n| memstore-check.interval              | 30s                      | Duration | 内存使用检查周期。                                                                 |\n| partition.enabled                    | false                    | Boolean  | 是否启用分区计算功能，按照分区来写数据。仅当 'sync-write' 和 'direct-load.enabled' 都为 false 时生效。 |\n| table.oracle-tenant-case-insensitive | true                     | Boolean  | 默认情况下，在 Oracle 租户下，Schema名和列名不区分大小写。                                      |\n\n### 旁路导入配置项\n\n+ 实现依赖于[flink-connector-oceanbase](https://github.com/oceanbase/flink-connector-oceanbase)项目旁路导入模块，可参考相关文档：[https://github.com/oceanbase/flink-connector-oceanbase/blob/main/docs/sink/flink-connector-oceanbase-directload_cn.md](https://github.com/oceanbase/flink-connector-oceanbase/blob/main/docs/sink/flink-connector-oceanbase-directload_cn.md)\n\n|           参数名           |   默认值   |    类型    |                                                                                                                                        描述                                                                                                                                        |\n|-------------------------|---------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type                    | jdbc    | String   | OceanBase Sink数据同步方式，支持jdbc和direct-load，默认为jdbc。                                                                                                                                                                                                                                 |\n| url                     |         | String   | 数据库的 JDBC url。用户表结构同步，旁路导入数据同步本身，不依赖jdbc。                                                                                                                                                                                                                                        |\n| username                |         |          | 连接用户名。                                                                                                                                                                                                                                                                           |\n| password                |         | String   | 密码。                                                                                                                                                                                                                                                                              |\n| host                    |         | String   | OceanBase数据库的host地址。                                                                                                                                                                                                                                                             |\n| port                    |         | Integer  | 旁路导入使用的RPC端口。                                                                                                                                                                                                                                                                    |\n| tenant-name             |         | String   | 租户名。                                                                                                                                                                                                                                                                             |\n| schema-name             |         | String   | schema名或DB名。                                                                                                                                                                                                                                                                     |\n| table-name              |         | String   | 表名。                                                                                                                                                                                                                                                                              |\n| parallel                | 8       | Integer  | 旁路导入服务端的并发度。该参数决定了服务端使用多少cpu资源来处理本次导入任务。                                                                                                                                                                                                                                         |\n| buffer-size             | 1024    | Integer  | 一次写入OceanBase的缓冲区大小。                                                                                                                                                                                                                                                             |\n| max-error-rows          | 0       | Long     | 旁路导入任务最大可容忍的错误行数目。                                                                                                                                                                                                                                                               |\n| dup-action              | REPLACE | String   | 旁路导入任务中主键重复时的处理策略。可以是 `STOP_ON_DUP`\u003cbr/\u003e（本次导入失败），`REPLACE`\u003cbr/\u003e（替换）或 `IGNORE`\u003cbr/\u003e（忽略）。                                                                                                                                                                                          |\n| timeout                 | 7d      | Duration | 旁路导入任务的超时时间。                                                                                                                                                                                                                                                                     |\n| heartbeat-timeout       | 60s     | Duration | 旁路导入任务客户端的心跳超时时间。                                                                                                                                                                                                                                                                |\n| heartbeat-interval      | 10s     | Duration | 旁路导入任务客户端的心跳间隔时间。                                                                                                                                                                                                                                                                |\n| direct-load.load-method | full    | String   | 旁路导入导入模式：`full`, `inc`, `inc_replace`。\u003cbr/\u003e `full`：全量旁路导入，默认值。\u003cbr/\u003e `inc`：普通增量旁路导入，会进行主键冲突检查，observer-4.3.2及以上支持，暂时不支持direct-load.dup-action为REPLACE。\u003cbr/\u003e `inc_replace`: 特殊replace模式的增量旁路导入，不会进行主键冲突检查，直接覆盖旧数据（相当于replace的效果），direct-load.dup-action参数会被忽略，observer-4.3.2及以上支持。 |\n| enable-multi-node-write | false   | Boolean  | 是否启用支持多节点写入的旁路导入。默认不开启。                                                                                                                                                                                                                                                          |\n| execution-id            |         | String   | 旁路导入任务的 execution id。仅当 `enable-multi-node-write`\u003cbr/\u003e参数为true时生效。                                                                                                                                                                                                                |\n\n# StarRocks Source\n\n## 示例\n\n从 StarRocks 读取数据同步到 OceanBase 的 Pipeline 可以定义如下：\n\n```yaml\nsource:\n  type: StarRocks\n  jdbc-url : jdbc:mysql://localhost:9030/sys\n  username: root\n  password: ****\n  scan-url: localhost:8030\n  scan.max-retries: 1\n  tables: test[1-2].orders[0-9]\n  \nroutes:\n  - source-table: test1.orders1\n    sink-table: test1.order1\n    description: sync orders table to order\n  - source-table: test1.orders[23]\n    sink-table: route.order\n    description: sync orders table to route\n\noceanbase:\n  url: jdbc:mysql://localhost:2881/test\n  username: root@test\n  password: ****\n  schema-name: test\n\npipeline:\n  name: Sync StarRocks Database to OceanBase\n  parallelism: 2\n```\n\n## StarRocks Source配置项\n\n|             参数              | 是否必填 |  数据类型  |                                                                       描述                                                                        |\n|-----------------------------|------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------|\n| type                        | 是    | STRING | 固定设置为 `starrocks`。                                                                                                                              |\n| scan-url                    | 是    | STRING | FE 节点的连接地址，用于通过 Web 服务器访问 FE 节点。 格式如下：`\u003cfe_host\u003e:\u003cfe_http_port\u003e`。默认端口号为 `8030`。多个地址之间用逗号 (,) 分隔。例如 `192.168.xxx.xxx:8030,192.168.xxx.xxx:8030`。 |\n| jdbc-url                    | 是    | STRING | FE 节点的连接地址，用于访问 FE 节点上的 MySQL 客户端。格式如下：`jdbc:mysql://\u003cfe_host\u003e:\u003cfe_query_port\u003e`。默认端口号为 `9030`。                                                  |\n| username                    | 是    | STRING | 用于访问 StarRocks 集群的用户名。该账号需具备待读取数据的 StarRocks 表的读权限。                                                                                             |\n| password                    | 是    | STRING | 用于访问 StarRocks 集群的用户密码。                                                                                                                         |\n| database-name               | 是    | STRING | 待读取数据的 StarRocks 数据库的名称。                                                                                                                        |\n| table-name                  | 是    | STRING | 待读取数据的 StarRocks 表的名称。                                                                                                                          |\n| scan.connect.timeout-ms     | 否    | STRING | Flink Connector 连接 StarRocks 集群的时间上限。单位：毫秒。默认值：`1000`。超过该时间上限，则数据读取任务会报错。                                                                       |\n| scan.params.keep-alive-min  | 否    | STRING | 数据读取任务的保活时间，通过轮询机制定期检查。单位：分钟。默认值：`10`。建议取值大于等于 `5`。                                                                                             |\n| scan.params.query-timeout-s | 否    | STRING | 数据读取任务的超时时间，在任务执行过程中进行检查。单位：秒。默认值：`600`。如果超过该时间，仍未返回读取结果，则停止数据读取任务。                                                                             |\n| scan.params.mem-limit-byte  | 否    | STRING | BE 节点中单个查询的内存上限。单位：字节。默认值：`1073741824`（即 1 GB）。                                                                                                 |\n| scan.max-retries            | 否    | STRING | 数据读取失败时的最大重试次数。默认值：`1`。超过该数量上限，则数据读取任务报错。                                                                                                       |\n\n## 注意事项\n\n+ StarRocks 暂时不支持 checkpoint 机制。因此，如果读取任务失败，则无法保证数据一致性。读取任务失败后，StarRocks Source会重复拉取数据。\n  - 对于非主键表并且没有唯一性约束的表，会导致数据重复。\n    * 因此为了保证非主键表数据的一致性，可以关闭Flink Job的失败重试机制，Flink设置：restart-strategy: none。详见：[https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/execution/task_failure_recovery/](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/execution/task_failure_recovery/)\n    * 一旦任务失败，可以手动清空表后，再次进行同步。\n  - 对于主键表或者含有唯一性约束的表，由于OceanBase会自行去重，不会发生数据重复。\n\n## 数据类型映射\n\n|        StarRocks type        | OceanBase type |                      NOTE                      |\n|------------------------------|----------------|------------------------------------------------|\n| TINYINT                      | TINYINT        |                                                |\n| SMALLINT                     | SMALLINT       |                                                |\n| INT                          | INT            |                                                |\n| BIGINT                       | BIGINT         |                                                |\n| LARGEINT                     | BIGINT         |                                                |\n| FLOAT                        | FLOAT          |                                                |\n| DOUBLE                       | DOUBLE         |                                                |\n| DECIMAL(p, s)                | DECIMAL(p, s)  |                                                |\n| BOOLEAN                      | BOOLEAN        |                                                |\n| STRING                       | VARCHAR(65535) |                                                |\n| BINARY(n)                    | BINARY(n)      |                                                |\n| VARBINARY(n)                 | VARBINARY(n)   |                                                |\n| VARCHAR(n) where n \u003c= 262144 | VARCHAR(n)     |                                                |\n| VARCHAR(n) where n \u003e 262144  | MEDIUMTEXT     |                                                |\n| CHAR(n)                      | CHAR(n)        |                                                |\n| DATE                         | DATE           |                                                |\n| DATETIME                     | DATETIME       |                                                |\n| JSON                         | JSON           |                                                |\n| ARRAY                        | ARRAY          | 当ARRAY的嵌套深度小于等于6时。   注意：旁路导入数据同步方式暂不支持ARRAY类型。 |\n| ARRAY                        | VARCHAR(65535) | 当ARRAY的嵌套深度大于6时                                |\n| MAP                          | VARCHAR(65535) |                                                |\n| SRTUCT                       |                | 暂不支持                                           |\n| BITMAP                       |                | 暂不支持                                           |\n| HLL                          |                | 暂不支持                                           |\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foceanbase%2Fflink-oceanbase-migrate-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foceanbase%2Fflink-oceanbase-migrate-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foceanbase%2Fflink-oceanbase-migrate-tool/lists"}