AutoMQx阿里雲OSS:Kafka寫Iceberg資料入湖最佳實踐

背   景
在數字化轉型程序中,使用者互動行為產生的多維度資料已成為企業重要的戰略資產。以短影片平臺為例,基於使用者點贊事件的即時推薦演算法可顯著提升使用者活躍度與平臺粘性。這類即時資料通常透過 Apache Kafka 流處理平臺進行傳輸,藉助其扇出(Fanout)機制實現多業務系統的並行消費。除此之外,企業的資料應用需求具有雙重屬性:既需要即時流處理能力,又需依託歷史資料進行多維聚合分析。大資料分析技術歷經多年演進,已從傳統資料倉庫架構發展為現代資料湖體系。
在資料湖技術生態中,Apache Iceberg 憑藉其開放性設計已確立事實標準地位。該技術不僅獲得全球企業廣泛採納,更構建起包含 Apache Spark、Amazon Athena、Presto 等主流計算引擎的完善生態圈。在 2024 年 AWS re:Invent 大會上,基於 Iceberg 格式的 S3 Tables 服務正式釋出,標誌著雲原生資料湖解決方案進入新階段。
作為開放資料湖格式規範,Iceberg 透過統一的資料讀寫介面(Specification)實現了計算引擎的相容性保障。但值得注意的是,不同的資料寫入模式會對系統產生顯著影響:在查詢效能層面可能產生顯著效率差異,同時運維複雜度也呈現指數級變化。
本文將從三個維度展開論述:首先解析 Iceberg 的技術優勢及其成為行業標準的內在邏輯,繼而詳解最佳實踐框架下的資料入湖方法論,最終重點介紹由 AutoMQ 基於阿里雲 OSS 實現的 Kafka Topic 即時資料入湖方案——Table Topic。
Iceberg 的優勢
ACID 事務
在併發控制機制方面,Iceberg 採用基於快照隔離的樂觀併發控制(Optimistic Concurrency Control)實現 ACID 事務保障。該機制允許多個寫入事務與讀取事務並行執行,其核心設計假設事務衝突機率較低:在事務提交階段透過版本號校驗完成衝突檢測,而非傳統悲觀鎖的預鎖定方式。這種設計有效降低鎖爭用,提升系統吞吐量。
具體寫入流程包含以下關鍵步驟:1) 將增量資料寫入新的資料檔案(DataFile)及刪除檔案(DeleteFile);2) 生成新版本快照(Snapshot);3) 建立關聯的元資料檔案(MetadataFile);4) 透過 CAS(Compare and Swap)原子操作更新 Catalog 中的元資料指標指向新版本。只有當元資料指標更新成功時,本次寫入才被視為有效提交。
Iceberg 的讀寫隔離機制建立在多快照之上:每個讀取操作訪問的是特定時間點的快照狀態,而寫入操作始終作用於新生成的資料檔案並建立獨立快照。由於快照的不可變性,讀取操作無需任何鎖同步機制即可實現:a) 不同 Reader 之間的隔離保障;b) Reader 與 Writer 的讀寫隔離。這種設計使得查詢效能不會因寫入操作的存在而出現劣化。
Partition 演進
在資料湖架構演進歷程中,分割槽策略動態調整始終是核心挑戰之一。傳統資料湖方案實現分割槽最佳化時,需透過全表資料重分佈完成物理儲存結構調整,這在 PB 級資料集場景下會產生極高的計算與儲存成本。
Iceberg 透過邏輯層 – 物理層解耦設計創新性解決了這一難題:其分割槽策略作為元資料層的邏輯抽象存在,與底層資料儲存路徑完全解耦。當進行分割槽策略調整時,歷史資料保持原有物理分佈不變,僅新寫入資料按更新後的分割槽規則組織,從而實現零資料遷移的分割槽演進。該機制使得分割槽最佳化操作從小時級降至秒級,資源消耗幾乎為零。
更值得關注的是 Iceberg 的 Hidden Partitioning 特性:查詢層無需顯式指定分割槽鍵,計算引擎透過元資料自動完成資料檔案過濾。這意味著業務系統可在不影響現有查詢語句的前提下,持續最佳化資料分佈策略,實現查詢邏輯與儲存架構的雙向解耦。
Upsert
Iceberg 支援 copy-on-write (COW)和 merge-on-read (MOR)兩種更新方式。COW 會將變更行所屬的資料檔案整個重寫一遍生成新的檔案,即使只更新了其中一行,該方式的查詢效率最高,但需要付出較大的寫入成本。而 MOR 為高頻資料更新提供了更好的寫入效能。當一行資料更新時,Writer 將要更新的資料特徵到 DeleteFile 中,標記之前的資料被刪除了,並且將更新的資料寫入到 DataFile 中,透過該方式 MOR 將行更新的寫入效率做到和追加寫入保持一致。在查詢時,計算引擎再將 DeleteFile 中的記錄作為墓碑遮蔽舊的資料,完成讀取時的結果合併。
Schema 演進
應用迭代的同時,底層的資料也會跟著演進。Iceberg 的 Schema 演進支援 Add、Drop、Rename、Update 和 Reorder,並且與 Partition 演進類似,在 Schema 演進的時候,所有的歷史 DataFile 都不需要被重寫。
Iceberg 資料入湖最佳實踐
檔案管理
  • 避免高頻 Commit:Iceberg 每次 Commit 都會生成新的 Snapshot,這些 Snapshot 資訊都會維護在 MetadataFile 中。高頻率 Commit 不更僅容易觸發 Commit 衝突,而且會造成 MetadataFile 膨脹,導致儲存和查詢成本增加。建議控制 Commit 間隔在 1min 以上,並且由中心化的 Coordinator 進行提交。
  • 避免生成大量小檔案:每個 DataFile 對應一個 ManifestEntry,小檔案數量多會導致 ManifestFile 體積激增,進而導致元資料儲存成本上升和查詢計劃生成速度下降。物件儲存是按照 API 呼叫次數計費,過多的小檔案也會導致查詢時 API 的呼叫成本上升。建議透過資料攢批寫入來減少小檔案的生成,後期也可以透過 Compaction 來將小檔案合併。
