1. 程式人生 > >flink 事件時間

flink 事件時間

當流媒體程式在處理時間執行時,所有基於時間的操作(如時間視窗)將使用執行相應操作員的機器的系統時鐘。例如,每小時處理時間視窗將包括在系統時鐘顯示整整一小時的時間和到達特定操作員的所有記錄。處理時間是最簡單的時間概念,不需要流和機器之間的協調。它提供了最佳的效能和最低的延遲。然而,在分散式和非同步環境中,處理時間並不能提供確定性,因為它容易受到記錄到達系統的速度(例如來自訊息佇列)的影響,以及記錄在系統。
  • 事件時間:事件時間是每個事件在其生產裝置上發生的時間。這段時間通常嵌入記錄中,然後進入Flink,並且可以從記錄中提取事件時間戳。每小時事件時間視窗將包含攜帶落入該小時的事件時間戳的所有記錄,而不管記錄何時到達以及它們以何種順序到達。
事件時間即使在無序事件,延遲事件或從備份或永續性日誌中重放資料時,也能提供正確的結果。在活動期間,時間的進度取決於資料,而不是掛在任何掛鐘上。事件時間程式必須指定如何生成事件時間水印,這是在事件時間內發出訊號的機制。該機制如下所述。事件時間處理通常會產生一定的延遲,這是由於其對晚期事件和亂序事件等待一定時間的性質。因此,事件時間程式通常與處理時間操作相結合。
  • 進入處理時間
    :攝取時間是事件進入Flink的時間。在源運算子處,每個記錄都將源的當前時間作為時間戳記,而基於時間的操作(如時間視窗)則引用該時間戳記。
攝取時間在事件時間和處理時間之間的概念上處於概念上。與處理時間相比,它稍微昂貴一些,但可以提供更可預測的結果。由於攝取時間使用穩定的時間戳(在源處分配一次),對記錄的不同視窗操作將引用相同的時間戳,而在處理時間內,每個視窗操作員可以將記錄分配到不同的視窗(基於本地系統時鐘和任何運輸延誤)。與事件時間相比,攝入時間程式無法處理任何亂序事件或遲後資料,但程式不必指定如何生成水印。在內部,攝取時間與事件時間非常相似,但具有自動時間戳分配和自動生成水印的功能。設定時間特徵