溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Flink中的Pravega怎么用

發(fā)布時(shí)間:2021-12-31 10:24:27 來(lái)源:億速云 閱讀:148 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“Flink中的Pravega怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Flink中的Pravega怎么用”這篇文章吧。

Pravega 簡(jiǎn)介,Pravega 進(jìn)階特性以及車聯(lián)網(wǎng)使用場(chǎng)景這四個(gè)方面介紹 Pravega,重點(diǎn)介紹 DellEMC 為何要研發(fā) Pravega,Pravega 解決了大數(shù)據(jù)處理平臺(tái)的哪些痛點(diǎn)以及與 Flink 結(jié)合會(huì)碰撞出怎樣的火花。

大數(shù)據(jù)架構(gòu)變遷



 
             

Lambda 架構(gòu)之痛


Flink中的Pravega怎么用


如何有效地提取和提供數(shù)據(jù),是大數(shù)據(jù)處理應(yīng)用架構(gòu)是否成功的關(guān)鍵之處。由于處理速度和頻率的不同,數(shù)據(jù)的攝取需要通過(guò)兩種策略來(lái)進(jìn)行。上圖就是典型的 Lambda架構(gòu):把大數(shù)據(jù)處理架構(gòu)分為批處理和實(shí)時(shí)流處理兩套獨(dú)立的計(jì)算基礎(chǔ)架構(gòu)。

對(duì)于實(shí)時(shí)處理來(lái)說(shuō),來(lái)自傳感器,移動(dòng)設(shè)備或者應(yīng)用日志的數(shù)據(jù)通常寫入消息隊(duì)列系統(tǒng)(如 Kafka), 消息隊(duì)列負(fù)責(zé)為流處理應(yīng)用提供數(shù)據(jù)的臨時(shí)緩沖。然后再使用 Spark Streaming 從 Kafka 中讀取數(shù)據(jù)做實(shí)時(shí)的流計(jì)算。但由于 Kafka 不會(huì)一直保存歷史數(shù)據(jù),因此如果用戶的商業(yè)邏輯是結(jié)合歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)同時(shí)做分析,那么這條流水線實(shí)際上是沒(méi)有辦法完成的。因此為了補(bǔ)償,需要額外開辟一條批處理的流水線,即圖中" Batch "部分。

對(duì)于批處理這條流水線來(lái)說(shuō),集合了非常多的的開源大數(shù)據(jù)組件如 ElasticSearch, Amazon S3, HDFS, Cassandra 以及 Spark 等。主要計(jì)算邏輯是是通過(guò) Spark 來(lái)實(shí)現(xiàn)大規(guī)模的 Map-Reduce 操作,優(yōu)點(diǎn)在于結(jié)果比較精確,因?yàn)榭梢越Y(jié)合所有歷史數(shù)據(jù)來(lái)進(jìn)行計(jì)算分析,缺點(diǎn)在于延遲會(huì)比較大。

這套經(jīng)典的大數(shù)據(jù)處理架構(gòu)可以總結(jié)出三個(gè)問(wèn)題:

  • 兩條流水線處理的延遲相差較大,無(wú)法同時(shí)結(jié)合兩條流水線進(jìn)行迅速的聚合操作,同時(shí)結(jié)合歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)的處理性能低下。
  • 數(shù)據(jù)存儲(chǔ)成本大。而在上圖的架構(gòu)中,相同的數(shù)據(jù)會(huì)在多個(gè)存儲(chǔ)組件中都存在一份或多份拷貝,數(shù)據(jù)的冗余無(wú)疑會(huì)大大增加企業(yè)客戶的成本。并且開源存儲(chǔ)的數(shù)據(jù)容錯(cuò)和持久化可靠性一直也是值得商榷的地方,對(duì)于數(shù)據(jù)安全敏感的企業(yè)用戶來(lái)說(shuō),需要嚴(yán)格保證數(shù)據(jù)的不丟失。
  • 重復(fù)開發(fā)。同樣的處理流程被兩條流水線進(jìn)行了兩次,相同的數(shù)據(jù)僅僅因?yàn)樘幚頃r(shí)間不同而要在不同的框架內(nèi)分別計(jì)算一次,無(wú)疑會(huì)增加數(shù)據(jù)開發(fā)者重復(fù)開發(fā)的負(fù)擔(dān)。


 
             

