1. 程式人生 > >《Flink學習筆記一》

《Flink學習筆記一》

  Flink作為一個分散式的流處理框架正在發起新一代的大資料處理革命,其優勢選列如下:

1、Flink支援三個時間語義:事件時間、攝取時間和處理時間。
2、Flink可以保證一次性故障語義以及至少一次語義。
3、Flink具有非常好的加工效能。它可以實現毫秒延遲以及每個CPU核心高達一百萬個事件的吞吐量。Flink應用程式可以擴充套件到數千個核心。
4、Flink具有高級別的API,具有許多原語,例如高階視窗操作符,以及用於實現自定義操作符邏輯的低階介面。
5、Flink為許多廣泛使用的系統提供聯結器,如Apache Kafka,Apache Cassandra,Elasticsearch,JDBC,Kinesis和(分散式)檔案系統,如HDFS和S3。
6、Flink能夠以非常小的停機時間(無任何單點故障),與YARN和Apache Mesos的緊密整合,快速恢復故障以及動態擴充套件作業的能力。
7、Flink還允許更新作業的應用程式程式碼,並將作業遷移到不同版本的Flink群集,而不會丟失應用程式的狀態。系統和應用程式指標的詳細和可定製的收集有助於提前識別和應對問題。


     最後但並非最不重要的是,Flink也是一個完整的批量處理器。

  Flink是一個高吞吐低延遲的處理器,這體現在架構設計上的流暢和容災策略的彈性支援(使用者可以根據自己的業務特性選擇容災的粒度),本文簡單介紹Flnik的處理過程和一些關鍵技術的設計,觀點僅代表個人,不保證論述的正確性作者不是Flink的設計者和開源貢獻者,若有誤請聯絡本人刪改,感激不盡。

  首先我們來理解一個概念,分散式處理到底帶來了什麼好處?個人覺得最大的好處就是能增加系統的吞吐能力,然而這個是怎麼實現的呢?這裡有兩個並行的概念,一個是資料並行一個是任務並行。資料並行是說將流資料拆分為不同的資料塊,然後對資料塊進行相同的處理;任務並行是說將任務拆分成不同的子任務,每個子任務對不同的資料(可以是不同的資料來源)進行相同或不同的邏輯處理,這個就是任務並行。這裡面有個問題,是所有的資料都可以並行處理嗎?如果是有狀態的資料,比如說交易資料,如果我們將一個完整的請求資料拆分處理那麼我們是很難並行處理且保證其一致性的,如果是統計詞頻這種無狀態的資料我們大可以隨意拆分然後彙總即可。但是有狀態的資料我們也想並行處理怎麼辦?這裡引入一個數據交換策略的概念。Flink支援四種資料交換策略:

                 

   Flink的架構遵循許多分散式系統實現的主工作模式。在Flink中,主程序稱為JobManager 1,工作程序稱為TaskManager。Flink叢集由至少一個JobManager和一個或多個TaskManager組成。客戶端程序將應用程式提交到JobManager。每個程序在單獨的Java虛擬機器(JVM)中執行。

  Flink的架構遵循許多分散式系統實現的主工作模式。在Flink中,主程序稱為JobManager 1,工作程序稱為TaskManager。Flink叢集由至少一個JobManager和一個或多個TaskManager組成。客戶端程序將應用程式提交到JobManager。每個程序在單獨的Java虛擬機器(JVM)中執行。

  也就是說我們理論上支援所有資料的並行處理,只是拆分的粒度有大有小,這個就看使用者的業務場景了。我們明白了大資料處理並行的意義之後我們簡單描述一下Flink中大資料的處理過程,引入一個叫做資料流圖的概念,我個人理解為是一個數據處理單元,一個數據的有向流動圖。如下圖:沒有輸入端的叫做資料來源,資料來源下游是接收器,沒有輸出端的是資料卡槽,連結卡槽的是計算器。這就是一個完整的資料流。

        

  我們根據上圖來理解Flink的處理過程。輸入源項。我們都知道流處理跟批處理的一個最大的區別就是流處理是個持續性的輸入,批處理是有頭尾的資料段。Flink既支援持續性的輸入也支援批量的資料來源,我們可以從socket、kafka等來獲取持續的輸入也可以從txt、csv等獲取批量資料。

    資料通過網路或者IO傳進來之後我們要做的就是接收資料,這部分有幾個操作,首先我們要根據前面說的資料互動策略將資料進行拆分。舉個例子,我們通過keyby的方式去篩選我們關注的資料:

        DataStream<Trigger> triggerDataStream = env
                .addSource(new FlinkKafkaConsumer082<>(topic, new SimpleStringSchema(), properties))
                .filter(s -> {
                    try{
                        JSON.parseObject(s,Trigger.class);
                        return StringUtils.isEmpty(s)?false:true;
                    }catch (Exception e){
                        //----引數不合法
                        System.out.println("引數不合法===="+s);
                        return false;
                    }
                })
                .flatMap(new TriggerParse())
                .assignTimestampsAndWatermarks(new IngestionTimeExtractor<>())
                .keyBy(String.valueOf(new PromotionSelector()));


  注意低版本的keyBy需要傳入字串而高版本的可以傳入自定義的選擇器。在將流轉為keyDataStream之前我們可以進行引數的過濾和轉化,這裡就不詳述了。其中比較關鍵的操作是新增時間戳和水印。這牽扯到資料的並行和容災的實現。在Flink中會將子操作解析為一個子任務,每個子任務都會帶有時間戳。我們下面展開來講,首先要理解整個的任務拆分和執行的過程。

  Flink的架構遵循許多分散式系統實現的主工作模式。在Flink中,主程序稱為JobManager 1,工作程序稱為TaskManager。Flink叢集由至少一JobManager和一個或多個TaskManager組成。客戶端程序將應用程式提交到JobManager。每個程序在單獨的Java虛擬機器(JVM)中執行。

