溫馨提示×

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

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

如何進(jìn)行Pulsar Functions 的深入分析

發(fā)布時(shí)間:2022-01-04 10:46:20 來源:億速云 閱讀:164 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)如何進(jìn)行Pulsar Functions 的深入分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Pulsar Functions 簡(jiǎn)單介紹

Pulsar Functions 是一個(gè)輕量級(jí)的計(jì)算框架,其主要目的是為了提供一個(gè)部署簡(jiǎn)單、運(yùn)維簡(jiǎn)單的平臺(tái),主要突出“簡(jiǎn)單”使用的特點(diǎn)。

大概運(yùn)行過程就是在 input topic 中接收消息,進(jìn)入 functions 中進(jìn)行運(yùn)算和消息處理,最后輸出到 output topic 中的過程。

如何進(jìn)行Pulsar Functions 的深入分析

Pulsar Functions 可以覆蓋 90% 以上情況的流處理場(chǎng)景。比如:消息過濾、消息路由、消息增強(qiáng)等。更多使用場(chǎng)景可以參考之前發(fā)布的技術(shù)博客:基于 Pulsar Functions 的事件處理設(shè)計(jì)模式

Pulsar Functions 主要分為三大模塊:Instance、Runtime、Function-worker。

在 Runtime 層面主要支持三種形式:thread、process 和外部支持的 Kubernetes。

更多關(guān)于 Pulsar Functions 介紹和基礎(chǔ)層源碼講解,可以參考回放視頻:01:00-13:20 時(shí)間段。



深入了解 Functions


此分享的解析角度,從 functions 內(nèi)部幾個(gè)重要節(jié)點(diǎn)出發(fā)。主要是:如何提交 Pulsar Functions、Functions Worker 如何調(diào)度以及如何運(yùn)行 Pulsar Functions。

|| Submission Workflow

在執(zhí)行/創(chuàng)建一個(gè) function 時(shí),需要通過 `FunctionConfig` 的形式暴露給用戶,用戶通過指定 `FunctionConfig` 來進(jìn)行 functions 內(nèi)部操作。

Functions 可以提交到任意 worker,通過相應(yīng)的 Json 文件進(jìn)行相應(yīng) tenant/namespace/name 等輸入/輸出配置的提供。

在配置構(gòu)建完成后,會(huì)有一個(gè) AuthN/AuthZ checks 過程,去檢測(cè)在配置 function 過程中是否添加了與「加密」相關(guān)的設(shè)置。之后便會(huì)對(duì) `FunctionConfig` 文件內(nèi)格式以及其他方面進(jìn)行再次核實(shí)。

最終這些 jar 包會(huì)存儲(chǔ)在 BookKeeper 端,方便后續(xù)再次調(diào)用。

此時(shí)完成以上操作后,submission workflow 會(huì)把所有的 functions 提交到 MetaData Topic,并用 map from <FQFN, FunctionMetaData> 格式進(jìn)行記錄。


FQFN 就是 Fully Qualified Function Name,格式就是 tenant、namespace、functions name 三個(gè)字段拼合而成。

如何進(jìn)行Pulsar Functions 的深入分析

FQFN 作為存儲(chǔ)元數(shù)據(jù)的 key,會(huì)把用戶提供的 `FunctionConfig` 字段填充到 Function MetaData 中。圖中的 MetaData Topic Tailer,主要目的是進(jìn)行實(shí)時(shí)監(jiān)測(cè) MetaData Topic,根據(jù)實(shí)時(shí)更新變化寫入等動(dòng)態(tài),進(jìn)行后續(xù)操作。

在 Functions 內(nèi)部沒有真正開始執(zhí)行「創(chuàng)建/更新/刪除」等操作之前,需要進(jìn)行狀態(tài)更新。大體過程為:

如何進(jìn)行Pulsar Functions 的深入分析

  • 復(fù)制當(dāng)前狀態(tài)

  • 進(jìn)行狀態(tài)合并更新

  • 增加當(dāng)前版本數(shù)

  • 將數(shù)據(jù)寫入 MetaData Topic

  • Tailer 進(jìn)行數(shù)據(jù)讀取和驗(yàn)證

  • 如果沒有沖突,則整個(gè)更新


上面的整個(gè)流程是在單臺(tái) function worker 的情況下,但是在多臺(tái) function worker 中就有可能會(huì)出現(xiàn)沖突。

在多個(gè) function worker 運(yùn)行的場(chǎng)景下,當(dāng)對(duì)某一個(gè) function 進(jìn)行并發(fā)更新時(shí),會(huì)出現(xiàn)沖突的情況。  當(dāng)出現(xiàn)沖突時(shí),其解決方式是使用 First Writer Win 的策略,即當(dāng)?shù)谝粋€(gè)請(qǐng)求被成功接收之后,其它請(qǐng)求將會(huì)被拒絕。  

