下面是你提供的文字整理后的結果:
1. Flink是一個針對流數據和批數據的分布式處理引擎,同時支持原生流處理的開源框架。
? ?- 延遲低(毫秒級),且能夠保證消息傳輸不丟失不重復。
? ?- 具有非常高的吞吐(每秒千萬級)。
? ?- 支持原生流處理。
? ?- 容錯性高,基于checkpoint機制。
? ?- 處理模型:單條事件處理;Spark Streaming是一個事件窗口內的所有事件。
? ?- 部署相對簡單,只依賴JRE環境。
? ?- 應用場景:實時監控(用戶行為預警);實時報表(雙11直播大屏);實時個性化推薦;數據倉庫(實時數據清洗、歸并)。
2. 流計算與批計算對比:
? ?- 流式計算實時、低延遲,批量計算非實時、高延遲。
? ?- 流式計算一般針對動態、無邊界的數據,批量計算一般針對靜態數據。
? ?- 流式計算任務是持續運行的,批量計算任務一次性完成。
3. Flink的核心特性:
? ?- 事件時間:Flink應用程序需要從原始數據中解析出事件時間,并設置給Flink,用于時間窗口計算。
? ?- 靈活的窗口操作。
? ?- 可以處理超出主內存大小限制的數據,減少垃圾收集開銷。
? ?- 對象序列化二進制存儲。
4. Flink的部署:
? ?- Application:每個Application對應一個Runtime,一個Application中可以包含多個Job。
? ?- JobManager:每個集群至少有一個,負責管理整個集群的計算資源。
? ?- JobManager向ResourceManager申請slot資源。
? ?- TaskManager:每個集群有多個TaskManager,TaskManager通過心跳與JobManager通信,每個TaskManager可以有多個Task slot。
? ?- 單個Slot可以用于一個或多個Task執行,但相同的Task不能在一個Slot中運行。
? ?- Client:執行main方法解析JobGraph對象,并提交給JobManager。
5. Flink的API:
? ?- 開源實現的MapReduce模型,包含三個階段:Map、Shuffle、Reduce。
? ?- 水位線:用于處理實時數據中的亂序問題,保證在一個特定事件后必須觸發窗口進行計算。
? ?- 窗口的觸發時機是窗口截至時間<=當前的Watermark。
? ?- 其他特性包括:window Evictor(數據清除器),OutputTag(分流標簽),AsyncFunction(異步查詢補充數據)。
6. 狀態管理:
? ?- Flink中的KeyBy算子根據指定的Key將數據流分區。
? ?- 默認的checkpoint interval為500ms。
? ?- savepoint用于手動觸發保存狀態數據,用于發版等情況,與checkpoint保存的內容相同。
7. Table API:
? ?- 表的數據存儲在catalog中,臨時表存儲在內存中,永久表存儲在外部catalog中,比如Hive Catalog。
8. 其他概念和接口:
? ?- RichParallelSourceFunction:并發數據源。
? ?- CheckpointListener:通知checkpoint完成。
? ?- CheckpointedFunction:定義快照實現。
? ?- ResultTypeQueryable接口:通過輸入格式和功能明確告知API返回類型。
? ?- 數據源mq會進行數據分區,在多個Flink并發實例的情況下,并發消費以提高效率。
9. 關于消費者和生產者的速度和消息堆積的問題:
? ?- 消費者的平均速度一定是大于生產者的平均速度,否則會造成消息堆積,mq通過offset來控制消費偏移量,但是還會保存一段時間的歷史數據用來消息回溯和查詢,一般是7天,保存數據的時候starRocks可以通過排序鍵做冪等? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-算子本身不需要實現CheckpointedFunction的snapshotState方法就能實現State的保存,這是由Flink本身的機制實現的,snapshotState方法會在每次正常checkpoint的時候調用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-Flink本身支持starRocks,并且實現了snapshotState,功能是把緩存的待寫入數據庫的數據刷盤到starRocks,這樣會有問題,就是每次checkpoint的時候都會把數據強制刷盤到數據庫,這是一個同步處理,可能會造成寫庫很慢,消息堆積