成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于圖遍歷的Flink任務畫布模式下零代碼開發實現方案

開發 前端
在實際的實現過程中,遇到的問題往往比以上復雜很多。比如需要將更多的信息存儲在node節點和edge邊上。node上需要存儲并行度、算子處理前后的表schema等;edge需要存儲keyby的字段、上下游之間的數據shuffle的方式等等。

前言

提交一個DataSteam 的 Flink應用,需要經過 StreamGraph、JobGraph、ExecutionGraph 三個階段的轉換生成可成執行的有向無環圖(DAG),并在 Flink 集群上運行。而提交一個 Flink SQL 應用,其執行流程也類似,只是多了一步使用 flink-table-planer 模塊從SQL轉換成 StreamGraph 的過程。以下是利用Flink的 StreamGraph 通過低代碼的方式,來實現StreamGraph的生成,并最終實現 Flink 程序零代碼開發的解決方案。

一、Flink 相關概念

在Flink程序中,每個算子被稱作Operator,通過各個算子的處理最終得到期望的加工后數據。比如下面這段程序中,增加了Source, Fiter, Map, Sink 4個算子。

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream dataStream = env.addSource(new FlinkKafkaConsumer("topic"));


DataStream filteredStream = dataStream.filter(new FilterFunction() {
@Override
public boolean filter(Object value) throws Exception {return true;}
});


DataStream mapedStream = filteredStream.map(new MapFunction() {
@Override
public Object map(Object value) throws Exception {return value;}
});


mapedStream.addSink(new DiscardingSink());
env.execute("test-job");

StreamGraph

Flink的邏輯執行圖,描述了整個流處理任務的流程和數據流轉遞規則,包括了數據源(Source)、轉換算子(Transform)、數據目的端(Sink)等元素,以及它們之間的依賴關系和傳輸規則。StreamGraph是通過Flink的API或者DSL來構建的向無環圖(DAG),它與JobGraph之間是一一對應的關系。StreamGraph中的頂點稱為streamNode,是用來表示Operator算子的類,包含了算子uid、并行度,是否共享slot(SlotSharingGroup)等信息。邊稱作streamEdge。通過StreamingJobGraphGenerator類生成JobGraph。

圖片圖片

JobGraph

StreamGraph 經過 flink-optimizer 模塊優化后生成 JobGraph。生成 JobGraph 時,會將多個滿足條件的算子chain 鏈接到一起作為一個頂點(JobVertex), 在運行時對應1個 Task。Task 是 Flink 程序的基本執行單元,任務調度時將Task分配到TaskManager上執行。

圖片圖片

ExecutionGraph

物理執行圖是由JobGraph轉換而來,描述了整個流處理任務的物理執行細節,包括了任務的調度、任務的執行順序、任務之間的數據傳輸、任務的狀態管理等。Task會在步驟中拆分為多個SubTask。對應Task中的每個并行度。

圖片圖片

Physical Graph

PhysicalGraph是在執行時的ExecutionGraph。ExecutionGraph中的每一個頂點ExecutionJobVertex都對應一個或多個頂點ExecutionVertex,它們是物理執行圖中的節點。

二、畫布模式實現思路

實現流程

首先,我們采用畫布模式(拖拉拽方式)來實現Flink程序的組裝,將極大程度上方便我們復用部分加工的算子,最終實現零代碼的Flink應用開發。我們通過繪圖的方式,直接將內置的算子繪制在圖標上。如下所示:

圖片圖片

  1. 構建有向無環圖(DAG),并持久化。通過拖拉拽的方式(畫布模式)構建你的Flink應用,后端的持久化存儲采用鄰接表方式。我們在 mysql 關系數據庫中將 Node(算子:Source、Sink、中間加工邏輯算子)存儲到 flink_node 表中;將邊存到一張 flink_realation 表中。
  2. 重新組將Flink作業要組裝以上畫布模式的Flink應用,首先需要初始化好 StreamExecutionEnvironment 相關參數,其次將上述表中的 flink_node 和flink_edge 轉化為DataStream,并將轉化出的 DataStream 合理地拼接成一個 DataStream API Flink 應用程序。在將flink_node、flink_edge轉為為DataStream時選擇何種遍歷算法來組裝呢?我們知道有向無環圖的遍歷最常用的有:深度優先遍歷(DFS)和廣度優先遍歷(BFS)。這里我們采用了BFS算法+層序遍歷的方式,BFS便于在組裝的過程中將已visit到的node節點拼裝到其parent 的節點上。

總結

在實際的實現過程中,遇到的問題往往比以上復雜很多。比如需要將更多的信息存儲在node節點和edge邊上。node上需要存儲并行度、算子處理前后的表schema等;edge需要存儲keyby的字段、上下游之間的數據shuffle的方式等等。此外在內置的算子無法滿足用戶需求時,還需要考慮如何友好的支持自定義算子(UDF)的嵌入等問題。

責任編輯:武曉燕 來源: 京東云開發者
相關推薦

2020-06-05 14:48:11

零代碼低代碼開發

2021-12-30 11:30:13

人工智能機器學習技術

2023-06-07 07:23:09

Dooring專業版開發神器

2020-06-18 14:20:52

零代碼開發明道云

2020-06-05 14:43:25

零代碼平臺企業軟件代碼

2021-11-04 08:06:47

代碼編排平臺

2022-04-08 10:31:28

美團代碼建設

2024-04-07 08:31:56

文檔編輯引擎零代碼編輯器

2023-03-31 08:25:08

零代碼開源項目

2021-11-29 17:29:14

帆軟智數大會

2024-08-20 07:47:12

AI零代碼網關

2022-06-30 07:48:06

Dooring低代碼零代碼

2025-02-17 07:45:29

2025-05-21 14:20:50

2020-06-05 10:30:01

零代碼平臺軟件數據庫

2021-10-18 07:51:38

零代碼平臺思路

2024-02-21 08:07:10

業務json面板

2024-09-09 00:01:00

騰訊開源代碼

2021-04-28 16:10:48

開發腳手架 Spring

2009-02-12 09:55:22

AjaxMVCDojo
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久一区二区三区 | 久久久久久久国产 | 免费观看毛片 | www.精品国产| 亚洲国产精品一区在线观看 | 福利一区二区 | 欧美日韩视频在线 | 国产精品视频一区二区三区 | 国产精品一区二区三区在线 | 亚洲天堂中文字幕 | 狠狠干狠狠操 | 国产精品永久久久久久久www | 免费看av大片 | 国产精品成人在线观看 | 性高湖久久久久久久久aaaaa | 天天爽夜夜爽精品视频婷婷 | 欧美一区二区成人 | 99精品九九 | 在线国产一区 | 三级在线免费 | 人人爽日日躁夜夜躁尤物 | 黄色毛片免费看 | 夜久久 | 在线观看免费av网站 | 四虎影院在线免费观看 | 一区二区三区高清在线观看 | 热久久久| 97色在线视频 | 武道仙尊动漫在线观看 | 成人影院网站ww555久久精品 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩在线不卡 | 国产不卡一区 | 成年人在线观看视频 | 91久久精品国产 | 日日操日日干 | 91精品国产高清一区二区三区 | 九九热在线视频 | 成人免费在线观看 | 视频在线一区二区 | 色婷婷av一区二区三区软件 |