首頁 > 軟體

Apache Pulsar結合Hudi構建Lakehouse方案分析

2022-03-31 13:08:20

1. 動機

Lakehouse最早由Databricks公司提出,其可作為低成本、直接存取雲端儲存並提供傳統DBMS管系統效能和ACID事務、版本、審計、索引、快取、查詢優化的資料管理系統,Lakehouse結合資料湖和資料倉儲的優點:包括資料湖的低成本儲存和開放資料格式存取,資料倉儲強大的管理和優化能力。Delta Lake,Apache Hudi和Apache Iceberg是三種構建Lakehouse的技術。

與此同時,Pulsar提供了一系列特性:包括分層儲存、流式解除安裝、列式解除安裝等,讓其成為一個可以統一批和事件流的儲存層。特別是分層儲存的特性,然Pulsar成為一個輕量級資料湖,但是Pulsar還是缺乏一些效能優化,比如索引,資料版本(在傳統DBMS管理系統中非常常見),引入列式解除安裝程式的目的是為了縮小效能差距,但是還不夠。

本提議嘗試將Apache Pulsar作為Lakehouse,該提案僅提供頂層設計,詳細設計和實現在後面的子提議中解決;

2. 分析

本部分將分解構建Lakehouse需要的關鍵特性,然後分析Pulsar是否滿足要求以及識別還有哪些差距。

Lakehouse有如下關鍵特性:

  • 事務支援:企業級Lakehouse中很多資料pipeliine會並行讀寫資料,支援ACID事務可以保證並行讀寫的一致性,特別是使用SQL;Delta Lake,Iceberg,Hudi三個資料湖框架都基於低成本的物件儲存實現了事務層,都支援事務。Pulsar在2.7.0版本後引入了事務支援,並且支援跨topic的事務;
  • Schema約束和治理:Lakehouse需要支援Schema的約束和演進,支援數倉型Schema正規化,如星型/雪花型Schema,另外系統應該能夠推理資料完整性,並且應該具有健壯的治理和稽核機制,上述三個系統都有該能力。Pulsar有內建的Schema註冊服務,它滿足Schema約束和治理的基本要求,但是可能仍有一些地方需要改進。
  • BI支援:Lakehouses可以直接在源資料上使用BI工具,這樣可以減少陳舊性,提高新鮮度,減少等待時間,並降低必須同時在資料湖和倉庫中操作兩個資料副本的成本。三個資料湖框架與Apache Spark的整合非常好,同時可以允許Redshift,Presto/Athena查詢源資料,Hudi社群也已經完成了對多引擎如Flink的支援。Pulsar暴露了分層儲存中的段以供直接存取,這樣可以與流行的資料處理引擎緊密整合。 但是Pulsar中的分層儲存本身在服務BI工作負載方面仍然存在效能差距,我們將在該提案中解決這些差距。
  • 儲存與計算分離:這意味著儲存和計算使用單獨的叢集,因此這些系統可以單獨水平無限擴容。三個框均支援儲存與計算分離。Pulsar使用了儲存與計算分離的多層體系結構部署。
  • 開放性:使用開放和標準化的資料格式,如Parquet,並且它們提供了API,因此各種工具和引擎(包括機器學習和Python / R庫)可以"直接"有效地存取資料,三個框架支援Parquet格式,Iceberg還支援ORC格式,對於ORC格式Hudi社群正在支援中。Pulsar還不支援任何開放格式,列存解除安裝支援Parquet格式。
  • 支援從非結構化資料到結構化資料的多種資料型別:Lakehouse可用於儲存,優化,分析和存取許多新資料應用程式所需的資料型別,包括影象,視訊,音訊,半結構化資料和文字。尚不清楚Delta,Iceberg,Hudi如何支援這一點。Pulsar支援各種型別資料。
  • 支援各種工作負載:包括資料科學,機器學習以及SQL和分析。 可能需要多種工具來支援所有這些工作負載,但它們都依賴於同一資料儲存庫。三個框架與Spark緊密結合,Spark提供了廣泛的工具選擇。Pulsar也與Spark有著緊密結合。
  • 端到端流:實時報告是許多企業的常態,對流的支援消除了對專門用於服務實時資料應用程式的單獨系統的需求,Delta Lake和Hudi通過變更紀錄檔提供了流功能。 但這不是真正的“流”。Pulsar是一個真正的流系統。

可以看到Pulsar滿足構建Lakehouse的所有條件。然而現在的分層儲存有很大的效能差距,例如:

  • Pulsar並不以開放和標準的格式儲存資料,如Parquet;
  • Pulsar不會為解除安裝的資料部署任何索引機制;
  • Plusar不支援高效的Upserts;