流式存儲(chǔ)的特點(diǎn)


在正式介紹 Pravega 之前,首先簡(jiǎn)單談?wù)劻魇綌?shù)據(jù)存儲(chǔ)的一些特點(diǎn)。

如果我們想要統(tǒng)一流批處理的大數(shù)據(jù)處理架構(gòu),其實(shí)對(duì)存儲(chǔ)有混合的要求。

Flink中的Pravega怎么用

  • 對(duì)于來(lái)自序列舊部分的歷史數(shù)據(jù),需要提供高吞吐的讀性能,即 catch-up read
  • 對(duì)于來(lái)自序列新部分的實(shí)時(shí)數(shù)據(jù),需要提供低延遲的 append-only 尾寫 tailing write 以及尾讀 tailing read


 
             

重構(gòu)的流式存儲(chǔ)架構(gòu)


Flink中的Pravega怎么用

像 Kafka,Cassandra 等分布式存儲(chǔ)組件來(lái)說(shuō),其存儲(chǔ)架構(gòu)都從上往下遵循從專有的日志存儲(chǔ),到本地文件,再到集群上的分布式存儲(chǔ)的這種模式。

而 Pravega 團(tuán)隊(duì)試圖重構(gòu)流式存儲(chǔ)的架構(gòu),引入 Pravega Stream 這一抽象概念作為流式數(shù)據(jù)存儲(chǔ)的基本單位。Stream 是命名的、持久的、僅追加的、無(wú)限的字節(jié)序列。

如上圖所示,存儲(chǔ)架構(gòu)最底層是基于可擴(kuò)展分布式云存儲(chǔ),中間層表示日志數(shù)據(jù)存儲(chǔ)為 Stream 來(lái)作為共享的存儲(chǔ)原語(yǔ),然后基于 Stream 可以向上提供不同功能的操作:如消息隊(duì)列,NoSQL,流式數(shù)據(jù)的全文搜索以及結(jié)合 Flink 來(lái)做實(shí)時(shí)和批分析。換句話說(shuō),Pravega 提供的 Stream 原語(yǔ)可以避免現(xiàn)有大數(shù)據(jù)架構(gòu)中原始數(shù)據(jù)在多個(gè)開源存儲(chǔ)搜索產(chǎn)品中移動(dòng)而產(chǎn)生的數(shù)據(jù)冗余現(xiàn)象,其在存儲(chǔ)層就完成了統(tǒng)一的數(shù)據(jù)湖。


 
             

重構(gòu)的大數(shù)據(jù)架構(gòu)

Flink中的Pravega怎么用

我們提出的大數(shù)據(jù)架構(gòu),以 Apache Flink 作為計(jì)算引擎,通過(guò)統(tǒng)一的模型/API來(lái)統(tǒng)一批處理和流處理。以 Pavega 作為存儲(chǔ)引擎,為流式數(shù)據(jù)存儲(chǔ)提供統(tǒng)一的抽象,使得對(duì)歷史和實(shí)時(shí)數(shù)據(jù)有一致的訪問(wèn)方式。兩者統(tǒng)一形成了從存儲(chǔ)到計(jì)算的閉環(huán),能夠同時(shí)應(yīng)對(duì)高吞吐的歷史數(shù)據(jù)和低延時(shí)的實(shí)時(shí)數(shù)據(jù)。同時(shí) Pravega 團(tuán)隊(duì)還開發(fā)了 Flink-Pravega Connector,為計(jì)算和存儲(chǔ)的整套流水線提供 Exactly-Once 的語(yǔ)義。

Pravega 簡(jiǎn)介


Pravega 的設(shè)計(jì)宗旨是為流的實(shí)時(shí)存儲(chǔ)提供解決方案。應(yīng)用程序?qū)?shù)據(jù)持久化存儲(chǔ)到 Pravega 中,Pravega 的 Stream 可以有無(wú)限制的數(shù)量并且持久化存儲(chǔ)任意長(zhǎng)時(shí)間,使用同樣的 Reader API 提供尾讀 (tail read) 和追趕讀 (catch-up read) 功能,能夠有效滿足離線計(jì)算和實(shí)時(shí)計(jì)算兩種處理方式的統(tǒng)一。

 
   

Pravega 基本概念


 

 

Flink中的Pravega怎么用


