對 Flink ⽽⾔,其所要處理的主要場景就是流數據,批數據只是流數據的⼀個極限特例⽽已,因此 Flink 也是⼀款真正的流批統⼀的計算引擎redis
無界流與有界流
編程
有狀態的計算:每次進行數據計算的時候基於以前數據的計算結果(狀態)作計算,而且每次計算結果 都會保存到存儲介質中,計算關聯上下文context
基於有狀態的計算不須要將歷史數據從新計算,提升了計算效率
無狀態的計算:每次進行數據計算只是考慮當前數據,不會使用以前數據的計算結果
緩存
1) 支持高吞吐、低延遲、高性能的流處理
2) 支持帶有事件時間的窗口(Window)操做
3) 支持有狀態計算的Exactly-once語義
4) 支持高度靈活的窗口(Window)操做,支持基於time、count、session,以及data-driven的窗口操做
5) 支持具備Backpressure功能的持續流模型
6) 支持基於輕量級分佈式快照(Snapshot)實現的容錯
7) 一個運行時同時支持Batch on Streaming處理和Streaming處理
8) Flink在JVM內部實現了本身的內存管理
9) 支持迭代計算
10) 支持程序自動優化:避免特定狀況下Shuffle、排序等昂貴操做,中間結果有必要進行緩存session
處理批數據機器學習
處理流數據分佈式
支持機器學習(FlinkML)
支持圖分析(Gelly)
支持關係數據處理(Table)
支持復瑣事件處理(CEP)ide
支持Flink on YARN
支持HDFS
支持來自Kafka的輸入數據
支持Apache HBase
支持Hadoop程序
支持Tachyon
支持ElasticSearch
支持RabbitMQ
支持Apache Storm
支持S3
支持XtreemFSoop
在Flink的世界觀中,一切都是數據流,因此對於批計算來講,那只是流計算的一個特例而已
Flink Dataflows是由三部分組成,分別是:source、transformation、sink結束
source數據源會源源不斷的產生數據,transformation將產生的數據進行各類業務邏輯的數據處理,最 終由sink輸出到外部(console、kafka、redis、DB......)
基於Flink開發的程序都可以映射成一個Dataflows性能
當source數據源的數量比較大或計算邏輯相對比較複雜的狀況下,須要提升並行度來處理數據,採用並 行數據流
經過設置不一樣算子的並行度 source並行度設置爲2,map也是2.... 表明會啓動多個並行的線程來處理數據學習
爲了更高效地分佈式執行,Flink會盡量地將operator的subtask連接(chain)在一塊兒造成task。每一個 task在一個線程中執行。將operators連接成task是很是有效的優化:它能減小線程之間的切換,減小 消息的序列化/反序列化,減小數據在緩衝區的交換,減小了延遲的同時提升總體的吞吐量
若是要將程序打包提交到集羣運行,打包的時候不須要包含這些依賴,由於集羣環境已經包含這些依賴,此時依賴的做用域應該設置爲provided provided
Flink 應用在 IntelliJ IDEA 中運行,這些 Flink 核心依賴的做用域須要設置爲 compile 而不是 provided 。 不然 IntelliJ 不會添加這些依賴到 classpath,會致使應用運行時拋出 NoClassDefFountError異常