阿裡蔣曉偉談計算引擎Flink和Spark的異同與優勢

来源:https://www.cnblogs.com/xiaodf/archive/2019/10/28/11751110.html
-Advertisement-
Play Games

本文整理自雲棲社區之前對阿裡搜索事業部資深搜索專家蔣曉偉老師的一次採訪,蔣曉偉老師,認真而嚴謹。在加入阿裡之前,他曾就職於西雅圖的臉書,負責過調度系統,Timeline Infra和Messenger的項目。而後在微軟的SQL Server引擎擔任過Principal Engineer,負責關係數據 ...


本文整理自雲棲社區之前對阿裡搜索事業部資深搜索專家蔣曉偉老師的一次採訪,蔣曉偉老師,認真而嚴謹。在加入阿裡之前,他曾就職於西雅圖的臉書,負責過調度系統,Timeline Infra和Messenger的項目。而後在微軟的SQL Server引擎擔任過Principal Engineer,負責關係資料庫的架構工作。2014年加入阿裡以後,作為阿裡搜索事業部資深搜索專家,他負責搜索工程的數據團隊。

談起大數據框架,業內尤其對於開源大數據生態圈的許多優秀的計算框架耳熟能詳,比如Spark、Hadoop、Storm等。但對於Apache基金會的頂級項目的Flink,知道的都比較有限。而更多是對比Spark,比如知乎的這篇帖子討論的就是“Apache Flink和Apache Spark有什麼異同?它們的發展前景分別怎樣?”

為了幫助更多朋友瞭解Flink,和阿裡阿裡流計算和批處理引擎Blink。雲棲社區特別採訪了蔣曉偉。

雲棲社區:相比Spark、Hadoop、Storm等,是什麼樣的場景需求讓阿裡搜索團隊選擇了Flink?

蔣曉偉:首先我們希望有個流計算和批處理的一體化處理方案。Spark和Flink都具有流和批處理能力,但是他們的做法是相反的。Spark Streaming是把流轉化成一個個小的批來處理,這種方案的一個問題是我們需要的延遲越低,額外開銷占的比例就會越大,這導致了Spark Streaming很難做到秒級甚至亞秒級的延遲。Flink是把批當作一種有限的流,這種做法的一個特點是在流和批共用大部分代碼的同時還能夠保留批處理特有的一系列的優化。因為這個原因,如果要用一套引擎來解決流和批處理,那就必須以流處理為基礎,所以我們決定先選擇一個優秀的流處理引擎。從功能上流處理可以分為無狀態的和有狀態兩種。在流處理的框架里引入狀態管理大大提升了系統的表達能力,讓用戶能夠很方便地實現複雜的處理邏輯,是流處理在功能上的一個飛躍。流處理引擎對一致性的支持可以分為:best effort,at least once 和 exactly once。Exactly once的語義才能真正保證完全的一致性,Flink採用的架構比較優雅地實現了exactly once的有狀態流處理。另外在保證了一致性的前提下Flink在性能上也是相當優秀的。總結一下,我們覺得在流處理方面Flink在功能,延遲,一致性和性能上綜合來看是目前社區最優秀的。所以我們決定採用它來實現流和批的一體化方案。最後,還有一個很重要的原因是Flink有一個比較活躍的社區。

雲棲社區:如何看待Flink、Spark、Hadoop、Storm等技術發展和不同場景下的優勢對比?比如與Spark相反,Flink把批處理化作流處理,這種方式在使用時是否有什麼限制?

蔣曉偉:大數據是從批處理開始的,所以很多系統都是從批處理做起,包括Spark。在批處理上Spark有著較深的積累,是一個比較優秀的系統。隨著技術的發展,很多原來只有批處理的業務都有了實時的需求,流處理將會變得越來越重要,甚至成為大數據處理的主要場景。Flink把批當作流來處理有個很重要的優點是如果我們在流中引入一個blocking的運算元,我們還能接著做批處理特有的優化,這個是以流處理為基礎的計算引擎的一大優勢。所以我認為在架構上這種設計在批處理上是可以做到最優的,而且比傳統的做法還有一些特別的優勢,當然工程上的實現也很重要。

雲棲社區:阿裡巴巴搜索的流計算和批處理引擎的Blink是基於Apache Flink項目並且在API相容的。那麼在Flink使用過程中有趟過哪些坑?Blink在哪些方面做出了改進?