結(jié)合上圖簡(jiǎn)要介紹 Pravega 的基本概念:

  • Stream

Pravega 會(huì)把寫入的數(shù)據(jù)組織成 Stream,Stream 是命名的、持久的、僅追加的、無(wú)限的字節(jié)序列。

  • Stream Segments

Pravega Stream 會(huì)劃分為一個(gè)或多個(gè) Segments,相當(dāng)于 Stream 中數(shù)據(jù)的分片,它是一個(gè) append-only 的數(shù)據(jù)塊,而 Pravega 也是基于 Segment 基礎(chǔ)上實(shí)現(xiàn)自動(dòng)的彈性伸縮。Segment 的數(shù)量也會(huì)根據(jù)數(shù)據(jù)的流量進(jìn)行自動(dòng)的連續(xù)更新。

  • Event

Pravega's client API 允許用戶以 Event 為基本單位寫入和讀取數(shù)據(jù),Event 具體是Stream 內(nèi)部字節(jié)流的集合。如 IOT 傳感器的一次溫度記錄寫入 Pravega 就可以理解成為一個(gè) Event.

  • Routing Key

每一個(gè) Event 都會(huì)有一個(gè) Routing Key,它是用戶自定義的一個(gè)字符串,用來(lái)對(duì)相似的 Event 進(jìn)行分組。擁有相同 Routing Key 的 Event 都會(huì)被寫入相同的 Stream Segment 中。Pravega 通過(guò) Routing Key 來(lái)提供讀寫語(yǔ)義。

  • Reader Group

用于實(shí)現(xiàn)讀取數(shù)據(jù)的負(fù)載均衡??梢酝ㄟ^(guò)動(dòng)態(tài)增加或減少 Reader Group 中 Reader的數(shù)量來(lái)改變讀取數(shù)據(jù)的并發(fā)度。  更為詳細(xì)的介紹請(qǐng)參考 Pravega 官方文檔:

http://pravega.io/docs/latest/pravega-concepts

 
   

Pravega 系統(tǒng)架構(gòu)


 

Flink中的Pravega怎么用

Flink中的Pravega怎么用

在控制層面,Controller 作為 Pravega 集群的主節(jié)點(diǎn)對(duì)數(shù)據(jù)層面的 Segment Store做管理,提供對(duì)流數(shù)據(jù)的創(chuàng)建,更新以及刪除等操作。同時(shí)它還承擔(dān)實(shí)時(shí)監(jiān)測(cè)集群健康狀態(tài),獲取流數(shù)據(jù)信息,收集監(jiān)控指標(biāo)等功能。通常集群中會(huì)有3份 Controller 來(lái)保證高可用。

在數(shù)據(jù)層面,Segment Store 提供讀寫 Stream 內(nèi)數(shù)據(jù)的 API。在 Pravega 里面,數(shù)據(jù)是分層存儲(chǔ)的:

  • Tier 1 存儲(chǔ)

Tier1 的存儲(chǔ)通常部署在 Pravega 集群內(nèi)部,主要是提供對(duì)低延遲,短期的熱數(shù)據(jù)的存儲(chǔ)。在每個(gè) Segment Store 結(jié)點(diǎn)都有 Cache 以加快數(shù)據(jù)讀取速率,Pravega 使用Apache Bookeeper 來(lái)保證低延遲的日志存儲(chǔ)服務(wù)。

  • Long-term 存儲(chǔ)

Long-term 的存儲(chǔ)通常部署在 Pravega 集群外部,主要是提供對(duì)流數(shù)據(jù)的長(zhǎng)期存儲(chǔ),即冷數(shù)據(jù)的存儲(chǔ)。不僅支持 HDFS,NFS,還會(huì)支持企業(yè)級(jí)的存儲(chǔ)如 Dell EMC的 ECS,Isilon 等產(chǎn)品。

Pravega 進(jìn)階特性


 
   

讀寫分離


 

Flink中的Pravega怎么用


在 Tier1 存儲(chǔ)部分,寫入數(shù)據(jù)的時(shí)候通過(guò) Bookkeeper 保證了數(shù)據(jù)已經(jīng)在所有的 Segment Store 中落盤,保證了數(shù)據(jù)寫入成功。

