开发者社区 问答 正文

Canal-Adapter Es 同步存量数据性能问题

环境信息

canal version 1.1.3-alpha-2 mysql version 5.6

问题描述

使用Canal-Adapter进行存量数据同步,目前库表最大的表有8kw数据,利用目前ELT功能进行数据同步,速度非常慢

阅读了源码发现,性能卡在数据同步的时候,反查Es是否重复上(考虑新索引的情况下,不会出现重复) 这边为了提高同步速度,写了2个ELT新的接口

1、适用表数据不超过500w,底层通过多线程进行数据分页查询,每个任务1w条数据库查询+插入es。同时提供isNeedDelete参数控制是否需要反查数据库

http://127.0.0.1:8081/etlEx/rdb/oracle1/mytest_user.yml?sql=select%20id,name,age%20from%20user&isNeedDelete=false -X POST

内部sql会是

select id,name,age from user limit 0,10000; select id,name,age from user limit 10000,10000; .....

2、适用表数据超过500w,底层通过单线程分页查询(分页通过> {orderByParam} 进行快速分页),每次任务1w条数据库查询+多线程插入Es。同时提供isNeedDelete参数控制是否需要反查数据库

http://127.0.0.1:8081/etlEx/rdb/oracle1/mytest_user.yml?sql=select%20id,name,age%20from%20user&isNeedDelete=false&orderBy=id -X POST

内部sql会是

select id,name,age from user limit 0,10000; select id,name,age from user where id>10000 limit 0,10000; .....

原提问者GitHub用户house0128

展开
收起
古拉古拉 2023-05-08 13:45:32 105 分享 版权
1 条回答
写回答
取消 提交回答
  • 如果是大于1w条的数据,默认会自动分成3个线程同时导入。 如果是配置_id为主键的索引ETL时是不会查重的,导入慢你可以把提交批次调commitBatch调整大些

    原回答者GitHub用户rewerma

    2023-05-09 17:48:15
    赞同 展开评论