簡述
在業務數據快速膨脹的今天,企業對 低成本存儲 與 實時查詢分析能力 的需求愈發迫切。
本文將帶你實戰構建一條 MySQL 到 Iceberg 的數據鏈路,借助 CloudCanal 快速完成數據遷移與同步,并使用 StarRocks 完成數據查詢等操作,構建涵蓋 關系型數據庫服務、實時數據分析、大數據存取 的全棧數據架構。
Iceberg 簡介
Iceberg 是什么?
Iceberg 是一種開放的數據表格式,包含 Catalog 和 數據存儲 兩種子概念。
Catalog 可簡單理解為對數據的結構描述,如表列表、對應的表屬性、包含的列、列類型、列長度等信息,這也是之所以為表格的原因。
數據存儲 即以上 Catalog 數據 以及 實際業務數據 所組成的文件存放位置。
Iceberg 有什么特點?
Iceberg 架構開放,定義了 Catalog 、文件格式、數據存儲、數據訪問 等標準,從而被眾多第三方組件實現和支持。
- Catalog: AWS Glue、Hive、Nessie、Jdbc,或者專用的 Catalog 服務通過 Rest 方式讀寫。
- 數據文件格式: Parquet、ORC、Avro 等。
- 數據存儲: AWS S3、Azure Blob Storage、MinIO、HDFS、Posix FS 等各類云存儲或本地存儲。
- 數據訪問: 可通過類似 StarRocks、Doris、ClickHouse 等實時數倉,Spark、Flink、Hive 等流/批計算引擎檢索、分析、操作數據和結構。
除了 開放 這一大特點,Iceberg 同時在 超大數據量存儲 和 準實時增、刪、改 之間實現了平衡。
下表從數據容量、增量實時性、事務支持、存儲成本、架構開放度 5 個緯度,對各類數據庫進行對比(僅作參考,歡迎討論):
數據庫種類 | 關系型數據庫 | 實時數據倉庫 | 傳統大數據 | 數據湖 |
---|---|---|---|---|
數據容量 | 幾 TB 級別 | 百 TB 級別 | PB 級別 | PB 級別 |
增量實時性 | 業務級別增量寫入,延遲毫秒級別,萬級別 QPS | 業務級別增量寫入,延遲秒到分鐘級別,千級別 QPS | 運維級別增量寫入,延遲小時到天級別,個位數 QPS | 業務級別增量寫入,延遲分鐘級別,個位數 QPS(攢批) |
事務支持 | ACID 強一致 | ACID 強一致或最終一致 | 否 | 否 |
存儲成本 | 高 | 高或很高 | 很低 | 低 |
架構開放度 | 低 | 中(存算分離) | 否 | 高 |
從上表來看,使用 Iceberg,即可得到一個 低成本、超大數據存儲容量、豐富數據檢索分析工具的數據庫,從某種意義上來說,可以作為傳統大數據系統的換代升級產品。
當然得益于其架構的開放性,還可以不斷探索更多的數據使用場景。
CloudCanal 技術亮點
典型 Catalog 和存儲支持
CloudCanal 支持 Iceberg 3 種 Catalog 和 2 種存儲方式,搭配關系為
- AWS Glue + AWS S3
- Nessie + MinIO / AWS S3
- Rest + MinIO / AWS S3
對于全棧數據上云,AWS RDS + EC2 部署 CloudCanal + AWS Glue + AWS S3 即可構建。
對于全私有數據,自建關系型數據庫 + 虛擬機部署 CloudCanal + Nessis/Rest Catalog + MinIO 則可快速達成。
數據遷移同步一體化
對于數據同步開始之前的繁重工作,CloudCanal 一直嘗試利用自身的數據庫知識,實現結構準備、歷史數據遷移全自動化。
對于 Iceberg 這類非傳統意義數據庫交互的產品,CloudCanal 也實現了數據遷移同步的自動化流程,包括結構定義轉換、類型映射、約束清理、類型長度適配等工作,都可在 CloudCanal 一站式完成。
全棧數據服務架構總覽
本次構建的數據服務鏈路包含 4 大組件:
MySQL → CloudCanal → Iceberg (Glue + S3) → StarRocks
- MySQL: 關系型數據庫,源數據產生地。
- CloudCanal: 數據遷移同步平臺,支持結構轉換、類型映射、全量+增量同步。
- Iceberg (AWS Glue + S3): 數據湖存儲 + 元數據管理。
- StarRocks: 支持實時查詢的分析型數據庫,用于數據服務出口。
操作示例
前置準備
- 下載安裝 CloudCanal 私有部署版本。
- 準備數據源:
- 源端:自建 MySQL
- 目標端:Iceberg (AWS Glue + S3)
添加數據源
- 登錄 CloudCanal 平臺,點擊 數據源管理 > 添加數據源,添加 2 個數據源。
- 添加 Iceberg 所要填寫的信息如下(
<>
內按實際情況替換)。
- 網絡地址:本例填寫 AWS Glue 服務地址。
glue.<aws_glue_region_code>.amazonaws.com
- 版本:保持默認值即可。
- 描述:用于辨別實例用途。
- 額外參數:
- httpsEnabled:打開開關,即設置為 true。
- catalogName:設置一個意義明確的名字,如 glue_<biz_name>_catalog。
- catalogType:設置為 GLUE。
- catalogWarehouse:元數據和數據文件最終存放位置,如 s3://<biz_name>_iceberg。
- catalogProps:參考如下
{"io-impl": "org.apache.iceberg.aws.s3.S3FileIO","s3.endpoint": "https://s3.<aws_s3_region_code>.amazonaws.com","s3.access-key-id": "<aws_s3_iam_user_access_key>","s3.secret-access-key": "<aws_s3_iam_user_secret_key>","s3.path-style-access": "true","client.region": "<aws_s3_region>","client.credentials-provider.glue.access-key-id": "<aws_glue_iam_user_access_key>","client.credentials-provider.glue.secret-access-key": "<aws_glue_iam_user_secret_key>","client.credentials-provider": "com.amazonaws.glue.catalog.credentials.GlueAwsCredentialsProvider" }
創建任務
-
點擊 同步任務 > 創建任務。
-
選擇源和目標實例,并分別點擊 測試連接。其中 Iceberg 數據源 結構遷移屬性配置 推薦如下:
{"format-version": "2","parquet.compression": "snappy","iceberg.write.format": "parquet","write.metadata.delete-after-commit.enabled": "true","write.metadata.previous-versions-max": "3","write.update.mode": "merge-on-read","write.delete.mode": "merge-on-read","write.merge.mode": "merge-on-read","write.distribution-mode": "hash","write.object-storage.enabled": "true","write.spark.accept-any-schema": "true" }
-
在 功能配置 頁面,選擇 增量同步,并勾選 全量初始化。
-
在 表&action過濾 頁面,選擇需要遷移同步的表,可同時選擇多張。
-
在 數據處理 頁面,保持默認配置。
-
在 創建確認 頁面,點擊 創建任務,開始運行。
驗證數據(接入 StarRocks)
-
造增刪改數據。
-
停止造數據。
-
創建一個按量 Aliyun EMR for StarRocks,添加 AWS Glue 的 Iceberg Catalog 并查詢。
-
StarRocks 中添加 External Catalog 并設置查詢環境。
CREATE EXTERNAL CATALOG glue_test PROPERTIES ("type" = "iceberg","iceberg.catalog.type" = "glue","aws.glue.use_instance_profile" = "false","aws.glue.access_key" = "<aws_glue_iam_user_access_key>","aws.glue.secret_key" = "<aws_glue_iam_user_secret_key>","aws.glue.region" = "ap-southeast-1","aws.s3.use_instance_profile" = "false","aws.s3.access_key" = "<aws_s3_iam_user_access_key>","aws.s3.secret_key" = "<aws_s3_iam_user_secret_key>","aws.s3.region" = "ap-southeast-1" )set CATALOG glue_test;set global new_planner_optimize_timeout=30000;
-
MySQL 數據量
-
Iceberg 數據量
總結
通過 CloudCanal,你可以輕松打通 MySQL 與 Iceberg 之間的實時同步通道,并結合 StarRocks 實現高效查詢,實現實時數據服務閉環,打造真正的全棧數據結構解決方案。