flink實戰--StreamingFileSink壓縮與合併小文件

簡介

                     StreamingFileSink用來將分區文件寫入到支持 Flink FileSystem 接口的文件系統中,支持Exactly-Once語義。這種sink實現的Exactly-Once都是基於Flink checkpoint提供的hook來實現的兩階段提交模式來保證的,主要應用在實時數倉、topic拆分、基於小時分析處理等場景下。本篇將會介紹StreamingFileSink的基本用法、如何壓縮數據以及合併產生的小文件。

注意:官網已經說明:BucketingSink在flink1.9棄用,將在後續版本中被刪除。請改用StreamingFileSink。

一、基本用法

                    StreamingFileSink提供了基於行、列兩種文件寫入格式,用法:這兩種寫入格式除了文件格式的不同,另外一個很重要的區別就是回滾策略的不同,forRowFormat行寫可基於文件大小、滾動時間、不活躍時間進行滾動,但是對於forBulkFormat列寫方式只能基於checkpoint機制進行文件滾動,即在執行snapshotState方法時滾動文件,如果基於大小或者時間滾動文件,那麼在任務失敗恢復時就必須對處於in-processing狀態的文件按照指定的offset進行truncate,我想這是由於列式存儲是無法針對文件offset進行truncate的,因此就必須在每次checkpoint使文件滾動,其使用的滾動策略實現是OnC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章