导读
来自数数科技的大数据工程师 王健达 为我们带来了 《Apache SeaTunnel Examples 模块的使用和设计初衷》。在讲述如何遇见Apache SeaTunnel以及Examples 模块的使用和设计初衷以外,王健达还将向大家分享他作为开源贡献者参加社区活动的经历与故事。
个人简介
Profile
王健达,数数科技资深大数据工程师,就职于数数科技的大数据研发部门,主要负责数数科技二次开发和数据集成体系的研发工作。
本次分享分为三个部分:
初识Apache SeaTunnel (Incubating)
Examples模块设计与使用
我与开源社区
01 初识 SeaTunnel
首先我来讲一下我是怎么接触到Apache SeaTunnel (Incubating)的。我就职的数数科技主要深耕游戏行业,研究用户行为分析,为客户提供大数据智能分析平台。
上图左下角是我们平台的功能模块划分/架构层级图,可以分为数据接入层、业务应用层、实时计算层、数据持久层、以及运维监控层。最开始我主要从事实时计算和数据接入方面的开发工作,但是随着数据集成需求的日益暴增,我开始着手公司的二次开发和数据集成平台的研发。
二次开发和数据集成平台的定位是公司产品和客户业务系统的数据路由,既能完成产品内部的数据循环,也可以完成与外部系统的数据交换,满足用户高效稳定的数据流转需求。
数据同步场景包括广告、变现、ROI打通。
行业内有一个热度很高的数据集成需求,即游戏内用户行为数据与广告成本和广告变现数据的打通,实现ROI等计算分析。图中中间部分的模块就是我们系统标配的用户行为分析数据,一般用户会将其游戏内的行为数据上报到我们的系统中。左边的模块是引流渠道成本,比较常见的平台有appsflyer和adjust,这些平台会将他们所需要的引流成本数据通过集成平台接入到我们的系统中。
右边的广告收益平台,例如ironSource、TopOn等,会把这部分的广告收益也接入到我们的分析平台中,打通整个游戏数据与广告成本变现数据的闭环。这时只需要通过计算游戏内付费广告收益,除以广告成本,就可以得到我们经常说的RIO指标,我们用的是DataX。
但随着客户规模和用户体量的扩大,出现了很多问题,为了解决问题,我在调研中接触到了Apache SeaTunnel (Incubating)。
DataX VS SeaTunnel
DS
这是我对于 DataX VS SeaTunnel 的对比总结。
因为SeaTunnel支持Spark和Flink引擎,天生就支持分布式读取和写入,而DataX的分布式需要付费才可以使用。
在性能上,依托于Flink和Spark框架,在某些特定的场景下,SeaTunnel的性能可以高出DataX数倍,而DataX就受限于单点服务器的性能。
在数据量支持上,SeaTunnel可以随着计算引擎的扩容而横向扩展,而DataX在遇到数据量特别大时只能选择将服务器升配,但这种纵向的扩容从成本或者操作便利性上都不易操作。
最后对比扩展性,在支持读取和写入的数据源上,SeaTunnel和DataX都很丰富,但是在transform支持上,DataX开源版只有简单的单列处理函数,很难像SeaTunnel一样使用SQL或其他方式对数据源数据进行转换、聚合、加工等操作。
SeaTunnel初印象
DS
第一点是多引擎,SeaTunnel既支持Flink又支持Spark,这对于技术栈丰富的使用者来说是非常友好的,不用做二选一的抉择,而且SeaTunnel可以从应用侧屏蔽使用者对底层计算引擎的感知,通过应用封装,再配合例如动态资源分析等方式,把数据同步任务分发到负载相对合理的计算集群,完成相应的数据同步工作。
第二是简单易用。SeaTunnel通过简单的配置就可以完成数据同步工作,为后续的可视化配置打下了很好的基础。
第三是丰富的数据源,这个得益于社区中小伙伴的踊跃贡献,现在已经支持几十种数据源的读写。
最后就是Apache孵化,一个稳定的团队和积极的社区,都会成为大家在做技术选型的时,一个很重要的考量标准。
02 Examples 模块设计与使用
我们为什么在SeaTunnel中增加Examples模块?
首先是为了达到快速运行,直观反馈的效果。
第二点,提供便捷的本地开发和调试环境,不用打包部署调试,或在IDE中远程debug代码,而是可以直接在本地进行,也会方便debug框架中的代码。针对自己的业务增加数据源插件时,也会很方便地进行调试和验证。
Examples 模块设计和实现
DS
Example到目前为止分为三个部分:
Flink Examples模块
Spark Example模块
Flink SQL Examples模块(最近新增)
实机演示(8:14s-14:14s)
接下来我为大家演示一下,当拿到代码后,如何运行Examples模块,以及配置,文件结构和注意事项。
Flink Example 演示
首先来运行一下Flink Example的代码。代码主要分为三个部分,第一个部分是配置加载,第二个部分是参数加载,第三个部分就是SeaTunnel context运行。
把它转起来以后会出现很多输出,为什么会有这些输出呢?我们来看一下配置文件。
SeaTunnel的配置文件主要分为四个部分,第一部分是环境,你可以根据Flink部署模式,例如Local,或者是application或session、Yarn方式来选择环境参数。第二部分是数据源,本次演示使用了FakeSourceStream,主要用来模拟生成两个字段,name和age。第三部分是transform,可以通过SQL方式进行转换、过滤和聚合。最后的sink是一个ConsoleSink,它可以把你要调试的结果打印在控制台上。
现在我们可以获取一个变量,FakeSourceStream,然后copyvalue全局搜索一下,就可以看到,在做插件开发时,重写一个方法getPluginName。这样在整个SeaTunnel context加载过程中,它就会动态地根据配置文件,加载相关的插件,能够很方便地debug,我们对于框架的感知就会更真实。
继续执行命令会跳转到fakesource插件里,模拟输出数据,生成一个名为Gary的数据。跳过断点,就可以很方便地在控制台输出,得到debug需要获取的信息。其他模块操作过程类似。
再来看一下Flink SQL 的配置文件。Flink SQL 的配置文件会把读取端和写入端模拟成两张表,可以认为是两张表之间的数据同步,读取端表为event table,写入表为print table,中间transform是一个insert select语句。结合输出结果,大家可以看到看到f_type里有各种各样的数值,当程序停掉,加一个where条件,f_type = 1之后,可以再次运行这个类,可以看到只有f_type=1 的记录打印在控制台,其他记录已被过滤。
Spark example演示
再看一下Spark example。Spark example模块的配置文件是批量的,会在整个数据流结束之后自动退出,这也就体现了SeaTunnel的另一个特点,流批一体,既可以完成批量的数据同步任务,也可以完成流式的数据同步任务。
调试中需要注意的点,是当你自己开发新插件时,一定要在自己的example模块里,把pom文件中的SeaTunnel connector部分,依赖上自己开发的插件中,这样会方便调试,否则可能会报出插件无法加载等错误信息。
03 我与开源社区
接下来分享一下我参与开源社区的感受和故事。
我第一次参与开源是在2020年,那时由于公司需要调研一款调度系统,我第一次接触到了海豚调度,配置的过程并不顺利,后来定位到了问题所在,是因为配置文件需要区分大小写,如果不注意,配置文件加载时就会报错。
当时我抱着试一试的态度提交了优化。提交之前,我做了很多工作,例如如何做style check,如何订阅开发者邮件列表,如何了解开源项目的分支管理,如何提交pull request。花时间提交上去之后,就是焦急等待被merge的过程。用一句诗来形容一下merge前的心理,就是“思悠悠,恨悠悠,恨到归时方始休”。后来通过微信群和邮件沟通,交流很方便,在社区小伙伴的帮助和review下,我的PR终于被merge。这是一次很友好的鼓励,合并完之后,我的心情就用可以用“仰天大笑出门去,我辈岂是蓬蒿人”来形容。这是我第一次做开源贡献的心路历程,也是一个开源小白接触到了开源的过程。
参与开源社区,我有三点感受:
每个优化都有价值,不要忧虑这个优化值不值得提交,社区的进步是大家一行一行代码推动的。每一个想法,每一个优化都有它的价值;
在帮助别人中成就自己,帮助小伙伴排查解决问题的过程中,你会打磨你排查问题的思路,历练你的技能,同时还会得到小伙伴的认可;
收获信心,收获友谊,自己贡献的功能,能被非常多的人用到,无疑是技术人收获信心,收获成就感的点,在社区交流和互相协助过程中也会收获友谊。
在最后,把一句话送给大家:社区里有这样一群人,他们热情,他们善良,他们不计得失,他们只为创造。这就是我本次要分享的内容,也期待以后有机会和大家一起合作、创造。
Apache SeaTunnel
// 保持联络 //
微信号 : Seatunnel
来,和社区一同成长!
Apache SeaTunnel(Incubating) 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台。
仓库地址:
https://github.com/apache/incubator-seatunnel
网址:
https://seatunnel.apache.org/
Proposal:
https://cwiki.apache.org/confluence/display/INCUBATOR/SeaTunnelProposal
Apache SeaTunnel(Incubating) 2.1.0 下载地址:
https://seatunnel.apache.org/download
衷心欢迎更多人加入!
能够进入 Apache 孵化器,SeaTunnel(原 Waterdrop) 新的路程才刚刚开始,但社区的发展壮大需要更多人的加入。我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!
我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!
提交问题和建议:
https://github.com/apache/incubator-seatunnel/issues
贡献代码:
https://github.com/apache/incubator-seatunnel/pulls
订阅社区开发邮件列表 :
dev-subscribe@seatunnel.apache.org
开发邮件列表:
dev@seatunnel.apache.org
加入 Slack:
https://join.slack.com/t/apacheseatunnel/shared_invite/zt-123jmewxe-RjB_DW3M3gV~xL91pZ0oVQ
关注 Twitter:
https://twitter.com/ASFSeaTunnel
往期推荐
点击阅读原文,成为Meetup讲师!