《周煜敏-Pravega Flink connector Table API進階功能探秘.pdf》由會員分享,可在線閱讀,更多相關《周煜敏-Pravega Flink connector Table API進階功能探秘.pdf(28頁珍藏版)》請在三個皮匠報告上搜索。
1、周煜敏戴爾科技集團高級軟件工程師Pravega Flink connector Table API 進階功能探秘Deep dive into the extended Table API usage of Pravega Flink connector動態表與流表二相性動態表與流表二相性#1#1Debezium支持支持#2#2Pravega Schema registry#3#3Catalog支持支持#4#4Demo#5#5#1流表二象性流表二象性Dynamic table and stream-table duality關系代數關系代數/SQL流處理流處理關系(或表)是有界(多)元組集合流是
2、一個無限元組序列對批數據(例如關系數據庫中的表)執行的查詢可以訪問完整的輸入數據流式查詢在啟動時不能訪問所有數據,必須“等待”數據流入批處理查詢在產生固定大小的結果后終止流查詢不斷地根據接收到的記錄更新其結果,并且始終不會結束傳統關系查詢與流處理比較傳統關系查詢與流處理比較表體現數據在某個時間點的視圖流體現數據在時間維度上的變化流流-表表連續查詢連續查詢Update動態表動態表-流流(Changelog)RetractUpsertINSERTINSERT+DELETEUPSERT+DELETEAppend-only流-表表-流在時間維度上,修改表日志流的聚合結果成為表在時間維度上,表的動態的修
3、改記錄成為流流表二象性流表二象性#2Debezium支持支持Pravega Debezium supportCDC/Debezium簡介簡介Change Data Capture,確定和跟蹤數據庫中的數據變更以采取行動基于 Kafka connect 實現,將數據庫行級變更轉換為事件流的分布式平臺CDCDebezium的三種部署模式的三種部署模式#1將 Debezium 作為依賴庫嵌入 Java 程序調用利用 Kafka Connect 部署啟動 Debezium Server,利用 source connector 鏈接下游消息系統#2#3https:/ PravegaPravega 寫客戶
4、端寫客戶端01100000Txn segments01110110 01000110 01100000s1s201111000Regular writeTransactional write#1普通寫客戶端writer.writeEvent(event)事務性寫客戶端Transaction txn=txnWriter.beginTxn()txn.writeEvent(event)txn.flush()mit()txn.abort()#2Debezium與與Pravega 集成集成#1普通寫客戶端集成事務性寫客戶端集成#2以單獨event方式順序寫入一個 debezium batch 以事務寫入
5、,當batch complete 時 commit Pravega transaction,確保僅一次語義TXN-2TXN-1()配置默認值詳情debezium.sink.type設置為 pravegadebezium.sink.pravega.controller.uri tcp:/localhost:9090Pravega 集群的 controller 地址debezium.sink.pravega.scopePravega scope 名稱debezium.sink.pravega.transactionfalse是否使用事務性寫入模式Pravega Flink Connector 集成
6、集成基于現有 FLIP-95 Table Source API 以及 SourceFunction 實現Insert(+I,RowData)Update(-U,OldData)(+U,NewData)Issue 530:額外支持反序列化成多個 event 的功能Issue 494:FLIP-107 metadata 在 table source 上的支持為保持 Pravega 序列化器的互操作性,重構反序列化鏈路#3Pravega Schema RegistryWriterReadersPravega StreamReadersRaw bytesWriter“type”:“record”,“n
7、ame”:“Person”,“fields”:“name”:“age”,“type”:“int”,“name”:“name”,“type”:“string”,“name”:“gender”,“type”:“string”“type”:“record”,“name”:“Person”,“fields”:“name”:“age”,“type”:“int”,“name”:“name”,“type”:“string”Event v2Event v1“type”:“record”,“name”:“Person”,“fields”:“name”:“age”,“type”:“int”,“name”:“nam
8、e”,“type”:“string”“type”:“record”,“name”:“Person”,“fields”:“name”:“age”,“type”:“int”,“name”:“name”,“type”:“string”,“name”:“gender”,“type”:“string”項目動機項目動機存儲和管理存儲在 Pravega 中的半結構化數據的SchemaSchema 存儲145632提供了 RESTful 接口來存儲和管理數據Schema 以及兼容性策略RESTful 接口內置對 Avro、Profobuf 和 JSON 等流行的序列化格式的支持,同時也支持自定義序列化方法序列
9、化管理額外存儲和管理數據編解碼信息,包括各種對序列化數據的壓縮或加密策略編碼和加密支持基于 Pravega Key-Value Table 功能進行存儲底層實現不僅限用于 Pravega 項目,可以被用于通用的存儲系統的 schema 管理解決方案通用性項目介紹項目介紹系統架構系統架構Schema RegistryAdminWritersReadersGRPCRESTGroupSchema TypeCompatibility StrategyVersioned HistoryGroup:Scope/Stream1 AvroFullv1,v2,v3,vKGroup:Scope/Stream2Pr
10、otobufDenyAllv1Group:Scope/Stream3JsonAllowAnyv1,v2,v3,vNPravegaSegment Store1 byteProtocol version4 bytesEncoding IDEncoded bytes#4Catalog 支持支持Flink CatalogFLIP-30:基于 Flink 與 Hive Metastore 集成,使得 Hive 中的元數據能與 Flink Table 抽象互通將 Hive 元數據信息抽象化,例如數據庫、表、分區、視圖以及數據庫,額外的函數、分區信息等。提供相應的接口用以對接通用的外部 connector
11、系統Catalog 與與Pravega 的映射關系的映射關系FlinkPravegaPravega Schema RegistryDatabaseScopeNamespaceTableStream(With Schema)GroupView/Partition/Function/Statistic/TableStream 中的流數據SchemaSchema RegistryJson+type:object,properties:lon:type:number,rideTime:type:string5 bytes+“lon”:7,“rideTime”:“2020-12-30 12:13:14.
12、123”lonrideTime72020-12-30 12:13:14.123Catalog 集成集成實現難點及解決方案:難點難點1:Schema 處理處理FLINK-19098 RowData 與 Json/Avro 數據轉換變為 public 類數據序列化和 Schema 的轉化引入 serialization.format 選項,可進一步定制應用于整個 catalog 的序列化方法,如:json.timestamp-format.standard開發新的 FormatFactory難點難點2:同時支持:同時支持Avro 和和Json 格式格式難點難點3:序列化方式與標準不同:序列化方式與
13、標準不同“pravega-registry”Format FactoryEvent 開頭的 magic bytes 導致了無法使用 Flink 現成的 Json/Avro format使用 Schema registry 根據存儲信息提供的序列化器將 Catalog Table 中與序列化相關的參數沿襲到 format factory 參數byteJsonNode/GenericRecordRowDataSchema Registry APIFlink API未來規劃未來規劃Protobuf 格式的支持Upsert table source 的支持自定義序列化的支持FLINK-18202 Introduce Protobuf format#5DemoDemo1