蔣曉偉:Flink在架構上有很多創新,是非常領先的。但是在工程的實現上有一些不足之處。比如說不同的job的任務可能運行在同一個進程里,這樣一個job的問題可能影響其他job的穩定性。Flink的工程實現也不能把集群的資源最合理地利用起來。Blink重新實行了Yarn的結合,完全解決了這些問題。另外Flink是通過checkpoint的機制來保證一致性的,但原有的機制效率比較低,導致在狀態較大的時候不可用,Blink大大優化了checkpoint,能夠高效地處理很大的狀態。穩定性和scalability在生產上都是至關重要的,通過在大集群上的錘煉,Blink解決了一系列這方面的問題和瓶頸,已經成為一個能夠支撐核心業務的計算引擎。同時我們擴展了Flink的Streaming SQL層,使得它能夠比較完備地支持較複雜的業務。

雲棲社區:是否有反饋Flink社區的計劃?以及您認為Flink未來的殺手級應用會是什麼?

蔣曉偉:我們正在和Flink的發明者Stephan溝通把Blink反饋回Flink社區,這樣才能讓社區更強大,而社區更強大我們也會更強大。我們計劃的第一步是把Blink的Yarn的實現反饋回去,並且抽象出一個支持不同調度系統的方案。接下來會把我們在checkpoint,穩定性,scalability, 可運維性,SQL等方面的改進和優化都陸續反饋回去。我覺得Flink在流計算上的優勢是非常大的,隨著線上學習等流計算需求的增長,在這方面Flink一定會大放異彩。

雲棲社區:從Facebook、微軟到阿裡,技術開發經驗豐富。那麼對於技術開發者的成長,有哪些建議或者經驗分享?以及推薦一本最喜歡的技術書籍。

蔣曉偉:我覺得在學習中和工作很重要的一點是遇到任何問題一定要刨根問底,不要停留在現象和一些淺層次的直觀的原因上,一定要找到本質。一個比較好的判定標誌是你能不能一句話給別人講清楚。要做到這個可能會讓你一開始花更多的時間,甚至覺得自己學得比別人慢很多,但是你學過的每個東西都是完全吃透的,而很多東西的原理是相通的,在一段時間的積累後你會發現學任何新東西就像看說明書一樣了。書我還真推薦不了,因為我一般是有問題現查,反正是說明書。

訂閱關註微信公眾號《大數據技術進階》,及時獲取更多大數據架構和應用相關技術文章!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Oracle am.2019/10/22 C:\app\Administrator\product C:\app\Administrator\oradata C:\app\Administrator\oradata\orcl XX.CTL 控制文件 XX.DBF 數據文件 XX.LOG 日誌文件 j ...
  • 基於列表+Hash的LRU演算法實現。 訪問某個熱點時,先將其從原來的位置刪除,再將其插入列表的表頭 為使讀取及刪除操作的時間複雜度為O(1),使用hash存儲熱點的信息的鍵值 訪問某個熱點時,先將其從原來的位置刪除,再將其插入列表的表頭 為使讀取及刪除操作的時間複雜度為O(1),使用hash存儲熱點 ...
  • 修改密碼報異常mysql> update user set password=password("y1jhcfzX!") where user="root"; 異常[root@ddtest-mysql01 ~]# mysql -uroot -pEnter password: ERROR 1045 ( ...
  • 摘自: 達夢常用語句 https://blog.csdn.net/zhangxuechao_/article/details/47300953 達夢資料庫管理之表空間 https://blog.csdn.net/lucky_fly/article/details/81566616 --查看表空間se ...
  • [toc] 1、使用比較運算符查詢 MongoDB | 運算 | $gt | 大於 $lt | 小於 $gte | 大於等於 $lte | 小於等於歐 $ne | 不等於 2、使用關鍵字查詢 2.1、in/not in 關鍵字 2.2、size 關鍵字 對於值為list的欄位,可以對list的長度( ...
  • [toc] 1、數據類型 MongoDB常見類型 | 說明 | Object ID|文檔ID String|字元串,最常用,必須是有效的UTF 8 Boolean|存儲一個布爾值,true或false Integer|整數可以是32位或64位,這取決於伺服器 Double|存儲浮點值 Arrays| ...
  • 問題:資料庫內直接操作導致 錯誤 0xc020901c: 數據流任務 1: 源 - yndata1$.輸出[Excel 源輸出] 上的 源 - yndata1$.輸出[Excel 源輸出].列[indications] 出錯。返回的列狀態是:“文本被截斷,或者一個或多個字元在目標代碼頁中沒有匹配項。 ...
  • 這篇文章主要介紹了Oracle排名函數(Rank)實例詳解,需要的朋友可以參考下 --已知:兩種排名方式(分區和不分區):使用和不使用partition --兩種計算方式(連續,不連續),對應函數:dense_rank,rank ·查詢原始數據:學號,姓名,科目名,成績 select * from  ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...