Partition
採取合適的 Partition 策略:
  • 加速查詢:將高頻篩選的欄位(如時間、地區)優先作為分割槽鍵,在查詢時透過分割槽裁剪減少掃描的資料量。
  • 成本:在查詢效率和儲存成本之間平衡。分割槽粒度過細會產生過多小檔案,導致儲存效率下降。
Table Topic:阿里雲上
即時資料入湖的最佳選擇
概覽
AutoMQ Enterprise(1.4.0 版本) Table Topic 在 Kafka Topic 的基礎上,將流格式儲存進一步擴充套件成 Iceberg 表格式儲存。資料的生產者仍舊使用 Kafka 協議向 AutoMQ 寫入資料,資料可以是資料庫 BinLog、ClickStream 和 IoT 等資料。AutoMQ 首先會將寫進來的資料低延遲寫入到流格式儲存,後臺經過攢批後將流格式的資料轉換成 Iceberg 表格式的資料。至此 AutoMQ 透過 Iceberg 將 Kafka 裡面的流資料以表格式共享給下游的資料湖計算引擎。企業無需再去維護複雜的 ETL 任務,僅需要使用 Kafka API 向 AutoMQ 寫入資料,AutoMQ 會無感將資料入湖。資料產生即就緒,業務創新零等待。
極簡 Data Ingest
上游的資料來源使用的是 Kafka 協議,而不是直接面向的的 Iceberg。這麼做有如下 2 個好處:
  • 資料來源生態:企業現有的 Kafka 生產者(如 Flink CDC、Logstash、Debezium)可直接接入,節省定製化開發成本。例如 MySQL 的 BINLOG 透過 Debezium 寫入 Table Topic 後,AutoMQ 自動完成 Avro 到 Iceberg Schema 的對映與轉換
  • 低延遲 & 高吞吐:資料進入 AutoMQ 後首先會儲存到 Stream Storage,AutoMQ 的 Stream Storage 具有毫秒級延遲和 GB 級吞吐的特徵,因此企業可以獲得低延遲和高吞吐的資料入湖能力。