相關推薦

Flink學習筆記 flink入門)

1.我們通常將資料分成無界資料集和有界資料集。 在我們的生活當中,只要還在持續不斷的產生或者變化,這樣的資料集我們都說它是無界資料集。 2.我們通常將計算方式分成兩種: 第一種是實時的,我們也稱之為流式處理 第二種是離線的,我們也稱之為批處理 這個兩種計算方式在某種意義上是可以相

Flink學習筆記

  Flink作為一個分散式的流處理框架正在發起新一代的大資料處理革命,其優勢選列如下: 1、Flink支援三個時間語義:事件時間、攝取時間和處理時間。 2、Flink可以保證一次性故障語義以及至少一次語義。 3、Flink具有非常好的加工效能。它可以實現毫秒延遲以

AngularJS入門學習筆記

rect directive 技術分享 attr 兩個 ava 內容 module 大括號 首先聲明: 本博客源自於學習:跟我學AngularJs:AngularJs入門及第一個實例。通過學習,我自己的一些學習筆記。 1.AngularJS的一些基本特性 (1)使用雙大括號

Halcon學習筆記()

direct fusion 采集 das com nom pat 學習 filter 一、Halcon編程之圖像處理 1、讀取圖片 1、讀取單個圖片: 1.1 直接用算子read_image read_image (Image, ‘D:/3.tiff‘) 2

django學習筆記

site url ssa .com tin sessions .site add 註冊 2017年5月9日 ps 強烈推薦,django教程寫的很棒 http://code.ziqiangxuetang.com/django/django-tutorial.html 〇

Linux學習筆記()

版本 家目錄 動向 用戶 lin 絕對路徑 退出 鏈接庫 智能提示 1、Ubuntu 版本主版本年號+副版本月號,4月為穩定版,10月為測試版,單數為短期支持,雙數為長期支持。 2、shell為命令解析器,(shell--unix,bash--linux),大家也將bash

Tomcat學習筆記()

manage linux下 star bin servlet users 分析 clas oca Tomcat目錄結構的認識   tomcat是Apache旗下的一個開源Servlet的容器,實現了對Servlet和JSP技術支持。 通過http://tomcat

