Spark Streaming只支持 Processing Time, Flink 支持三種時間語義, Processing Time, Event Time, Ingestion Time
- Processing Time 數據被處理時服務器的當前系統時間,這種時間語義比較常用,一般用于對時序性和準確性要求不太高的場景
- 最簡單的Time概念,對于程序來說擁有最好的性能和最低的延遲。
- 分布式和異步環境下,不能保證結果數據的準確性,存在時序問題。
- 數據延遲對Flink的輸出結果影響比較大。
- Event Time 事件發生的時間,是一條數據本身攜帶的時間字段。有時序要求,比如必須現有下單,再有支付等有先后關系的業務場景。
- 這種時間來自于數據本身,在事件到達Flink之前就已經確定。
- 必須指定如何生成WaterMarks,用來表示Event Time進度的機制。
- 無論事件什么時候到達或者其怎么排序,最后處理Event Time將產生完全一致和確定的結果,可以解決時序問題。
- Ingestion Time事件進入數據源(Flink Source)的時間。
介于Event Time和Processing Time之間,與Processing Time相比會自動生成并使用穩定的時間戳,雖然有一定成本,單結果更可預測,與Event Time相比無法處理無序事件或延遲數據,但是Ingestion Time不必指定如何生成水印,具有自動分配時間戳和自動生成水印功能。