這裡旨在解決Pulsar儲存層的效能問題,使Pulsar能作為Lakehouse。

3. 當前方案

圖1展示了當前Pulsar流的儲存佈局。

  • Pulsar在ZooKeeper中儲存了段(segment)後設資料;
  • 最新的段儲存在Apache BookKeeper中(更快地儲存層)
  • 舊的段從Apache BookKeeper解除安裝到分層儲存(便宜的儲存層)。 解除安裝的段的後設資料仍保留在Zookeeper中,參照的是分層儲存中解除安裝的物件。

當前的方案有一些缺點:

  • 它不使用任何開放式儲存格式來儲存解除安裝的資料。 這意味著很難與更廣泛的生態系統整合。
  • 它將所有後設資料資訊保留在ZooKeeper中,這可能會限制可伸縮性。

4. 新的Lakehouse儲存方案

新方案建議在分層儲存中使用Lakehouse儲存解除安裝的資料。該提案建議使用Apache Hudi作為Lakehouse儲存,原因如下:

  • 雲提供商在Apache Hudi上提供了很好的支援。
  • Apache Hudi已經作為頂級專案畢業。
  • Apache Hudi同時支援Spark和Flink多引擎。同時在中國有一個相當活躍的社群。

4.1 新的儲存佈局

圖2展示了Pulsar topic新的佈局。

  • 最新片段(未解除安裝片段)的後設資料儲存在ZooKeeper中。
  • 最新片段(未解除安裝片段)的資料儲存在BookKeeper中。
  • 解除安裝段的後設資料和資料直接儲存在分層儲存中。 因為它是僅追加流。 我們不必使用像Apache Hudi這樣的Lakehouse儲存庫。 但是如果我們也將後設資料儲存在分層儲存中,則使用Lakehouse儲存庫來確保ACID更有意義。

4.2 支援高效Upserts

Pulsar不直接支援upsert。它通過主題(topic)壓縮支援upsert。 但是當前的主題壓縮方法既不可延伸,也不高效。

  • 主題壓縮在代理內(broker)完成。 它無法支援大量資料的插入,特別是在資料集很大的情況下。
  • 主題壓縮不支援將資料儲存在分層儲存中。

為了支援高效且可延伸的Upsert,該提案建議使用Apache Hudi將壓縮後的資料儲存在分層儲存中。 圖3展示了使用Apache Hudi支援主題壓縮中的有效upserts的方法。

該想法是實現主題壓縮服務。主題壓縮服務可以作為單獨的服務(即Pulsar函數)執行以壓縮主題。

  • 代理向壓縮服務發出主題壓縮請求。
  • 壓縮服務接收壓縮請求,並讀取訊息並將其向上插入到Hudi表中。
  • 完成upsert之後,將主題壓縮遊標前進到它壓縮的最後一條訊息。

主題壓縮遊標將參照位置的後設資料儲存在儲存Hudi表的分層儲存中。

4.3 將Hudi表當做Pulsar Topic

Hudi會在不同的即時時間維護對錶執行的所有操作的時間軸,這有助於提供表的即時檢視,同時還有效地支援按_arrival_順序進行資料檢索。Hudi支援從表中增量拉取變更。我們可以支援通過Hudi表備份的_ReadOnly_主題。這允許應用程式從Pulsar代理流式傳輸Hudi表的變更。圖4展示了這個想法。

4.4 可延伸的後設資料管理

當我們開始將所有資料儲存在分層儲存中時,該提案建議不儲存解除安裝或壓縮資料的後設資料,而只依賴分層儲存來儲存解除安裝或壓縮資料的後設資料。

該提案提議在以下目錄佈局中組織解除安裝和壓縮的資料。

- <tenant>/
  - <namespace>/
    - <topics>/
      - segments/ <= Use Hudi to store the list of segments to guarantee ACID
        - segment_<segment-id>
        - ...
      - cursors/
        - <cursor A>/ <= Use Hudi to store the compacted table for cursor A.
        - <cursor B>/ <= ...

5. 參照

[1] Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics. http://cidrdb.org/cidr2021/papers/cidr2021_paper17.pdf

[2] What is a Lakehouse? https://databricks.com/blog/2020/01/30/what-is-a-data-lakehouse.html

[3] Diving Deep into the inner workings of the Lakehouse and Delta Lake. https://databricks.com/blog/2020/09/10/diving-deep-into-the-inner-workings-of-the-lakehouse-and-delta-lake.html

以上就是Apache Pulsar結合Hudi構建Lakehouse方案分析的詳細內容,更多關於Apache Pulsar結合Hudi構建Lakehouse的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com