簡化流數據攝取到三角洲湖
大多數商業決策時間敏感,需要利用實時數據從不同的來源。采購的關鍵是在正確的時間正確的數據能夠及時決策。時間敏感數據來源從物聯網傳感器分布在不同的技術,社會媒體,點擊流,變化數據捕獲從數據庫等。為了從這些數據獲得關鍵的見解,首先必須攝取到lakehouse。這些數據的關鍵特征是連續到達一個無界的時尚又名流媒體。在這個博客中,我們將關注如何攝取到lakehouse流數據。
高級數據攝入流
流來自不同數據源的數據舉行到消息總線係統或雲對象存儲在攝入lakehouse之前。的數據暫存區域被Apache火花結構化流(SS)管道,寫數據到lakehouse。有兩個著名的登台環境——雲對象存儲和消息總線係統,討論如下。
- 雲對象存儲是一個安全、可靠和可伸縮的存儲和雲中的持久層。Amazon S3, Azure ADLS / Blob存儲或者穀歌雲存儲(GCS)是廣泛使用的對象存儲在雲端的例子。通常,事件捕獲到一個批處理和存儲為文件在雲對象存儲,這些文件需要攝取在近乎實時的到來。示例用例要求近乎實時的數據攝入從雲存儲包括電信呼叫數據記錄、物聯網事件日誌等。
- 消息總線係統提供一個鬆散耦合的數據緩衝區,發布者/訂閱者模型。Apache卡夫卡,Apache脈衝星、Azure EventHub GCP Pub / Sub AWS運動和消息總線係統的幾個例子在開源和雲。消息總線係統是適合於實時事件捕獲,因為他們保證低發布延遲和大扇出支持多個消費者。一些示例應用程序使用消息總線因為將點擊流,信用卡欺詐檢測,等。這些應用程序,數據需要實時攝取,以便下遊加工可以立即提供見解。
高級體係結構的流數據攝取到lakehouse從這兩個關鍵數據暫存環境如圖1所示。
如圖,來自各種源係統的數據第一次登台的地區之一的土地在對象存儲或消息總線。這個數據攝取到lakehouse通過流連接器為對象存儲消息巴士或汽車加載程序。三角洲生活表(DLT)是一個簡單的聲明性方法用於創建可靠的數據管道和全麵管理底層基礎設施規模的批處理和流媒體數據。也是基於火花結構化流並沒有涵蓋在這個博客。在隨後的部分中,我們將詳細描述所涉及的一些挑戰而攝取流數據從這些來源。
數據攝取對象存儲:自動加載程序
通常,文件與批處理相關數據攝入。然而,連續攝入來自不同數據源的數據到基於雲的對象存儲文件的形式往往是一種常見的模式。通常情況下,這種模式更適合用例需要實時處理,預計延遲可以在附近一係列的分鍾。此外,非功能性需求,如完全一次處理,再處理失敗的攝入工作,時間旅行,需要和模式漂移。
說明的挑戰從雲存儲對象加載到lakehouse,讓我們考慮一個信用卡支付需要實時處理係統,改善客戶體驗和檢測欺詐付款。通常情況下,從不同的支付通道是批處理事務對象存儲成文件。這些文件需要攝取到下遊lakehouse作進一步處理。隨著這些付款交易,我們需要確保他們完全一旦規定再加工處理失敗的事務,沒有重複。如果這是在AWS雲處理,這需要一個複雜的體係結構,包括:
- 跟蹤付款事務文件可伸縮的方式登陸Amazon S3使用Amazon SQS(簡單隊列服務)通知
- 亞馬遜Lambda函數來檢索從Amazon SQS,引發下遊加工工作
- 審核支付事務文件使用的狀態控製表
的關鍵挑戰是跟蹤降落在對象存儲大量文件,使完全一旦處理這些文件中的數據和管理不同模式從不同的支付渠道。
自動加載程序簡化了流數據攝入增量處理新的數據文件所到達雲對象存儲和它不需要用戶編寫一個自定義應用程序。它跟蹤文件處理到目前為止,通過維護一個內部狀態。在失敗的情況下,它使用狀態從過去開始處理文件。此外,如果需要重放或再加工數據,它提供了一個選項來處理現有的目錄中的文件。自動裝載器的主要優點是:
- 處理數十億的文件的能力
- 異步回填使用計算資源的最佳利用
- 優化目錄清單來提高性能
- 支持模式推理和漂移的處理模式
- 成本有效的文件通知文件利用自動通知服務
自動加載器是如何工作的呢?
自動加載程序支持兩種模式檢測新文件:文件通知和目錄清單。
文件的通知:自動加載程序可以自動建立一個事件隊列服務,訂閱通知和文件從輸入目錄。文件通知模式更好的性能和可伸縮的輸入目錄與大量的文件,但需要額外的雲權限。此選項時更好的文件不抵達詞法順序和不再需要顯式設置隊列和通知。啟用這個模式,你需要設置的選項cloudFiles.useNotifications
為true和提供必要的權限來創建雲資源。看到更多的細節關於文件通知在這裏。
目錄清單:確定新文件的另一種方法是通過清單中輸入目錄配置自動加載程序。目錄清單模式允許您啟動自動加載程序流沒有任何額外的權限配置除了訪問您的數據。從磚9.1運行時起,自動加載程序可以自動檢測文件是否與詞法順序到達,雲存儲並顯著降低API調用的數量需要檢測新文件。在默認模式,它觸發完整的目錄清單後每七個增量目錄清單。然而,完整的目錄列表的頻率可以調整通過設置配置cloudFiles.backfillInterval
。可以顯式地啟用或禁用清單通過設置配置增量cloudFiles.useIncrementalListing
。顯式地啟用這個配置時,自動加載程序不會觸發完整的目錄清單。看到更多的目錄列表的詳細信息在這裏。
隨著新文件被發現,他們的元數據保存在一個可伸縮的鍵值存儲(RocksDB)的檢查點位置自動加載器管道。這是國家跟蹤文件的處理。管道都可以執行包含並發現有文件和目錄上的回填過程新文件被發現通過文件通知。
從消息總線數據攝入
流數據通常是無限的。這些數據是在消息公交車作為一個緩衝和提供異步的通信方法在多個生產者可以寫入和許多消費者可以讀取。消息總線是廣泛用於低延遲用例如欺詐檢測、金融資產交易,和遊戲。受歡迎的消息總線服務包括Apache卡夫卡,Apache脈衝星,Azure EventHubs,亞馬遜雲Pub / Sub運動和穀歌。然而,連續數據攝入帶來了挑戰,如可伸縮性、彈性和容錯。
攝入的消息總線lakehouse,顯式火花結構化流實例化適當的源(SS)管道連接器的消息總線和水槽lakehouse連接器。在這種情況下的關鍵挑戰是吞吐量和容錯。
讓我們討論一些常見的攝入模式從這些來源。雖然消息總線是一個不錯的選擇,實時處理用例,大多數應用程序需要一個平衡的設計之間的延遲,吞吐量,容錯需求和成本。我們將通過這些設計選擇:
延遲:實現低延遲並不總是更好。而你可以通過選擇合適的延遲,降低成本的準確性和成本的權衡。火花結構化流流程數據增量控製觸發器定義流媒體數據處理的時機。低延遲的火花結構化流工作實現觸發間隔較低。這是建議配置結構化流觸發間隔平衡的延遲需求和數據到達率。如果你指定一個非常低的觸發時間間隔,該係統可能進行不必要的檢查,看看新數據到來。
火花結構化流提供了三個觸發類型:
默認值:默認情況下,火花結構化流處理下一批就前一批處理完成。在大多數用例,默認將滿足您的需求。
固定間隔:使用固定的間隔,可以處理工作在用戶指定的時間間隔。一般是用來固定時間間隔等特定時間和運行更大的microbatch。
一次:有時,數據到達一個固定的間隔,這將是一個浪費資源的保持集群啟動並運行。其中一個選項是在批處理模式下運行的工作。然而在觸發火花結構化流執行工作一次或AvailableNow在批處理模式可以是有益的。與這些執行設置,不需要保持集群運行,你可以顯著節省成本通過定期旋轉的一個集群,集群處理數據和關閉。盡管它類似於批處理作業,它提供了額外的好處,如記賬管理,數據處理,容錯通過維護表級原子性和有狀態操作在運行。
吞吐量:有多個參數,可以通過調優在火花結構化流實現高吞吐量。除了選擇觸發類型,關鍵參數之一是攝入的數據並行處理工作。實現更高的吞吐量,可以增加分區的數量在消息總線。通常火花消息總線分區之間有一對一的映射為Apache卡夫卡火花結構化流分區。然而在AWS動作的情況下,消息是預取的記憶和動作的數量之間沒有直接的映射碎片和火星任務的數量。
讓我們考慮一個真實世界的例子,更高的吞吐量是通過調優的批量大小和數量的分區。在銀行使用的情況下,實時交易處理使用流媒體工作一整天。然而,一些實時接收到的事件可能是不準確的。因此和解批處理執行到一天結束的時候解決問題。和解批處理使用相同的代碼流,但不同的工作實例。分區和批量大小增加的數量來實現高吞吐量相比,連續流數據在另一個話題。
容錯:作為microbatches火花結構化流執行的工作,它給了兩個截然不同的優勢實現容錯:
- 任務可以有效地從失敗中恢複重新安排的任務在任何其他的執行人
- 確定性任務確保多次執行相同的任務提供完全相同的輸出,使一次處理
在火花結構化流失敗的恢複工作是通過使用每個查詢的檢查點位置。檢查站內的偏移位置使您能夠重新啟動工作從準確的故障點。選擇提供檢查點位置查詢:
選項(“checkpointLocation”、“dbfs: / / checkpointPath”)
可複製源和冪等彙,火花結構化流工作可以實現隻有一次語義,這通常是一個需求的生產級應用程序。
結論
流數據攝入是第一步在lakehouse啟用時間敏感的決策。在這個博客中,我們連續流動的流數據來源分類文件或消息總線服務。自動加載程序簡化了接近實時攝取來源文件使用火花結構化流並提供先進的功能,如自動檢測文件的到來,可伸縮性來處理大量的數據,模式推理和成本效益數據攝入。而對於數據攝入從消息總線服務,火花結構化流使健壯的數據攝入框架,集成了大部分的消息總線服務在不同的雲供應商。大多數生產級應用程序需要一個延遲和吞吐量之間的權衡來減少成本,獲得更高的精度。