讀寫分離有助于優(yōu)化讀寫性能:只從 Tier1 的 Cache 和 Long-term 存儲(chǔ)去讀,不去讀 Tier1 中的 Bookkeeper。

在客戶端向 Pravega 發(fā)起讀數(shù)據(jù)的請(qǐng)求的時(shí)候,Pravega 會(huì)決定這個(gè)數(shù)據(jù)究竟是從Tier1 的 Cache 進(jìn)行低延時(shí)的 tail-read,還是去 Long-term 的長(zhǎng)期存儲(chǔ)數(shù)據(jù)(對(duì)象存儲(chǔ)/NFS)去進(jìn)行一個(gè)高吞吐量的 catch-up read(如果數(shù)據(jù)不在 Cache,需要按需load 到 Cache 中)。讀操作是對(duì)客戶端透明的。

Tier1 的 Bookkeeper 在集群不出現(xiàn)故障的情況下永遠(yuǎn)不進(jìn)行讀取操作,只進(jìn)行寫入操作。

 
   

彈性伸縮


 

Flink中的Pravega怎么用


Stream 中的 Segment 數(shù)量會(huì)隨著 IO 負(fù)載而進(jìn)行彈性的自動(dòng)伸縮。以上圖為例子簡(jiǎn)單闡述:

  • 數(shù)據(jù)流在 t0 時(shí)刻寫入 Pravega,根據(jù)路由鍵數(shù)據(jù)會(huì)路由到 Segment0 和Segment1 中,如果數(shù)據(jù)寫入速度保持恒定不變,那么 Segemnt 數(shù)量不會(huì)發(fā)生變化。
  • 在 t1 時(shí)刻系統(tǒng)感知到 segment1 數(shù)據(jù)寫入速率加快,于是將其劃分為兩個(gè)部分:Segment2 和 Segment3。這時(shí)候 Segment1 會(huì)進(jìn)入 Sealed 狀態(tài),不再接受寫入數(shù)據(jù),數(shù)據(jù)會(huì)根據(jù)路由鍵分別重定向到 Segment2 和 Segment3.
  • 與 Scale-Up 操作相對(duì)應(yīng),系統(tǒng)也可以根據(jù)數(shù)據(jù)寫入速度變慢后提供 Scale-Down 操作。如在 t3 時(shí)刻系統(tǒng) Segment2 和 Segment5 寫入流量減少,因此合并成新的 Segment6。

 
   

端到端的彈性伸縮


 

Flink中的Pravega怎么用


Pravega 是以 Kubernetes Operator 來(lái)對(duì)集群各組件進(jìn)行有狀態(tài)的應(yīng)用部署,這可以使得應(yīng)用的彈性伸縮更為靈活方便。

Pravega 最近也在和 Ververica 進(jìn)行深度合作,致力于在 Pravega 端實(shí)現(xiàn) Kubernetes Pod 級(jí)別的彈性伸縮同時(shí)在 Flink 端通過(guò) rescaling Flink 的 Task 數(shù)量來(lái)實(shí)現(xiàn)彈性伸縮。

 
   

事務(wù)性寫入


 

Flink中的Pravega怎么用


Pravega 同樣提供事務(wù)性的寫入操作。在提交事務(wù)之前,數(shù)據(jù)會(huì)根據(jù)路由鍵寫入到不同的 Transaction Segment 中,這時(shí)候 Segment 對(duì)于 Reader 來(lái)說(shuō)是不可見的。只有在事務(wù)提交之后,Transaction Segment 才會(huì)各自追加到 Stream Segment 的末尾,這時(shí)候 Segment 對(duì)于 Reader 才是可見的。寫入事務(wù)的支持也是實(shí)現(xiàn)與 Flink 的端到端 Exactly-Once 語(yǔ)義的關(guān)鍵。

 
   

Pravega vs. Kafka


 

Flink中的Pravega怎么用


首先最關(guān)鍵的不同在于兩者的定位:Kafka 的定位是消息隊(duì)列,而 Pravega 的定位是存儲(chǔ),會(huì)更關(guān)注于數(shù)據(jù)的動(dòng)態(tài)伸縮,安全性,完整性等存儲(chǔ)特性。