ELK學習筆記()---安裝ELK 5.x版

elk安裝ELK日誌平臺是一個完整的日誌分析系統,有三個開源工具構建組成,分別是:Elasticsearch、Logstash和Kibana。Elasticsearch用於數據分析和深度搜索;Logstash作用是從其他服務器上傳輸和轉發日誌,對其集中管理,進行分析;Kibana則是提供了強大的UI展示,將數

Git學習筆記()

編譯 缺點 watermark 索引 規範 存在 alt 回退 dsm 版本號控制系統簡單介紹 版本號控制系統是一種記錄若幹文件內容變化。以便將來查閱特定版本號修訂情況的系統。該系統不僅能夠度軟件源碼的文本文件進行版本號控制管理。也能夠對不論什麽其它類型的文件進行版本號

轉:C#制作ORM映射學習筆記 自定義Attribute類

技術 sage 其中 username pac ont 學習 collect reat 之前在做unity項目時發現只能用odbc連接數據庫,感覺非常的麻煩,因為之前做web開發的時候用慣了ORM映射,所以我想在unity中也用一下ORM(雖然我知道出於性能的考慮這樣做事不

ES6學習筆記()

message 提升 java syn log mes scrip 默認值 script 1.ES6學習之let、const (1).var、let、const 變(常)量聲明 ES5 只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景。 在ES6中l

backbone學習筆記

router 內置 ear cti small 失敗 str 視圖view 避免 事件event on(bind) 在對象上綁定一個函數,只要該event被觸發,綁定函數即被調用。可以用第三個參數提供一個上下文 off(unbind) 移除對象上綁定的函數,可以傳遞上下文和

Microsoft.SQL.Server2012.Performance.Tuning.Cookbook學習筆記()

str perm phi prev pid brush -c rpc enabled 一、Creating a trace or workload 註意點: In the Trace Properties dialog box, there is a checkbox op

python學習筆記()

href ons xxx 自動下載 fail 響應 cdn pat pda   因為工作需要,經常需要到新浪某博客去找資料,在博文目錄裏一頁頁地肉眼搜索,看到合適的標題再點擊開鏈接查看內容,知道合適地再復制下來。很煩人。於是一直有個想法,學會爬蟲。   拿著單位發的購書卡去

QuartZ .Net 學習筆記: 源碼下載與查看

net href cnblogs 方法 category solution ges 博客 存在 最近因為工作需要研究一下QuartZ .net , 之前也用過不過但沒有深入了解, 現想深入研究一下 網上相關QuartZ .net 的文章不少, 但大部分都是源於張善友的博

Redis 學習筆記

支持 模式 包括 sun 有序 網頁 hyper 原子 類型 Redis特點:   1、速度快   2、支持豐富的數據類型:字符串、哈希列表、集合   3、操作具有原子性,所有Redis操作都是原子操作   4、多實用工具,可應用如緩存,消息隊列,應用程序中任何短期數據,如

React學習筆記

pre class cnblogs har set head 源碼 span dom 一:安裝react 1:直接下載react源碼包,把需要用到的js文件引入自己的頁面即可。 2:BootCDN 的 React CDN 庫: 在頁面代碼中導入即可: <head&

【canvas學習筆記】基本認識

基本認識 設置 supported eight -c 失真 ont 之前 上下 <canvas>標簽定義了一塊畫布,畫布可以在網頁中繪制2D和3D圖象,現在先學習如何繪制2D圖象,繪制3D圖象屬於WebGL的內容(也就是網頁版的OpenGL,3D圖形接口)。 屬

bpm 學習筆記

alt 分享 images dev oca one .com .cn devel 名詞解釋: DC: Development Component WD:Web Dynpro Keep DC Local for Now bpm 學習筆記一

webpack學習筆記

官方 utf-8 call reat modules public 總結 asc pack webpack、gulp、grunt是前端打包功能工具;因為已經學習了gulp,而最近發現webpack很火,於是著手學習webpack。本篇是webpack學習筆記系列的第一篇,歡