實時計算框架 Flink 新方向:打造「大數據+AI」 未來更多可能
雷鋒網 AI 開發者按: 自 Flink 開源以來,越來越多的開發者加入了 Flink 社區。僅僅 2019 年,Flink 在 GitHub 上的 Star 數量翻了一倍,Contributor 數量也呈現出持續增長的態勢。而它目前在 GitHub 上的訪問量,也位居 Apache 項目中前三,是 Apache 基金會中最為活躍的項目之一。
Flink 發展如此之快,除了開源使得更多開發者與企業可以接觸與使用之外,它在 AI 方面的部署也起著很大作用。看似 Flink 的主要應用場景還是數據分析,但它面向多個 AI 場景,已經提供了深度學習引擎協同等功能。而對于這一與時俱進的 Flink,我們也許可以看到更多可能的未來。
Flink?Blink?Alink?
很多人在談到 Flink 的時候,也通常會提 Blink 和 Alink。從名字可以看出,它們與 Flink 有著很深的聯系,Blink 和 Alink 都是基于?Flink 而得。
Flink 狀態計算中的數據流
-
Flink
Flink 是歐洲的一個大數據研究項目,早期專注于批計算,再到后來 Flink 發展成為了 Apache 的頂級大數據項目。
具體而言,Flink 擅長處理無邊界和有邊界的數據集。對時間和狀態的精確控制使 Flink 的運行時能夠在無限制的流上運行任何類型的應用程序。有界流由專門為固定大小的數據集設計的算法和數據結構在內部進行處理。
Flink 架構
其核心是一個流式的數據流執行引擎,能夠基于同一個 Flink 運行時,提供支持流處理和批處理兩種類型應用。它在運行時的架構主要包含幾個部分:Client、JobManager(master 節點) 和 TaskManger(slave 節點),是一個高效和分布式的通用數據處理平臺。
更多信息:
? https://flink.apache.org/ ? ??
-
Blink
Blink 是阿里在 2018 年推出的內部改良 Flink,主要針對業務場景需求,做了如下幾個優化:
-
??優化了集群調度策略使得 Blink 能夠更好更合理地利用集群資源;
-
??優化了 checkpoint 機制,使得 Blink 能夠很高效地處理擁有很大狀態的 job;
-
??優化了 failover 的策略,使得 job 在異常的時候能夠更快恢復,從而對業務延遲造成更少的影響;
-
??設計了異步算子,使得 Blink 能夠在即使被讀取外部數據阻塞的同時還能繼續處理其他 event,從而獲得整體非常高的吞吐率。
一個典型的 Blink workflow 示意圖
目前,Blink 已開放給開源社區。今年 8 月發布的 Flink 1.9.0 是阿里內部版本 Blink 合并入 Flink 后的首次發版,在今天的 Flink Forward 2019 大會上,阿里發布了 Flink 1.10 版本功能前瞻,正式版本預計于 2020 年 1 月發布。
-
Alink?
而 Alink 則是基于 Flink 的機器學習算法庫,由阿里云機器學習 PAI 團隊開發。除了支持阿里的平臺外,還支持 Kafka,HDFS 和 HBase 等一系列開源數據存儲平臺。
這是一套分布式、批流一體的機器學習算法庫,它既非常好地利用了 Flink 批流一體的計算能力以及在機器學習基礎設施上的一些優勢,又結合了一些業務場景需求,在機器學習方面有很強的性能。
開發者和數據分析師可以利用開源代碼來構建軟件功能,例如統計分析、機器學習、實時預測、個性化推薦和異常檢測。而 Alink 提供的一系列算法,可以幫助處理機器學習任務,例如 AI 驅動的客戶服務和產品推薦。
近日,阿里云計算部門已在 GitHub 上發布了其 Alink 平臺的「核心代碼」,并上傳了一系列算法庫,支持批處理和流處理,有利于機器學習相關任務。
更多信息:
https://developer.aliyun.com/article/738040?utm_content=g_1000092211 ?
攜 AI 前行的 Flink
近年來,AI 場景發展得如火如荼,同時其計算規模也越來越大。這也讓專注于數據處理的 Flink 有了較大的發展空間。
在 Flink 社區對 AI 的大力支持下,Flink 機器學習方面開發了支持 AI 場景,以及和 AI 原生的深度學習引擎實現協同,例如: Flink + TensorFlow、Flink + PyTorch 等,并提供大數據+AI 的全鏈路解決方案。
-
ML Pipeline
2019 年,Flink 在 AI 方面首先部署了機器學習基礎設施,第一件事情便實現了 Flink ML Lib 的基礎 API,即 ML Pipeline。
ML Pipeline 的核心是機器學習的流程,其中的核心概念包含 Transformer、Estimator、Model 等。Flink 機器學習算法的開發人員可以使用這套 API 去開發不同的 Transformer、Estimator、Model,并實現各種經典的機器學習算法。
同時,基于 ML Pipeline 這套 API 還能夠自由組合組件來構建機器學習的訓練流程和預測流程。
-
Python 支持
對于 AI 算法的開發人員而言,目前主流的語言即為 Python。因此,Flink 對于 Python 的支持也尤為重要。
在 2019 年,Flink 社區也投入了大量的資源來完善 Flink 的 Python 生態,并開發了 PyFlink 項目;與此同時,也在 Flink 1.9 版本中實現了 Python 對于 Table API 的支持。
除此之外,Flink 1.10 版本還重點支持了 Python UDF 特性。這個部分直接使用成熟的框架,Flink 社區與 Beam 社區之間開展了良好的合作,并使用了 Beam 的 Python 資源,比如:SDK、Framework 以及數據通信格式等。
-
Alink 的開放
據相關數據顯示,將 Alink 與主流的機器學習算法庫進行對比,它不僅能夠支持批式訓練的機器學習場景,也能夠支持在線的機器學習場景。
而 Alink 在離線的機器學習場景下與主流的 Spark ML 的對比顯示,其在功能集合上所有算法基本一致。
在性能對比方面,Alink 和 Spark ML 在離線訓練場景下的性能基本在一個水平線上。但 Alink 支持部分算法通過流式方法進行計算,更好地實現在線機器學習。
-
AI Flow
另外,AI 部分的新項目——AI Flow 也值得關注。AI Flow 是大數據及 AI 的處理流程平臺,在 AI Flow 中定義不同數據之間的關系以及元數據格式等就能夠非常方便地搭建一套大數據及 AI 處理的流程。
整個 Workflow 并不綁定某一引擎或者平臺,但是用戶可以借助 Flink 批流一體的能力去搭建自己的大數據及 AI 解決方案。目前,AI Flow 項目正在準備中,預計將于明年的第一季度以與 Alink 相同的模式進行開源。
Apache Flink 未來計劃
如今,Flink 的主要應用場景基本上還是數據分析,尤其是實時數據分析。Flink 本質上是一款流式數據處理引擎,覆蓋的場景主要是實時數據分析、實時風控、實時 ETL 處理等。未來,社區希望 Flink 演化成為統一的數據引擎。
-
? 在離線數據處理方面,希望 Flink 能夠在流數據處理的基礎之上進一步實現批與流的統一,提供統一的數據處理和分析的解決方案。
-
? 另一方面,朝著在線數據分析處理的方向演進,即利用 Flink 的核心優勢、Event-Driven Function 的能力以及 Flink 自帶的狀態管理等特性實現在線的函數計算。
而對于 Alink,未來 Flink 社區希望使用新開發的 Alink 的算法,逐漸替換掉原有的一套機器學習算法庫 FlinkML 的算法,并期待著 Alink 成為新一代版本的 FlinkML。
但由于 Alink 包含了非常多的機器學習算法,預計往 Flink 貢獻或發布的時候整個過程耗時會比較長,所以 Alink 已經單獨開源,大家如果有需要的可以先用起來。
PyAlink 在 notebook 中使用示例
后面貢獻進展比較順利的情況下,Alink 應該能完全合并到 FlinkML,也就是直接進入 Flink 生態的主干,這時 FlinkML 就可以跟 SparkML 完全對應起來。
當然,在未來 Flink 也會進一步完善對于 Python API 和 UDF 的支持,在 ML Pipeline 上更多地支持 Python,同時也希望引入更多成熟的 Python 庫。
Github 開源地址:
https://github.com/alibaba/Alink ?
https://github.com/apache/flink ?
雷鋒網 AI 開發者? 雷鋒網 (公眾號:雷鋒網)
。