實時計算 | 任務除錯太麻煩?教你一招搞定

語言: CN / TW / HK

導讀:

本文從實時開發中的任務除錯痛點出發,和大家分享下有數實時計算平臺的操作實踐。

通過傳統的離線資料分析,企業僅能針對歷史資料進行事後分析。 而隨著資料量的爆發式增 長,以及市場環境和業務需求的快速變化,企業對資料時效性的 要求在不斷提高。 如在網際網路行業中,客戶端需要滿足用 戶對個性化產 品和服務的需求; 在金融行業中, 企業需要更快速地進行風險控制和趨勢分析; 在新零售行業中,企業需要更快速地獲取 銷售資料,做出業務 決策等。 因此 ,企業需要實時資料計算的能力來滿足實時資料分析的需求。

1

實時開發中的痛點

在實時任務的開發過程中,任務除錯是整個開發流程中比較耗時同時操作比較繁瑣的環節。在除錯階段,使用者普遍會面臨以下幾個痛點。

1.1 任務頻繁上下線

在除錯過程中,需要驗證任務程式碼邏輯是否正確,任務配置引數是否合理,就需要重複任務上線、執行、下線調整重啟這一過程。

(實時任務開發流程)

1.2 需要建立測試結果表

由於實時任務在除錯過程中需要不斷提交到線上執行,除錯過程中會產生髒資料,因此一般需要建立一張測試的結果表用於除錯,在除錯完成後再通過修改程式碼將結果表替換為正式的結果表。這個替換表的過程涉及到程式碼變更,可能會引入新的問題,同時維護測試表需要額外的成本。

1.3 無法使用特定的測試資料進行除錯

將任務實際上線執行時,使用的源端資料是任務中指定的源端,大部分實時任務中使用訊息佇列中的流式資料作為源端,若想在除錯階段使用特定的測試資料進行除錯,還需要使用者在源端中自行插入指定資料,或使用測試源端表,在除錯結束正式上線前替換為正式的源端表。操作複雜,同時也有可能在替換源端或插入資料時引入新的問題。

2

針對痛點的解決方案

針對上述痛點 有數實時計算平臺提供了 相應的解決方案,即 實時開發除錯的功能。除錯功能分為兩個步驟,第一步是獲取除錯資料,第二步是使用除錯資料進行任務本地除錯。

2.1 獲取除錯資料

在獲取除錯資料步驟中,目前提供了線上取樣、上傳本地資料、線上維護測試資料的功能。使用者可直接使用線上取樣功能,針對任務中使用的源表進行取樣,在後續的除錯過程中即可直接使用取樣的資料。

針對使用者想使用特定的測試資料進行任務除錯的需求,平臺支援使用者在線上取樣後對取樣結果進行編輯和儲存,儲存取樣資料後,這份資料將作為這個任務可長期重複使用的除錯資料記錄在任務中。此外使用者還可以下載源端資料結構檔案,自行填寫源端資料後上傳至任務中,作為此任務的測試樣本進行儲存。

2.2 任務本地除錯

在獲取到除錯的樣本資料後,使用者無需將任務提交上線即可開始除錯,同時任務的除錯結果將不會寫入結果表中,僅會在開發IDE中進行展示,方便使用者確認程式碼邏輯是否正確。

通過任務本地除錯的功能,免除了使用者需要頻繁上線任務的過程,也省去了建立測試結果表和替換結果表程式碼的過程,為實時任務開發提高了效率,也保障了線上資料的安全。

(使用除錯功能後實時任務開發流程)

通過除錯任務功能,使用者在開發環節中即可驗證程式碼邏輯。後續有數實時計算平臺將在執行引數調優方面持續做出優化,徹底解決使用者除錯實時任務難的問題。

3

應用案例

3.1 案例場景

業務方需要使用商品售賣結果的實時資料進行報表展示,資料加工團隊需要使用 Kafka 訊息佇列中的商品實時銷售情況關聯包含商品詳情的 MySQL 維表,將結果寫入 MySQL 結果表中供業務方查詢。

3.2 開發前準備

使用的 Kafka topic:testgoods, 資料預覽:

使用的 MySQL 維表:goods_info,包含商品ID和商品名稱, 資料預覽:

表結構:

3.3 建立任務

(1)建立一個 SQL 任務

(2)編寫業務邏輯

set 'testgoods.connections.group.id' = 'mysql_join_example';
--設定Kafka消費者組id,需要更改為自己命名的groupid
set 'testgoods.scan.startup.mode' = 'earliest-offset';
--設定讀取訊息佇列的位置
create view v1 as
select
PROCTIME() as proctime,
itemID,
itemType,
onSellTime,
price
from
poc.testgoods;
insert into
`ljy_test_mysql`.`sloth_test`.`goods_join_mysql_sink`
select
v1.itemID,
v1.itemType,
v1.onSellTime,
v1.price,
goods_info.itemName as itemName
from
v1
left join `ljy_test_mysql`.`sloth_test`.`goods_info` FOR SYSTEM_TIME AS of v1.proctime on v1.itemID = goods_info.itemID;

3.4 除錯任務

(1)進行源表和維表取樣

點選頁面中的新增 source 按鈕,在 source 塊中選擇源表和維表,點選 source 塊中的除錯按鈕進行取樣。

源表 source 塊:此處提前將 Kafka的topic:testgoods登記為一張流表,因此有資料庫、表的選擇。

源表取樣結果:

維表 source 塊:

維表取樣結果:

在獲取到取樣結果後,雙擊結果欄中的數值可修改樣本資料,點選儲存按鈕可將樣本儲存為正式樣本用於後續多次除錯。

(2)除錯任務

點選 SQL 塊操作欄中的除錯按鈕,系統將自動解析程式碼中使用的源表和維表並展示在除錯側邊欄中,使用者選擇每張源表和維表需要使用的樣本資料後,即可對任務程式碼開始除錯,除錯結果展示在程式碼框下方。

除錯結果符合使用者預期,程式碼邏輯驗證通過,任務可提交上線。

4

有數實時計算平臺介紹

目前 Apache Flink 已成為大資料實時計算的事實標準,具備高效能、低延遲等特點,但作為一款開源產品,社群版 Apache Flink 在產品化方面並未投入較大精力,因此企業使用者在使用社群版 Flink 時,開發門檻高、運維成本高,針對這些問題,我們基於 Apache Flink 構建了一站式、企業級,高效能實時大資料處理系統。


在開發方面,為使用者提供了一站式的開發控制檯進行任務開發,提供元資料中心進行元資料管理,內建豐富 connector 達到開箱即用的效果,保證了與使用者使用的大資料元件無縫對接,提供UDF管理功能、線上除錯功能、版本管理功能,大大降低了實時計算任務的開發門檻。

在運維方面,提供全鏈路監控告警、任務是在檢索和基於元資料中心的任務血緣,幫助使用者快速發現問題定位問題,提供企業級許可權管理保障線上資料安全。

(有數實時計算平臺與 Apache Flink 的功能對比)

(有數實時計算 架構)

作者簡介

佳鈺,網易數帆有數實時計算平臺產品經理

分享,點贊,在看,安排一下?