<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我們?cè)趯W(xué)習(xí)Flink的時(shí)候,到底在學(xué)習(xí)什么?

          共 3592字,需瀏覽 8分鐘

           ·

          2021-02-19 21:31


          點(diǎn)擊上方藍(lán)色字體,選擇“設(shè)為星標(biāo)

          回復(fù)”資源“獲取更多資源

          這是一篇指南和大綱性質(zhì)的文章。
          Flink經(jīng)過2年左右的官方和社區(qū)的大規(guī)模推廣,現(xiàn)在國(guó)內(nèi)的一眾大小企業(yè)基本都在使用。
          后臺(tái)很多小伙伴都在問Flink的學(xué)習(xí)路徑,那么我們?cè)趯W(xué)習(xí)Flink的時(shí)候,到底重點(diǎn)學(xué)習(xí)哪些東西呢?
          從我個(gè)人的學(xué)習(xí)經(jīng)歷來看,在學(xué)習(xí)任何一個(gè)新出現(xiàn)的框架或者技術(shù)點(diǎn)的時(shí)候,核心方法就是:【先看背景,整理大綱,逐個(gè)擊破】。

          核心背景和論文

          知其然且知其所以然。
          Flink框架自提出到實(shí)現(xiàn),是有深厚的理論作為背書的,其中又以《Lightweight Asynchronous Snapshots for Distributed Dataflows》最為核心,本文提出了一種輕量級(jí)的異步分布式快照(Asynchronous Barrier Snapshot, 簡(jiǎn)稱ABS)方法,既支持無環(huán)圖,又支持有環(huán)圖,而且可以做到線性擴(kuò)展。
          傳統(tǒng)的流式計(jì)算由算子節(jié)點(diǎn)和連接算子的數(shù)據(jù)管道組成,傳統(tǒng)的分布式快照方案就像拍照片一樣,把每個(gè)算子內(nèi)的state狀態(tài)和彼此相連管道中的數(shù)據(jù)都保存下來。ABS方案的提出對(duì)傳統(tǒng)的流式計(jì)算引擎的設(shè)計(jì)方案可以說是顛覆性的。
          另外一篇是《Apache FlinkTM: Stream and Batch Processing in a Single Engine》,嚴(yán)格來說這篇論文是一篇Flink的概要設(shè)計(jì)文檔??梢援?dāng)成一個(gè)技術(shù)文檔來看,對(duì)于很多我們難以理解的設(shè)計(jì)都有很大的幫助。
          此外,《The world beyond batch: streaming 101/102》是由Google的大神Tyler Akidau寫的兩篇文章。第1篇文章,在深入了解時(shí)間,對(duì)批處理和流式數(shù)據(jù)常見處理方式進(jìn)行高階闡述之前,介紹一些基本的背景知識(shí)和術(shù)語。第2篇文章主要介紹包括Google Dataflow大數(shù)據(jù)平臺(tái)使用的統(tǒng)一批量+流式傳輸模式。這兩篇文章對(duì)于我們理解Flink中的時(shí)間、窗口、觸發(fā)器等等的實(shí)現(xiàn)有十分重要的指導(dǎo)意義。并且作者還在YouTube上傳了動(dòng)畫,可謂用心良苦,各位各憑本事翻墻去找吧。

          基礎(chǔ)概念

          如果你讀過了上面的核心論文,那么你就會(huì)對(duì)Flink中一些概念的提出有更為深刻的理解,在Flink這個(gè)框架中,延用了很多之前Hadoop體系或者Spark中的設(shè)計(jì)概念。
          這里面最核心的概念包括:
          • 流(無界流、有界流)和轉(zhuǎn)換

          • State和checkpoint

          • 并行度

          • Workers,Slots,Resources

          • 時(shí)間和窗口

          • ...

          此外還有一些例如:分布式緩存、重啟策略等。當(dāng)然在Flink SQL中還有一些特定的概念,例如:Window Aggregate、Non-window Aggregate、Group Aggregate、Append Stream等等。
          上面這些核心概念是我們學(xué)習(xí)Flink框架的基礎(chǔ)。

          核心模塊

          我們直接把官網(wǎng)的圖拿過來,這張圖上基本就是Flink框架整體的設(shè)計(jì)思想和模塊要拆分:

          那么對(duì)于我們數(shù)據(jù)開發(fā)來說,里面最核心的包分配我們看一下Github:

          我把其中核心的實(shí)現(xiàn)用紅框圈出來了。

          源碼閱讀

          根據(jù)上面我們選擇的核心模塊,我們大概可以得知,整個(gè)Flink的核心實(shí)現(xiàn)包含了:
          • Flink 基本組件和邏輯計(jì)劃:介紹了 Flink 的基本組件、集群構(gòu)建的過程、以及客戶端邏輯計(jì)劃的生成過程

          • Flink 物理計(jì)劃生成:介紹了 Flink JobManager 對(duì)邏輯計(jì)劃的運(yùn)行時(shí)抽象,運(yùn)行時(shí)物理計(jì)劃的生成和管理等

          • Jobmanager 基本組件和TaskManager的基本組件

          • Flink 算子的生命周期:介紹了 Flink 的算子從構(gòu)建、生成、運(yùn)行、及銷毀的過程

          • Flink 網(wǎng)絡(luò)棧:介紹了 Flink 網(wǎng)絡(luò)層的抽象,包括中間結(jié)果抽象、輸入輸出管理、BackPressure 技術(shù)、Netty 連接等

          • Flink的水印和Checkpoint

          • Flink-scheduler:介紹 Flink 的任務(wù)調(diào)度算法及負(fù)載均衡

          • Flink對(duì)用戶代碼異常處理:介紹作業(yè)的代碼異常后 Flink 的處理邏輯,從而更好的理解 Flink 是如何保證了 exactly-once 的計(jì)算語義

          • Flink Table/SQL 執(zhí)行流程、Flink和Hive的集成等

          行業(yè)應(yīng)用

          Flink的行業(yè)應(yīng)用,我們?cè)谥暗奈恼轮蟹磸?fù)提及。主要的應(yīng)用:
          • 實(shí)時(shí)數(shù)據(jù)計(jì)算

          如果你對(duì)大數(shù)據(jù)技術(shù)有所接觸,那么下面的這些需求場(chǎng)景你應(yīng)該并不陌生:
          各大電商每年雙十一都會(huì)直播,實(shí)時(shí)監(jiān)控大屏是如何做到的?
          公司想看一下大促中銷量最好的商品 TOP5?
          我是公司的運(yùn)維,希望能實(shí)時(shí)接收到服務(wù)器的負(fù)載情況?
          我們可以看到,數(shù)據(jù)計(jì)算場(chǎng)景需要從原始數(shù)據(jù)中提取有價(jià)值的信息和指標(biāo),比如上面提到的實(shí)時(shí)銷售額、銷量的 TOP5,以及服務(wù)器的負(fù)載情況等。
          傳統(tǒng)的分析方式通常是利用批查詢,或?qū)⑹录ㄉa(chǎn)上一般是消息)記錄下來并基于此形成有限數(shù)據(jù)集(表)構(gòu)建應(yīng)用來完成。為了得到最新數(shù)據(jù)的計(jì)算結(jié)果,必須先將它們寫入表中并重新執(zhí)行 SQL 查詢,然后將結(jié)果寫入存儲(chǔ)系統(tǒng)比如 MySQL 中,再生成報(bào)告。
          Apache Flink 同時(shí)支持流式及批量分析應(yīng)用,這就是我們所說的批流一體。Flink 在上述的需求場(chǎng)景中承擔(dān)了數(shù)據(jù)的實(shí)時(shí)采集、實(shí)時(shí)計(jì)算和下游發(fā)送。
          • 實(shí)時(shí)數(shù)據(jù)倉庫和 ETL

          ETL(Extract-Transform-Load)的目的是將業(yè)務(wù)系統(tǒng)的數(shù)據(jù)經(jīng)過抽取、清洗轉(zhuǎn)換之后加載到數(shù)據(jù)倉庫的過程。

          傳統(tǒng)的離線數(shù)據(jù)倉庫將業(yè)務(wù)數(shù)據(jù)集中進(jìn)行存儲(chǔ)后,以固定的計(jì)算邏輯定時(shí)進(jìn)行 ETL 和其他建模后產(chǎn)出報(bào)表等應(yīng)用。離線數(shù)據(jù)倉庫主要是構(gòu)建 T+1 的離線數(shù)據(jù),通過定時(shí)任務(wù)每天拉取增量數(shù)據(jù),然后創(chuàng)建各個(gè)業(yè)務(wù)相關(guān)的主題維度數(shù)據(jù),對(duì)外提供 T+1 的數(shù)據(jù)查詢接口。
          上圖展示了離線數(shù)據(jù)倉庫 ETL 和實(shí)時(shí)數(shù)據(jù)倉庫的差異,可以看到離線數(shù)據(jù)倉庫的計(jì)算和數(shù)據(jù)的實(shí)時(shí)性均較差。數(shù)據(jù)本身的價(jià)值隨著時(shí)間的流逝會(huì)逐步減弱,因此數(shù)據(jù)發(fā)生后必須盡快的達(dá)到用戶的手中,實(shí)時(shí)數(shù)倉的構(gòu)建需求也應(yīng)運(yùn)而生。
          實(shí)時(shí)數(shù)據(jù)倉庫的建設(shè)是“數(shù)據(jù)智能 BI”必不可少的一環(huán),也是大規(guī)模數(shù)據(jù)應(yīng)用中必然面臨的挑戰(zhàn)。
          Flink 在實(shí)時(shí)數(shù)倉和實(shí)時(shí) ETL 中有天然的優(yōu)勢(shì):
          • 狀態(tài)管理,實(shí)時(shí)數(shù)倉里面會(huì)進(jìn)行很多的聚合計(jì)算,這些都需要對(duì)于狀態(tài)進(jìn)行訪問和管理,F(xiàn)link 支持強(qiáng)大的狀態(tài)管理

          • 豐富的 API,F(xiàn)link 提供極為豐富的多層次 API,包括 Stream API、Table API 及 Flink SQL

          • 生態(tài)完善,實(shí)時(shí)數(shù)倉的用途廣泛,F(xiàn)link 支持多種存儲(chǔ)(HDFS、ES 等)

          • 批流一體,F(xiàn)link 已經(jīng)在將流計(jì)算和批計(jì)算的 API 進(jìn)行統(tǒng)一。

          • 事件驅(qū)動(dòng)型應(yīng)用

          你是否有這樣的需求:
          我們公司有幾萬臺(tái)服務(wù)器,希望能從服務(wù)器上報(bào)的消息中將 CPU、MEM、LOAD 信息分離出來做分析,然后觸發(fā)自定義的規(guī)則進(jìn)行報(bào)警?我是公司的安全運(yùn)維人員,希望能從每天的訪問日志中識(shí)別爬蟲程序,并且進(jìn)行 IP 限制?
          事件驅(qū)動(dòng)型應(yīng)用是一類具有狀態(tài)的應(yīng)用,它從一個(gè)或多個(gè)事件流提取數(shù)據(jù),并根據(jù)到來的事件觸發(fā)計(jì)算、狀態(tài)更新或其他外部動(dòng)作。
          在傳統(tǒng)架構(gòu)中,我們需要讀寫遠(yuǎn)程事務(wù)型數(shù)據(jù)庫,比如 MySQL。在事件驅(qū)動(dòng)應(yīng)用中數(shù)據(jù)和計(jì)算不會(huì)分離,應(yīng)用只需訪問本地(內(nèi)存或磁盤)即可獲取數(shù)據(jù),所以具有更高的吞吐和更低的延遲。

          Flink 的以下特性完美的支持了事件驅(qū)動(dòng)型應(yīng)用:
          • 高效的狀態(tài)管理,F(xiàn)link 自帶的 State Backend 可以很好的存儲(chǔ)中間狀態(tài)信息

          • 豐富的窗口支持,F(xiàn)link 支持包含滾動(dòng)窗口、滑動(dòng)窗口及其他窗口

          • 多種時(shí)間語義,F(xiàn)link 支持 Event Time、Processing Time 和 Ingestion Time

          • 不同級(jí)別的容錯(cuò),F(xiàn)link 支持 At Least Once 或 Exactly Once 容錯(cuò)級(jí)別

          我們也看到了,F(xiàn)link目前在各大公司的應(yīng)用基本集中在以上3個(gè)方面。此外,未來的數(shù)據(jù)領(lǐng)域我們看到了一些例如:
          • Flink和IceBerg等框架結(jié)合打造未來的數(shù)據(jù)湖



          • 基于Flink的IOT解決方案

          上述一些新興的領(lǐng)域,F(xiàn)link也會(huì)有一些應(yīng)用。此外,如果你把Flink當(dāng)成了算法執(zhí)行引擎,那么FlinkML可能就是你研究的重點(diǎn)。




          一線互聯(lián)網(wǎng)公司面試進(jìn)階全攻略

          Flink新增特性 | CDC(Change Data Capture) 原理和實(shí)踐應(yīng)用

          Flink SQL on Zeppelin - 打造自己的可視化Flink SQL開發(fā)平臺(tái)

          瀏覽 102
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本成人福利 | 成人午夜网站 | 日韩三级乱伦 | 久久网欧美大香蕉 | 国产一级a毛一级a看免费视奥美 |