暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

最新性能对比报告:SeaTunnel 是 Airbyte 30 倍!

SeaTunnel 2023-02-28
3976

点击蓝字 关注我们

作者 | 张昌福
审核 | 高俊



测试报告

SeaTunnel Engine Zeta 发布之后,社区陆续进行了一系列的性能测试,对 SeaTunnel 与当下比较流行的数据集成工具进行了性能指标测试对比。今天的测试报告为 SeaTunnel 与热门同步工具 Airbyte 的对比测试。结果显示,SeaTunnel 的性能是 Airbyte 的 30 倍左右。

为了保证对比测试的准确性,我们选取了相同的测试场景:在相同的资源情况下,测试 Airbyte 和 SeaTunnel 将数据批量从 MySQL 同步到 S3,以 Text 格式保存所需要花费的时间,并进行对比。

01




测试环境


MySQL
阿里云 RDS MySQL 8Core 32G
AWS S3

02




测试数据


列数:31
行数:30000002(3000万条)
大小:数据写入 S3(text 格式)大小为 25G
我们在MySQL中创建了一张包含了 31 个字段的表,主键选择递增的 ID,其他所有字段采用随机的方式生成,除了主键外均不设置索引。建表语句为
create table test.type_source_table
(
    id                   int auto_increment
        primary key,
    f_binary             binary(64)          null,
    f_blob               blob                null,
    f_long_varbinary     mediumblob          null,
    f_longblob           longblob            null,
    f_tinyblob           tinyblob            null,
    f_varbinary          varbinary(100)      null,
    f_smallint           smallint            null,
    f_smallint_unsigned  smallint unsigned   null,
    f_mediumint          mediumint           null,
    f_mediumint_unsigned mediumint unsigned  null,
    f_int                int                 null,
    f_int_unsigned       int unsigned        null,
    f_integer            int                 null,
    f_integer_unsigned   int unsigned        null,
    f_bigint             bigint              null,
    f_bigint_unsigned    bigint unsigned     null,
    f_numeric            decimal             null,
    f_decimal            decimal             null,
    f_float              float               null,
    f_double             double              null,
    f_double_precision   double              null,
    f_longtext           longtext            null,
    f_mediumtext         mediumtext          null,
    f_text               text                null,
    f_tinytext           tinytext            null,
    f_varchar            varchar(100)        null,
    f_date               date                null,
    f_datetime           datetime            null,
    f_time               time                null,
    f_timestamp          timestamp           null
);

03




SeaTunnel任务配置


在SeaTunnel中,我们根据ID字段来进行数据拆分,分成多个子任务进行数据处理。下面是 SeaTunnel 的配置文件:
env {
 
    job.mode = "BATCH"
 
    checkpoint.interval = 300000
 
}
 
 
 
 
source {
 
    Jdbc {
 
        url = "jdbc:mysql://XXX:3306"
 
        driver = "com.mysql.cj.jdbc.Driver"
 
        user = "root"
 
        password = "password"
 
        connection_check_timeout_sec = 100
 
        query = "select id, f_binary, f_blob, f_long_varbinary, f_longblob, f_tinyblob, f_varbinary, f_smallint, f_smallint_unsigned, f_mediumint, f_mediumint_unsigned, f_int, f_int_unsigned, f_integer, f_integer_unsigned, f_bigint, f_bigint_unsigned, f_numeric, f_decimal, f_float, f_double, f_double_precision, f_longtext, f_mediumtext, f_text, f_tinytext, f_varchar, f_date, f_datetime, f_time, f_timestamp from poc_kuke.batch_rds"
 
        partition_column = "id"
 
        partition_num = 40
 
        parallelism = 2
 
    }
 
}
 
 
 
 
sink {
 
    S3File {
 
        bucket = "XXX://XXX"
 
        tmp_path = "/tmp/seatunnel"
 
        path="/XXX"
 
        partition_dir_expression="${k0}=${v0}"
 
        is_partition_field_write_in_file=true
 
        file_name_expression="${transactionId}_${now}"
 
        file_format="text"
 
        field_delimiter="\t"
 
        row_delimiter="\n"
 
        filename_time_format="yyyy.MM.dd"
 
        is_enable_transaction=true
 
        hadoop_s3_properties {
 
           "fs.s3a.aws.credentials.provider" = "com.amazonaws.auth.InstanceProfileCredentialsProvider"
 
           "fs.s3a.endpoint" = "s3.cn-north-1.amazonaws.com.cn"
 
           "fs.s3a.buffer.dir" = "/"
 
           "fs.s3a.fast.upload.buffer" = "disk"
 
        }
 
    }
 
}
在固定 JVM 内存为 4G 的情况下,得到最佳的 Parallelism 数为 2。同时固定 Parallelism 数的情况下,得到最佳的内存大小为 2G,SeaTunnel 用时 353S(5.9 分钟) 完成同步。
我们在相同的内存和并发数上,测试 AirByte 完成相同数据同步的速度。

04




Airbyte任务配置


创建 Source-MYSQL
Destinations-S3



再创建 Connections MYSQL<>S3
同步模式选择 Full refresh|Append
在固定 JVM 内存为 2G 的情况下,Airbyte 用时 2h59m26s 完成同步。

05




结论


在对比了最佳的配置之后,我们针对不同的内存大小下,SeaTunnel 和 Airbyte 进行数据同步的情况进行了更加深入的对比。在相同的环境下,重复测试得到如下:
单位:秒
从上表可以看出,在相同测试环境下,同步计算引擎 SeaTunnel Engine 均比 Airbyte 同步数据的速度快将近 30倍,这得益于 SeaTunnel 优秀的架构和高效的代码逻辑。
Note:本次对比基于 Airbyte: Airbyte_v0.40.26,SeaTunnel: commit id f57b897,欢迎大家下载测试!
下载地址:
https://github.com/apache/incubator-seatunnel/releases/tag/2.3.0

Apache SeaTunnel


Apache SeaTunnel(Incubating) 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台

仓库地址: 
https://github.com/apache/incubator-seatunnel

网址:
https://seatunnel.apache.org/

Proposal:
https://cwiki.apache.org/confluence/display/INCUBATOR/SeaTunnelPro

Apache SeaTunnel(Incubating)  下载地址:
https://seatunnel.apache.org/download
 
衷心欢迎更多人加入!

我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!

我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!

提交问题和建议:
https://github.com/apache/incubator-seatunnel/issues

贡献代码:
https://github.com/apache/incubator-seatunnel/pulls

订阅社区开发邮件列表 : 
dev-subscribe@seatunnel.apache.org

开发邮件列表:
dev@seatunnel.apache.org

加入 Slack:
https://join.slack.com/t/apacheseatunnel/shared_invite/zt-1cmonqu2q-ljomD6bY1PQ~oOzfbxxXWQ

关注 Twitter: 
https://twitter.com/ASFSeaTunnel

往期推荐




2月25-26日!Apache SeaTunnel 亮相GAIDC开源集市,诚邀上海的小伙伴一起来玩!




18 行代码搞定异构数据源同步,以 OpenMLDB 为例




SeaTunnel 社区 Committer 迎新!



分享、点赞、在看,给个3连击呗!

文章转载自SeaTunnel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论