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