Flink簡介

Flink的世界觀是數據流

對 Flink ⽽⾔,其所要處理的主要場景就是流數據,批數據只是流數據的⼀個極限特例⽽已,因此 Flink 也是⼀款真正的流批統⼀的計算引擎redis

Unbounded streams?Bounded streams?

無界流與有界流
image.png編程

stateful computations?

有狀態的計算:每次進行數據計算的時候基於以前數據的計算結果(狀態)作計算,而且每次計算結果 都會保存到存儲介質中,計算關聯上下文context
基於有狀態的計算不須要將歷史數據從新計算,提升了計算效率
無狀態的計算:每次進行數據計算只是考慮當前數據,不會使用以前數據的計算結果
image.png緩存

Flink流處理特性

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

Flink技術棧的核心組成

Flink技術棧的核心組成.png

Flink數據流編程模型

數據流模型.jpg

DataSet

處理批數據機器學習

DataStream

處理流數據分佈式

Libraries支持

支持機器學習(FlinkML)
支持圖分析(Gelly)
支持關係數據處理(Table)
支持復瑣事件處理(CEP)ide

整合支持

支持Flink on YARN
支持HDFS
支持來自Kafka的輸入數據
支持Apache HBase
支持Hadoop程序
支持Tachyon
支持ElasticSearch
支持RabbitMQ
支持Apache Storm
支持S3
支持XtreemFSoop

Dataflows數據流圖

在Flink的世界觀中,一切都是數據流,因此對於批計算來講,那只是流計算的一個特例而已
Flink Dataflows是由三部分組成,分別是:source、transformation、sink結束
source數據源會源源不斷的產生數據,transformation將產生的數據進行各類業務邏輯的數據處理,最 終由sink輸出到外部(console、kafka、redis、DB......)
基於Flink開發的程序都可以映射成一個Dataflows性能

當source數據源的數量比較大或計算邏輯相對比較複雜的狀況下,須要提升並行度來處理數據,採用並 行數據流
經過設置不一樣算子的並行度 source並行度設置爲2,map也是2.... 表明會啓動多個並行的線程來處理數據學習

Dataflows 算子鏈

爲了更高效地分佈式執行,Flink會盡量地將operator的subtask連接(chain)在一塊兒造成task。每一個 task在一個線程中執行。將operators連接成task是很是有效的優化:它能減小線程之間的切換,減小 消息的序列化/反序列化,減小數據在緩衝區的交換,減小了延遲的同時提升總體的吞吐量

運行打包注意點:

若是要將程序打包提交到集羣運行,打包的時候不須要包含這些依賴,由於集羣環境已經包含這些依賴,此時依賴的做用域應該設置爲provided provided
Flink 應用在 IntelliJ IDEA 中運行,這些 Flink 核心依賴的做用域須要設置爲 compile 而不是 provided 。 不然 IntelliJ 不會添加這些依賴到 classpath,會致使應用運行時拋出 NoClassDefFountError異常

相關文章
相關標籤/搜索