這里有一個注意點,就是flink端的精準一次
1.barrier對齊精準和一次非對齊精準一次?對比??
??維度?? | ??Barrier 對齊的精準一次?? | ??Barrier 非對齊的精準一次?? |
---|---|---|
??觸發條件?? | 需等待所有輸入流的 Barrier 對齊后才能觸發檢查點? | 收到第一個 Barrier 立即觸發,無需等待對齊? |
??數據處理方式?? | 對齊期間阻塞部分數據流,僅處理未到達 Barrier 的分區數據? | 允許所有數據繼續流動,將 Barrier 后的數據標記為 in-flight 并保存? |
??狀態保存內容?? | 僅保存算子自身的狀態(如累加器、窗口狀態) | 額外保存輸入/輸出緩沖區中的未處理數據(in-flight 數據) |
??資源開銷?? | 低(僅保存狀態),但可能因對齊阻塞導致吞吐下降? | 高(需保存大量緩沖區數據),但減少阻塞時間? |
??適用場景?? | 低延遲要求不高的場景,或輸入流速率均衡的場景? | 高吞吐、高延遲或反壓嚴重的場景 |
?
??1. Barrier 對齊的精準一次??
- ??觸發邏輯??:
當算子收到所有輸入流的 Barrier 后,才會觸發狀態快照。例如,若某個算子有兩個輸入流,需等待兩個流的 Barrier 均到達 。 - ??數據處理流程??:
- 部分輸入流的 Barrier 先到達時,該流后續數據會被緩存(阻塞),其他流的數據繼續處理 。
- 所有 Barrier 對齊后,統一保存狀態并向下游廣播 Barrier;?
- ??優點??:
- 狀態體積小,恢復速度快;
- 嚴格保證數據僅處理一次;?
??2. Barrier 非對齊的精準一次??
- ??觸發邏輯??:
收到任意一個輸入流的 Barrier 后立即觸發快照,無需等待其他流的 Barrier ; - ??數據處理流程??:
- 繼續處理所有輸入流的數據,包括 Barrier 之后的數據;
- 將 Barrier 到達時未處理的數據(輸入緩沖區)和已處理但未輸出的數據(輸出緩沖區)標記為 in-flight 數據,與狀態一起保存 ;
- ??優點??:
- 避免因對齊導致的阻塞,提升吞吐量和反壓容錯能力;
- 適用于網絡延遲波動或輸入流速率差異大的場景
生產環境選擇建議??
??場景?? | ??推薦機制?? | ??理由?? |
---|---|---|
輸入流速率均衡且延遲敏感 | Barrier 對齊 | 避免額外存儲開銷,恢復效率高? 1 4 |
高吞吐或反壓嚴重 | Barrier 非對齊 | 減少阻塞時間,緩解反壓影響? 6 7 |
狀態體積敏感(如 TB 級狀態) | Barrier 對齊 | 非對齊模式保存的 in-flight 數據可能顯著增加存儲成本? 3 7 |