經(jīng)過以上過程的處理,我們可以看出在 submission workflow 過程中,functions 有優(yōu)點(diǎn)也有缺點(diǎn)。比如可以提交到任意 worker、有固定的狀態(tài)機(jī)。當(dāng)然無限的數(shù)據(jù)增長(zhǎng)卻沒有配置相關(guān)壓縮數(shù)據(jù)的一些操作,著實(shí)有一丟丟可惜。

更多關(guān)于提交 Functions 的操作介紹,可以參考回放視頻 13:30-37:00 時(shí)間段。

|| Scheduling workflow

當(dāng) function worker 有了上述元數(shù)據(jù)信息后,那么接下來將如何去調(diào)度整個(gè)流程呢?

Function worker 的整個(gè)調(diào)度過程都在    `IScheduler Interface`   接口中執(zhí)行。

如何進(jìn)行Pulsar Functions 的深入分析


同時(shí) Function worker 會(huì)在以下狀態(tài)時(shí)開啟「調(diào)度模式」。

  • CRUD 操作:創(chuàng)建/更新/刪除

  • Worker 變動(dòng):如創(chuàng)建新 worker、leadership 發(fā)生變化等


雖然 function 可以提交到任意 worker 中,但是調(diào)度過程卻只能在具有「leader」屬性的 worker 中進(jìn)行。

如何進(jìn)行Pulsar Functions 的深入分析


那么如何確認(rèn)「誰是老板」呢?

在以前直播中我們也有專門講過 Pulsar 消息的訂閱模式,其中有一個(gè)是 Failover 模式。這里 Pulsar Functions 也借用了此模式。

當(dāng)所有 worker 進(jìn)入時(shí),會(huì)去以 failover 模式訂閱「Coordination Topic」。按照 failover 的規(guī)則,同一時(shí)間只會(huì)有一個(gè)活躍的「小朋友」成為「老板」。所以以此類推,上圖的 worker2 也就成為了那一時(shí)間段的 leader。

有了 Leader Worker 后,就需要它進(jìn)行數(shù)據(jù)的寫入,將其寫入到 Assignment Topic 中,用來記錄調(diào)度信息。

如何進(jìn)行Pulsar Functions 的深入分析

更多關(guān)于調(diào)度流程的講解,可以參考回放視頻 37:00-45:00 時(shí)間段。

|| Execution Workflow

那么提交并調(diào)度完成后,整個(gè) Functions 是如何運(yùn)行起來的呢?

如何進(jìn)行Pulsar Functions 的深入分析


在上圖中,Assignment Tailer 監(jiān)聽到 Topic 中的變化,此時(shí)就會(huì)將此動(dòng)作變化傳遞給 Function RunTime Manager。同時(shí)借由 Spawner 進(jìn)行一些列后續(xù)操作。

Spawner 是使用 Functions 時(shí)的一個(gè)抽象執(zhí)行環(huán)境,也具有 Functions 生命周期管理的功能,同時(shí)通過 GRPC 通過進(jìn)行與 Functions 的數(shù)據(jù)交互。

Future Work
未來關(guān)于 Pulsar Functions 的后續(xù)更新和產(chǎn)品方向,一個(gè)是會(huì)在現(xiàn)有功能上進(jìn)行進(jìn)一步的完善和改進(jìn),比如前邊提到的 Function MetaData Topic 數(shù)據(jù)無限增長(zhǎng)的情況,那么后續(xù)是否給其研發(fā)一個(gè)可壓縮的功能;還有就是動(dòng)態(tài) RunTime selection 的擴(kuò)充模式等。

另一個(gè)就是繼續(xù)擴(kuò)展出 Pulsar Functions 的其他新功能,如正在開發(fā)中的 Function Mesh??梢云诖幌屡叮?/section>

Q&A 
Q:Pulsar functions 可以直接從第三方 key-value database 中讀取數(shù)據(jù),處理完后再將結(jié)果寫入key-value database 嗎?還是只能通過 Pulsar IO 先寫入 Pulsar topic,Pulsar Functions 再從該 topic 讀取數(shù)據(jù)做處理?
A:Pulsar Functions 是不支持的,可以借助 Pulsar IO 的功能去實(shí)現(xiàn)。就是按照問題后部分描述的方式進(jìn)行。
看完上述內(nèi)容,你們對(duì)如何進(jìn)行Pulsar Functions 的深入分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
向AI問一下細(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