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

    浏览量

    40804
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68319
收藏 人收藏

    评论

    相关推荐

    隔空科技联合涂鸦智能推出微波雷达感应灯代码实现方案

    隔空科技推出的5.8G微波雷达感应系列芯片方案,具有高集成、高性能、抗干扰能力强、低功耗、高性价比等优势,同时得益于接入涂鸦智能的代码实现方案
    发表于 10-15 15:11 3293次阅读
    隔空科技联合涂鸦智能推出微波雷达感应灯<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 1607次阅读

    实现代码开发还需要多长时间

    代码开发平台,想要通过代码开发平台来摆脱对SaaS公司的依赖。下面一起来了解一
    发表于 05-09 11:38 757次阅读

    代码开发平台工作原理

    ,通过代码开发平台就可以无需编写任何代码就可以完成应用程序的开发。下面一起来了解一相关知识吧
    发表于 05-09 15:00 1949次阅读

    什么是代码开发

    代码开发平台,无需编写代码就能够完成应用程序的开发。下面一起来了解一相关的知识吧! 什么是
    发表于 05-09 15:54 2658次阅读

    代码与低代码快速开发平台有什么区别

    现在市场上出现了很多的代码和低代码开发平台,这两者都是快速开发工具,都可以提高应用程序的开发
    发表于 05-09 16:08 1291次阅读

    代码开发平台能够给企业带来哪些好处

    平台,无需编写任何代码就能够完成应用程序的开发,业务人员自己就能完成应用程序的开发工作。你知道代码开发
    发表于 05-09 16:15 809次阅读

    浅谈代码开发的价值在哪里

    来了解一相关的知识吧! 代码开发的价值在哪里: 从Softeware 到No Softeware由美国企业主导,由No Softeware 到No Code这一步很有可能由中国企业
    发表于 05-13 15:03 737次阅读

    代码平台和低代码平台分别适合开发哪些应用程序

    代码平台和低代码平台都是现在比较火的快速开发平台,它们的目的都是为了提高应用程序的开发速度,很多人可能都会问他们之间有什么区别,应该如何选
    发表于 05-13 17:09 949次阅读

    代码开发平台为什么会受到企业管理者的欢迎

    随着应用程序开发进程的不断推进,越来越多的企业通过使用管理软件提高了内部管理的效率,尤其是代码开发平台的出现使企业管理者也可以体验一应用
    发表于 05-14 11:15 789次阅读

    玩转5元MCU,合宙Air32代码实现USB转串口

    难以掌握。今天我们将带领大家实现代码做到使用Air32F103实现USB转串口——波特率最高支持4.5M,而且Win10可以免驱使用;一颗Air32F103最
    的头像 发表于 12-19 16:00 3317次阅读
    玩转5元MCU,合宙Air32<b class='flag-5'>零</b><b class='flag-5'>代码</b><b class='flag-5'>实现</b>USB转串口

    代码如何实现造数据

    项目开发过程中,总会遇到一些需要测试数据的场景,但是造数据特别是造大量的数据这个事情,有时候也是要费一番功夫的,今天给大家带来一款造数据神器,让你代码实现造数据。 这个神器就是我们日
    的头像 发表于 09-25 11:23 506次阅读
    <b class='flag-5'>零</b><b class='flag-5'>代码</b>如何<b class='flag-5'>实现</b>造数据

    RA-RTT体验代码点亮LED灯

    介绍如何代码体验点亮LED灯。
    发表于 10-12 12:43 419次阅读
    RA-RTT体验<b class='flag-5'>零</b><b class='flag-5'>代码</b>点亮LED灯