Flink結(jié)構(gòu)
Flink整個系統(tǒng)包含三部分:
- Client
Flink Client主要給用戶提供向Flink系統(tǒng)提交用戶任務(wù)(流式作業(yè))的能力。
- TaskManager
Flink系統(tǒng)的業(yè)務(wù)執(zhí)行節(jié)點,執(zhí)行具體的用戶任務(wù)。TaskManager可以有多個,各個TaskManager都平等。
- JobManager
Flink系統(tǒng)的管理節(jié)點,管理所有的TaskManager,并決策用戶任務(wù)在哪些Taskmanager執(zhí)行。JobManager在HA模式下可以有多個,但只有一個主JobManager。

Flink與Yarn的關(guān)系
Flink基于YARN的集群部署
Flink支持基于YARN管理的集群模式,在該模式下,F(xiàn)link作為YARN上的一個應(yīng)用,提交到Y(jié)ARN上執(zhí)行。
Flink YARN Client首先會檢驗是否有足夠的資源來啟動YARN集群,如果資源足夠的話,會將jar包、配置文件等上傳到HDFS。Flink YARN Client首先與YARN Resource Manager進行通信,申請啟動Application Master(以下簡稱AM)的Container,并啟動AM。等所有的YARN的Node Manager將HDFS上的jar包、配置文件下載后,則表示AM啟動成功。
AM在啟動的過程中會和YARN的RM進行交互,向RM申請需要的Task Manager Container,申請到Task Manager Container后,啟動TaskManager進程。
在Flink YARN的集群中,AM與Flink JobManager在同一個Container中。AM會將JobManager的RPC地址通過HDFS共享的方式通知各個TaskManager,TaskManager啟動成功后,會向JobManager注冊。
當(dāng)所有TaskManager都向JobManager注冊成功后,F(xiàn)link基于YARN的集群啟動成功,F(xiàn)link YARN Client就可以提交Flink Job到Flink JobManager,并進行后續(xù)的映射、調(diào)度和計算處理。

Flink關(guān)鍵特性
流式處理
高吞吐、高性能、低時延的實時流處理引擎,能夠提供ms級時延處理能力。
豐富的狀態(tài)管理
流處理應(yīng)用需要在一定時間內(nèi)存儲所接收到的事件或中間結(jié)果,以供后續(xù)某個時間點訪問并進行后續(xù)處理。Flink提供了豐富的狀態(tài)管理相關(guān)的特性支持,其中包括:
多種基礎(chǔ)狀態(tài)類型:Flink提供了多種不同數(shù)據(jù)結(jié)構(gòu)的狀態(tài)支持,如ValueState、ListState、MapState等。用戶可以基于業(yè)務(wù)模型選擇最高效、合適狀態(tài)類型。
豐富的State Backend:State Backend負(fù)責(zé)管理應(yīng)用程序的狀態(tài),并根據(jù)需要進行Checkpoint。Flink提供了不同State Backend,State可以存儲在內(nèi)存上或RocksDB等上,并支持異步以及增量的Checkpoint機制。
精確一次語義:Flink的Checkpoint和故障恢復(fù)能力保證了任務(wù)在故障發(fā)生前后的應(yīng)用狀態(tài)一致性,為某些特定的存儲支持了事務(wù)型輸出的功能,即使在發(fā)生故障的情況下,也能夠保證精確一次的輸出。
豐富的時間語義支持
時間是流處理應(yīng)用的重要組成部分,對于實時流處理應(yīng)用來說,基于時間語義的窗口聚合、檢測、匹配等運算是非常常見的。Flink提供了豐富的時間語義支持。
Event-time:使用事件本身自帶的時間戳進行計算,使亂序到達(dá)或延遲到達(dá)的事件處理變得更加簡單。
Watermark支持:Flink引入Watermark概念,用以衡量事件時間的發(fā)展。Watermark也為平衡處理時延和數(shù)據(jù)完整性提供了靈活的保障。當(dāng)處理帶有Watermark的事件流時,在計算完成之后仍然有相關(guān)數(shù)據(jù)到達(dá)時,F(xiàn)link提供了多種處理選項,如將數(shù)據(jù)重定向(side output)或更新之前完成的計算結(jié)果。
Processing-time和Ingestion-time支持。
高度靈活的流式窗口支持:Flink能夠支持時間窗口、計數(shù)窗口、會話窗口,以及數(shù)據(jù)驅(qū)動的自定義窗口,可以通過靈活的觸發(fā)條件定制,實現(xiàn)復(fù)雜的流式計算模式。
容錯機制
分布式系統(tǒng),單個task或節(jié)點的崩潰或故障,往往會導(dǎo)致整個任務(wù)的失敗。Flink提供了任務(wù)級別的容錯機制,保證任務(wù)在異常發(fā)生時不會丟失用戶數(shù)據(jù),并且能夠自動恢復(fù)。
Checkpoint:Flink基于Checkpoint實現(xiàn)容錯,用戶可以自定義對整個任務(wù)的Checkpoint策略,當(dāng)任務(wù)出現(xiàn)失敗時,可以將任務(wù)恢復(fù)到最近一次Checkpoint的狀態(tài),從數(shù)據(jù)源重發(fā)快照之后的數(shù)據(jù)。
Savepoint:一個Savepoint就是應(yīng)用狀態(tài)的一致性快照,Savepoint與Checkpoint機制相似,但Savepoint需要手動觸發(fā),Savepoint保證了任務(wù)在升級或遷移時,不丟失掉當(dāng)前流應(yīng)用的狀態(tài)信息,便于任何時間點的任務(wù)暫停和恢復(fù)。
Flink SQL
Table API和SQL借助了Apache Calcite來進行查詢的解析,校驗以及優(yōu)化,可以與DataStream和DataSet API無縫集成,并支持用戶自定義的標(biāo)量函數(shù),聚合函數(shù)以及表值函數(shù)。簡化數(shù)據(jù)分析、ETL等應(yīng)用的定義。
CEP in SQL
Flink允許用戶在SQL中表示CEP(Complex Event Processing)查詢結(jié)果以用于模式匹配,并在Flink上對事件流進行評估。