精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

京東云 ? 來源:京東物流 吳云濤 ? 作者:京東物流 吳云濤 ? 2024-11-05 10:35 ? 次閱讀

作者:京東物流 吳云濤

前言

提交一個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。

wKgZoWcphHWAQFJAAAC415z1P0g850.png

JobGraph

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

wKgaoWcphHaAKW72AACaIFmRfRo762.png

ExecutionGraph

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

wKgZoWcphHeAAbXGAAEbheQco6M795.png

Physical Graph

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

二、畫布模式實現思路

實現流程

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

wKgaoWcphHiAIu3nAACUlYmDjpU408.png

構建有向無環圖(DAG),并持久化。通過拖拉拽的方式(畫布模式)構建你的Flink應用,后端的持久化存儲采用鄰接表方式。我們在 mysql 關系數據庫中將 Node(算子:Source、Sink、中間加工邏輯算子)存儲到 flink_node 表中;將邊存到一張 flink_realation 表中。

重新組將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)的嵌入等問題。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發
    +關注

    關注

    0

    文章

    366

    瀏覽量

    40807
  • 代碼
    +關注

    關注

    30

    文章

    4744

    瀏覽量

    68344
收藏 人收藏

    評論

    相關推薦

    隔空科技聯合涂鴉智能推出微波雷達感應燈代碼實現方案

    隔空科技推出的5.8G微波雷達感應系列芯片方案,具有高集成、高性能、抗干擾能力強、低功耗、高性價比等優勢,同時得益于接入涂鴉智能的代碼實現方案
    發表于 10-15 15:11 ?3294次閱讀
    隔空科技聯合涂鴉智能推出微波雷達感應燈<b class='flag-5'>零</b><b class='flag-5'>代碼</b><b class='flag-5'>實現</b><b class='flag-5'>方案</b>

    RA-RTT體驗代碼點亮LED燈

    很榮幸能參加RA-RTT瑞薩開發板試用活動。目的介紹如何代碼體驗點亮LED燈。開發板RA2L1開發板實現步聚1、打開RT-Thread S
    發表于 02-22 15:13

    CC430代碼

    CC430代碼分享,有需要的朋友可以下來參考
    發表于 05-25 10:26 ?20次下載

    什么是代碼應用開發平臺?它有哪些功能模塊

    無需編寫代碼就能夠完成應用程序的開發,所以非技術人員也可以在代碼開發平臺上完成應用程序的開發
    發表于 04-08 11:53 ?1611次閱讀

    實現代碼開發還需要多長時間

    代碼開發平臺,想要通過代碼開發平臺來擺脫對SaaS公司的依賴。下面一起來了解一
    發表于 05-09 11:38 ?757次閱讀

    代碼開發平臺工作原理

    ,通過代碼開發平臺就可以無需編寫任何代碼就可以完成應用程序的開發。下面一起來了解一相關知識吧
    發表于 05-09 15:00 ?1949次閱讀

    什么是代碼開發

    代碼開發平臺,無需編寫代碼就能夠完成應用程序的開發。下面一起來了解一相關的知識吧! 什么是
    發表于 05-09 15:54 ?2661次閱讀

    代碼與低代碼快速開發平臺有什么區別

    現在市場上出現了很多的代碼和低代碼開發平臺,這兩者都是快速開發工具,都可以提高應用程序的開發
    發表于 05-09 16:08 ?1292次閱讀

    代碼開發平臺能夠給企業帶來哪些好處

    平臺,無需編寫任何代碼就能夠完成應用程序的開發,業務人員自己就能完成應用程序的開發工作。你知道代碼開發
    發表于 05-09 16:15 ?811次閱讀

    淺談代碼開發的價值在哪里

    來了解一相關的知識吧! 代碼開發的價值在哪里: 從Softeware 到No Softeware由美國企業主導,由No Softeware 到No Code這一步很有可能由中國企業
    發表于 05-13 15:03 ?737次閱讀

    代碼平臺和低代碼平臺分別適合開發哪些應用程序

    代碼平臺和低代碼平臺都是現在比較火的快速開發平臺,它們的目的都是為了提高應用程序的開發速度,很多人可能都會問他們之間有什么區別,應該如何選
    發表于 05-13 17:09 ?950次閱讀

    代碼開發平臺為什么會受到企業管理者的歡迎

    隨著應用程序開發進程的不斷推進,越來越多的企業通過使用管理軟件提高了內部管理的效率,尤其是代碼開發平臺的出現使企業管理者也可以體驗一應用
    發表于 05-14 11:15 ?790次閱讀

    玩轉5元MCU,合宙Air32代碼實現USB轉串口

    難以掌握。今天我們將帶領大家實現代碼做到使用Air32F103實現USB轉串口——波特率最高支持4.5M,而且Win10可以免驅使用;一顆Air32F103最
    的頭像 發表于 12-19 16:00 ?3324次閱讀
    玩轉5元MCU,合宙Air32<b class='flag-5'>零</b><b class='flag-5'>代碼</b><b class='flag-5'>實現</b>USB轉串口

    代碼如何實現造數據

    項目開發過程中,總會遇到一些需要測試數據的場景,但是造數據特別是造大量的數據這個事情,有時候也是要費一番功夫的,今天給大家帶來一款造數據神器,讓你代碼實現造數據。 這個神器就是我們日
    的頭像 發表于 09-25 11:23 ?507次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>代碼</b>如何<b class='flag-5'>實現</b>造數據

    RA-RTT體驗代碼點亮LED燈

    介紹如何代碼體驗點亮LED燈。
    發表于 10-12 12:43 ?420次閱讀
    RA-RTT體驗<b class='flag-5'>零</b><b class='flag-5'>代碼</b>點亮LED燈