流處理:資料大小未知、簡單操作、及時相應(spark streaming,flink)
批處理:資料大小固定,複雜操作,需要一段時間響應。(hive,mr,spark core sql)
離線計算:資料量大&周期長、複雜操作、資料固定、友善查詢計算結果
實時計算:資料實時到達、資料達到次序獨立、資料規模大&無法預知容量、再次提取代價大
Apache Fink是一個架構和分布式處理引擎,用于對無界和有界資料流進行有狀态計算。Flink設計為在所有常見的叢集環境中運作,以記憶體速度和任何規模執行計算。
(1)批處理:處理曆史資料集
(2)流處理:處理實時資料流
(3)事件驅動應用:監控事件的服務 (事件就是資料)
注:spark是時間驅動 spark和flink第一個差別
(1)支援高吞吐、低延遲、高性能的流處理
(2)支援帶有事件時間的視窗(Window)操作
(3)支援有狀态計算的Exactly-once語義
(4)支援高度靈活的視窗(Window)操作,支援基于time、count、session,以及data-driven的視窗操作
(5)支援具有反壓功能的持續流模型
(6)支援基于輕量級分布式快照(Snapshot)實作的容錯 (checkpoint)
(7)一個運作時同時支援Batch on Streaming處理和Streaming處理
(8)Flink在JVM内部實作了自己的記憶體管理,避免了出現oom(記憶體溢出)
(9)支援疊代計算
(10)支援程式自動優化:避免特定情況下Shuffle、排序等昂貴操作,中間結果有必要進行緩存
Flink 在流處理和批處理上的 source 大概有 4 類:
(1)基于本地集合的 source、
(2)基于檔案的 source、
(3)基于網絡套接字的 source、
(4)自定義的 source。自定義的 source 常見的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等,當然你也可以定義自己的 source。
有 Map / FlatMap / Filter /KeyBy / Reduce / Fold / Aggregations / Window / WindowAll / Union / Window join / Split / Select / Project 等,
操作很多,可以将資料轉換計算成你想要的資料。
Flink 将轉換計算後的資料發送的地點 。
Flink 常見的 Sink 大概有如下幾類:
寫入檔案、
列印出來、
寫入 socket 、
自定義的 sink 。自定義的 sink 常見的有 Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、Hadoop FileSystem 等,同理你也可以定義自己的 sink。
Client:Flink 作業在哪台機器上面送出,那麼目前機器稱之為Client。使用者開發的Program 代碼,它會建構出DataFlow graph,然後通過Client送出給JobManager。
JobManager:是主(master)節點,相當于Spark的Driver,相當于YARN裡面的ResourceManager,生産環境中需要做高可用。JobManager會将任務進行拆分,發送到TaskManager上面執行。
TaskManager:是從節點(slave),相當于Spark的Executor,執行task
一個叢集隻有一個JobManager,多個TaskManager
(1)、獨立叢集:前提開啟 nc -lk 8888
送出任務
1、在web頁面送出任務
(2)、yarn模式
1、yarn-session 在yarn裡面啟動一個flink叢集 jobManager
先啟動hadoop
yarn-session.sh -jm 1024m -tm 1096m
2、直接送出任務到yarn 每一個任務都會有一個jobManager
flink run -m yarn-cluster -yjm 1024m -ytm 1096m -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar
yarn-session先在yarn中啟動一個jobMansager ,所有的任務共享一個jobmanager (送出任務更快,任務之間共享jobmanager , 互相有影響)
直接送出任務模型,為每一個任務啟動一個joibmanager (每一個任務獨立jobmanager , 任務運作穩定)