對(duì)于流式數(shù)據(jù)處理來(lái)說(shuō),數(shù)據(jù)應(yīng)該被視為連續(xù)和無(wú)限的。Kafka 作為基于本地文件系統(tǒng)的一個(gè)消息隊(duì)列,  通過(guò)采用添加到日志文件的末尾并跟蹤其內(nèi)容( offset 機(jī)制)的方式來(lái)模擬無(wú)限的數(shù)據(jù)流。  然而這種方式必然受限于本地文件系統(tǒng)的文件描述符上限以及磁盤容量,因此并非無(wú)限。

而兩者的比較在圖中給出了比較詳細(xì)的總結(jié),不再贅述。


 
             

Pravega Flink Connector


為了更方便與 Flink 的結(jié)合使用,我們還提供了 Pravega Flink Connector(https://github.com/pravega/flink-connectors), Pravega 團(tuán)隊(duì)還計(jì)劃將該 Connector 貢獻(xiàn)到 Flink 社區(qū)。Connector 提供以下特性:

  • 對(duì) Reader 和 Writer 都提供了 Exactly-once 語(yǔ)義保證,確保整條流水線端到端的 Exactly-Once
  • 與 Flink 的 checkpoints 和 savepoints 機(jī)制的無(wú)縫耦合
  • 支持高吞吐低延遲的并發(fā)讀寫
  • Table API 來(lái)統(tǒng)一對(duì) Pravega Sream 的流批統(tǒng)一處理

車聯(lián)網(wǎng)使用場(chǎng)景

Flink中的Pravega怎么用


以無(wú)人駕駛車聯(lián)網(wǎng)這種能夠產(chǎn)生海量 PB 級(jí)數(shù)據(jù)的應(yīng)用場(chǎng)景為例:

  • 需要對(duì)車況路況數(shù)據(jù)做實(shí)時(shí)的處理以及時(shí)對(duì)路線規(guī)劃做出微觀的預(yù)測(cè)和規(guī)劃
  • 需要對(duì)較長(zhǎng)期行駛數(shù)據(jù)運(yùn)行機(jī)器學(xué)習(xí)算法來(lái)做路線的宏觀預(yù)測(cè)和規(guī)劃,這屬于批處理
  • 同時(shí)需要結(jié)合實(shí)時(shí)處理和批處理,利用歷史數(shù)據(jù)生成的機(jī)器學(xué)習(xí)模型和實(shí)時(shí)數(shù)據(jù)反饋來(lái)優(yōu)化檢測(cè)結(jié)果

而客戶關(guān)注的關(guān)鍵指標(biāo)主要在:

  • 如何保證高效地端到端處理速度
  • 如何盡可能減少機(jī)器學(xué)習(xí)模型的訓(xùn)練時(shí)間
  • 如何盡可能降低存儲(chǔ)數(shù)據(jù)的消耗與成本

下面給出引入 Pravega 前后的解決方案比較。

 
   

解決方案比較


 

Flink中的Pravega怎么用

Flink中的Pravega怎么用


Pravega 的引入無(wú)疑大大簡(jiǎn)潔了大數(shù)據(jù)處理的架構(gòu):

  • Pravega 作為抽象的存儲(chǔ)接口,數(shù)據(jù)在 Pravega 層就實(shí)現(xiàn)了一個(gè)數(shù)據(jù)湖:批處理,實(shí)時(shí)處理和全文搜索都只需要從 Pravega 中獲取數(shù)據(jù)。數(shù)據(jù)只在 Pravega 存儲(chǔ)一份,而不需要像第一種方案中數(shù)據(jù)冗余地存儲(chǔ)在 Kafka,ElasticSearch 和 Long Term Storage 中,這可以極大減少了企業(yè)用戶數(shù)據(jù)存儲(chǔ)的成本。
  • Pravega 能夠提供自動(dòng)的 Tier Down,無(wú)需引入 Flume 等組件來(lái)進(jìn)行額外的 ETL 開發(fā)。
  • 組件得到精簡(jiǎn),從原來(lái)的 Kafka+Flume+HDFS+ElasticSearch+Kibana+Spark+SparkStreaming 精簡(jiǎn)到 Pravega+Flink+Kibana+HDFS ,減輕運(yùn)維人員的運(yùn)維壓力。
  • Flink 能夠提供流批處理統(tǒng)一的功能,無(wú)需為相同的數(shù)據(jù)提供兩套獨(dú)立的處理代碼。

以上是“Flink中的Pravega怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI