MySQL 数据实时入湖不用管运维?S3 Tables + Iceberg 两种方案手把手教你

张开发
2026/4/20 12:38:15 15 分钟阅读

分享文章

MySQL 数据实时入湖不用管运维?S3 Tables + Iceberg 两种方案手把手教你
MySQL 数据实时入湖不用管运维S3 Tables Iceberg 两种方案手把手教你做数据分析的都知道痛MySQL 里的业务数据想实时同步到数据湖Apache Iceberg 是好选择——ACID 事务、Schema Evolution、Time Travel 都支持。但问题来了小文件合并、快照清理、孤立文件删除这些运维活谁来干亚马逊云科技的 Amazon S3 Tables 就是来解决这个问题的——专为 Iceberg 优化的全托管存储自动帮你做 Compaction、清快照、删孤儿文件。你只管写数据运维的事它包了。这篇走两条路线把 MySQL 数据实时搬进 S3 TablesMSK Connect 方案和 Flink CDC 方案各有适用场景。Iceberg 数据湖的运维之痛先说为什么需要 S3 Tables。用 Iceberg 做数据湖实时写入场景下这些问题躲不掉小文件爆炸高频写入产生大量小文件查询性能直线下降。得定期跑 Spark 做rewrite_data_files快照堆积历史快照越来越多占存储空间。得写脚本做expire_snapshots孤立文件被删除的数据文件残留在存储里。得跑remove_orphan_filesManifest 膨胀元数据文件越来越大。得做rewrite_manifests这四件事每件都需要额外的计算资源和调度系统。折腾半天你的 Spark 集群一半时间在做运维而不是跑业务。S3 Tables 怎么解决的S3 Tables 是亚马逊云科技推出的 Iceberg 专属存储方案核心卖点查询性能提升 3 倍底层针对 Iceberg 格式做了存储优化10 万次/秒事务写入流式场景扛得住全托管表维护Compaction 约 3 分钟执行一次快照清理和孤立文件删除自动搞定REST Catalog 标准接口任何支持 REST Catalog 的引擎都能直接连一句话你把数据写进来剩下的 S3 Tables 全管了。方案一MSK Connect Iceberg Kafka Connect适合已有 Amazon MSK 集群的团队全托管不用管服务器。架构MySQL → Debezium(binlog捕获) → Amazon MSK → Iceberg Kafka Connect → S3 Tables核心步骤1. 创建 S3 Table Bucketaws s3tables create-table-bucket\--nameiceberg-data-${ACCOUNT_ID}\--regionus-east-12. 创建 Namespaceaws s3tables create-namespace\--table-bucket-arns3table-bucket-ARN\--namespacemydb3. 配置 Debezium MySQL Connector在 MSK Connect 创建 Connector关键配置connector.classio.debezium.connector.mysql.MySqlConnector tasks.max1 database.hostnamemysql-host database.port3306 database.userusername database.passwordpassword topic.prefixmydb database.include.listdatabase-name snapshot.modewhen_needed # Kafka Topic 自动创建 topic.creation.enabletrue topic.creation.default.replication.factor3 topic.creation.default.partitions34. 配置 S3 Tables Sink Connector核心这里是和传统 Glue Catalog 不一样的地方——用 REST Catalog SigV4 签名connector.classio.tabular.iceberg.connect.IcebergSinkConnector tasks.max2 # S3 Tables REST Catalog iceberg.catalog.typerest iceberg.catalog.urihttps://s3tables.us-east-1.amazonaws.com/iceberg iceberg.catalog.warehousetable-bucket-arn iceberg.catalog.io-implorg.apache.iceberg.aws.s3.S3FileIO # SigV4 签名必须 iceberg.catalog.rest.sigv4-enabledtrue iceberg.catalog.rest.signing-names3tables iceberg.catalog.rest.signing-regionus-east-1 # 自动建表 Schema 演进 iceberg.tables.auto-create-enabledtrue iceberg.tables.evolve-schema-enabledtrue # CDC 配置 iceberg.tables.cdc-field_cdc.op iceberg.tables.dynamic-enabledtrueMSK Connect 的好处零基础设施不用管 Kafka Connect 集群自动扩缩根据 CPU 自动调 Worker 数量断点续传Worker 挂了自动恢复offset 不丢省 70% 运维比自建 Kafka Connect 集群省事多了方案二Flink CDC Iceberg Dynamic Sink适合需要多表动态路由、复杂 ETL 逻辑的场景。架构MySQL → Flink CDC(binlog) → Flink SQL → Iceberg Dynamic Sink → S3 Tables核心代码1. 配置 Flink SQL CatalogCREATECATALOG s3tables_catalogWITH(typeiceberg,catalog-implorg.apache.iceberg.rest.RESTCatalog,urihttps://s3tables.us-east-1.amazonaws.com/iceberg,warehousetable-bucket-arn,rest.sigv4-enabledtrue,rest.signing-names3tables,rest.signing-regionus-east-1);2. 定义 MySQL CDC SourceCREATETABLEmysql_source(idINT,name STRING,amountDECIMAL(10,2),update_timeTIMESTAMP(3),PRIMARYKEY(id)NOTENFORCED)WITH(connectormysql-cdc,hostnamemysql-host,port3306,usernameflink_cdc,passwordpassword,database-namemydb,table-nameorders);3. 写入 S3 TablesINSERTINTOs3tables_catalog.mydb.ordersSELECT*FROMmysql_source;Flink 方案的优势多表动态路由一个 Flink 作业同步多张表Iceberg 1.10 Dynamic Sink 自动路由Schema Evolution源表加字段目标表自动跟着加复杂 ETL可以在同步过程中做数据清洗、转换Exactly-once配合 Flink Checkpoint 保证精确一次语义两种方案怎么选维度MSK ConnectFlink CDC适用场景已有 MSK简单同步需要 ETL、多表路由运维成本全托管几乎为零需管理 Flink 集群灵活性配置驱动代码驱动更灵活多表支持支持支持Dynamic Sink 更强Schema Evolution支持支持学习成本低配置即可中需懂 Flink SQL我的建议团队已有 MSK → 方案一30 分钟就能跑起来需要复杂数据处理 → 方案二Flink 的灵活性值得投入S3 Tables 自动维护实测配好数据同步后S3 Tables 的自动维护是真的香Compaction约 3 分钟执行一次默认合并到 512MB 大文件快照清理自动清过期快照孤立文件删除自动干掉没人引用的文件⚠️ 注意用了 S3 Tables 就不能再手动调rewrite_data_files了维护全交给平台。查询用 Amazon Athena 或 Amazon EMR 都行-- Athena 查询 S3 TablesSELECT*FROMs3tables_catalog.mydb.ordersWHEREupdate_timecurrent_timestamp-interval1hour;踩坑记录REST Catalog URI 别写错格式是https://s3tables.region.amazonaws.com/iceberg少个/iceberg就连不上SigV4 签名必须开signing-name是s3tables不是s3Iceberg V3 兼容性S3 Tables 支持 V3但 Athena 目前2026-03还不支持 V3 查询用 EMR 可以IAM 权限MSK Connect 的执行角色需要s3tables:*和s3:*权限亚马逊云科技官博原文https://aws.amazon.com/cn/blogs/china/s3-tables-solution-mysql-real-time-s3-tables/Amazon S3 Tables 文档https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.htmlIceberg Kafka Connecthttps://github.com/databricks/iceberg-kafka-connect

更多文章