表自動建立 & 演進
AutoMQ 透過深度整合 Kafka Schema 構建自動化資料治理閉環,從根本上解決傳統入湖流程中的 Schema 管理頑疾。其設計利用 Kafka 原生的 Schema 註冊機制作為資料質量閘門:當生產者傳送資料時,Schema 驗證層會即時攔截不符合預定義結構的髒資料(如欄位型別錯誤、必填欄位缺失等),將資料質量問題阻攔在入湖起點。
當上遊業務系統發生 Schema 變更(如 MySQL 源表新增「使用者等級」欄位),AutoMQ 能夠即時感知 Kafka 訊息中的 Schema 版本迭代,自動完成 Iceberg 表結構的協同演進,同時保持資料持續寫入不中斷。這一過程完全無需人工介入,徹底消除了傳統流程中多系統間 Schema 手動對齊的操作風險。
相較於傳統架構中 Flink/Spark 任務與表結構的強耦合(每個同步任務需硬編碼目標表 Schema),AutoMQ 實現了 Schema 管理的正規化轉移——將原先分散在資料管道指令碼、數倉元資料庫、流計算引擎等多處的 Schema 定義收斂為 Kafka Schema 單一源頭。這種中心化管控模式不僅減少了的元資料維護工作量,更確保了從即時接入到湖倉儲存的全鏈路 Schema 一致性。
資料分割槽
AutoMQ 為了提升查詢時的資料過濾效率,支援同時對多個 Columns 進行分割槽,支援 year、month、day、hour、bucket 和 truncate 分割槽轉換函式。
Properties# config example#The partition fields of the table.automq.table.topic.partition.by=[bucket(user_name), month(create_timestamp)]
CDC
AutoMQ 支援資料以 Upsert 模式進行同步,AutoMQ 會根據設定的 Table 主鍵和 Record 指定的 CDC 操作來進行增刪改。當 AutoMQ 接收到 Update 操作的 Record 時,AutoMQ 會首先將主鍵以 EqualityDelete 寫入到 DeleteFile 中,標記歷史記錄失效,然後再在 DataFile 裡追加更新的記錄。
透過 AutoMQ Table Topic,企業可以將資料庫的 BinLog 寫入到 AutoMQ,AutoMQ 會將 BinLog 資料透過 Upsert 寫入到 Iceberg 表。資料庫服務於線上 OLTP 業務,Iceberg 服務於 OLAP 資料分析,透過 AutoMQ Table Topic 可以保持兩者之間保持資料分鐘級的新鮮度。
Properties# config example# The primary key, comma-separated list of columns that identify a row in tables.automq.table.topic.id.columns=[email]# The name of the field containing the CDC operation, I, U, or Dautomq.table.topic.cdc.field=ops
免任務管理
AutoMQ 不像使用 Spark / Flink / Connector 等同步元件需要編寫同步任務指令碼和運維同步任務。使用者僅僅需要在建立 Topic 時開啟 Table Topic 開關。
Properties# The configuration controls whether enable table topicautomq.table.topic.enable=true
AutoMQ 的 Topic Topic 能力內建在程序中,主要模組為 Coordinator 和 Worker:
  • Coordinator:管理 Table 同步進度和中心化提交。Coordinator 每個 Table Topic 獨立佔有一個,繫結到 Topic 的分割槽 0。Coordinator 根據使用者設定的提交間隔觸發提交,避免了每個 Worker 獨立提交導致的提交衝突和元資料膨脹,降低儲存成本和提升查詢效能。
  • Wokrer:負責將 Kafka Record 轉換成 Parquet 資料檔案上傳到阿里雲物件儲存 OSS。Table Topic 每一個分割槽在同進程內都有由對應的 Worker 繫結負責。Coordinator 和 Worker 與分割槽繫結,在程序中內建具有以下好處:
  • 運維簡單:無需額外維護一套元件,只需要關心 AutoMQ 叢集的生命週期,無需管理同步任務。
  • 同步伸縮:AutoMQ 的訊息寫入能力與 Table Topic 同步能力同步匹配伸縮。當業務高峰來臨,只需要根據流量上漲比例擴容 AutoMQ 叢集即可。
零跨 AZ 流量
在傳統數倉同步架構中,採用 Spark、Flink 或各類 Connector 工具進行資料傳輸時,其分割槽排程機制通常存在顯著的雲環境適配性問題。由於 Worker 節點或 Executor 資源的分配策略未與雲服務商可用區(AZ)拓撲結構對齊,導致同一分割槽的讀寫操作頻繁跨越不同物理區域。這種設計缺陷在 AWS、GCP 等按流量計費的雲平臺中尤為突出(阿里雲不會對跨 AZ 流量收取費用)——據統計,跨可用區資料傳輸成本往往佔據企業大資料基礎設施總支出的 80% 以上。
針對這一行業痛點,AutoMQ 提出了程序內繫結排程策略。透過將 Worker 節點與特定可用區的資料分割槽進行深度耦合,系統實現了計算資源與儲存資源的拓撲感知。資料流轉時 Worker 無需透過複雜網路路徑獲取資料,而是以本地方法呼叫的方式直接從記憶體緩衝區捕獲即時寫入的資料流,隨後透過上傳至阿里雲 OSS 儲存桶。這種資料傳輸機制可減少 90% 以上的跨區頻寬消耗,為企業構建出兼具高效能與成本效益的雲原生資料管道。
總   結
本文系統解析了 Apache Iceberg 作為雲原生資料湖核心技術的核心優勢與最佳實踐。Iceberg 透過快照隔離實現高效能 ACID 事務,藉助邏輯 – 物理解耦的分割槽演進機制實現零成本儲存最佳化,並支援 COW/MOR 兩種更新模式平衡查詢與寫入效率。在資料入湖實踐中,需關注高頻提交規避與小檔案治理,結合動態分割槽策略提升查詢效能。針對即時資料入湖挑戰,AutoMQ Table Topic 創新性地融合 Kafka 協議與 Iceberg 表格式,透過流批自動轉換、Schema 自適配及程序內繫結排程實現分鐘級資料新鮮度。其免 ETL 任務設計顯著降低運維複雜度,獨有的拓撲感知機制更減少 90% 跨可用區流量成本,為企業構建高吞吐、低延遲、低成本的一體化資料湖方案提供了新正規化。阿里雲 OSS 的 AZ 間流量免費,提供有競爭力的 PUT 和 GET 類 API 價格,和每月的 API 免費額度,可有效降低雲上 AutoMQ 方案的執行成本。
今日好文推薦
“抄襲”程式碼,到底是 CTO 的鍋還是創始人的鍋?!這事兒已經撕3天了
分散式系統程式設計已停滯?!
Curl 之父:我是如何枕著18萬行C程式碼還能安穩入睡的
剛剛,DeepSeek 突然公佈成本利潤率高達545%!做 AI Infra 的該慌了?!

相關文章