当前位置: 首页 > 后端技术 > Java

Flink入门很简单

时间:2023-04-01 19:37:23 Java

本人3y,markdown程序员,一年CRUD经验,十年经验加了一个austin-stream模块。其实这并不奇怪,因为一切都在按计划进行。该模块主要连接流处理平台(flink),用于对业务实时计算和清洗数据,方便系统维护人员使用消息推送平台austin。这篇文章主要说一下access的背景和我的浅见。01.为什么选择流媒体平台?我在老公司有数据处理的经验,也看到了站内广告“效果数据”的发展过程。所谓效果数据,说白了就是商家在平台投放了广告。我们需要向商家展示广告的效果。核心是“曝光”、“点击”和“订单”。基于这些数据,我们可以聚合它们类似Roi的指标。先说说这段“发展史”。看完这个过程,你或许能更好地理解为什么需要流媒体平台。1、PHP阶段:一开始业务和系统结构都比较简单,“点击”和“订单”都存储在数据库表中,一班车通过定时任务完全聚合得到最终的效果数据,第二天将“曝光”数据写入效果数据表。现阶段由于数据量小,通过定时任务聚合数据也不是不可以。届时,商家可以接受业务的延迟。2、Java阶段:随着业务的发展,逐渐摒弃PHP和广告三层结构,数据量越来越大,站内中间件服务平台也发展起来。通过中间件团队提供的消费binlog框架,从架构上改变了聚合模式,现阶段可以更快的将效果数据展示给商家,1分钟左右就可以展示效果数据。计算”或处理数据时的抽象。基于这种抽象,可以充分利用系统资源(将一个大任务拆分成多个小任务,然后分发到不同的机器上执行)4.广告效果数据我最开始使用Storm作为流处理平台。数据已经运行数年,相当稳定,性能和吞吐量也满足业务使用。后来Flink出现了,支持了SQL,Exactly-Once,流批一体等。随着公司内部的推广,我把广告效果数据从Strom换成了Flink系统,大概秒级就拿到了效果数据。(其实是可以压缩的,但是需要考虑到DB的性能成本,只要业务可以接受。traff-off!)在第三点,我提出了“数据处理过程中的抽象”,以及这是我的理解。在Storm中,spout定义为输入,bolt为中间处理或输出,中间数据流转成tuple,使用shuffle机制控制数据流向。在Flink中,有更清晰的语义来解释输入和输出(程序API也更语义化)这些流处理平台将数据处理抽象化,让我们更方便高效地处理数据,比如下面的函数:02.WhereAustin在Austin系统前面使用流处理平台吗?设计了部分埋点信息,打印在日志上。但是对于这部分数据,我已经很久没有处理了(不过有一个跟Austin学习过的朋友帮我剪了日志,一看就知道是哪里出了问题)这部分可以通过访问来处理流处理平台。对数据进行清洗(根据发件人维度、模板消息维度等),将清洗后的数据展示在界面上或用于排查问题,可以大大提高排查问题或业务方的使用效率。它在2018年开始流行,现在很多公司都在使用Flink作为实时大数据处理的流媒体平台。至于为什么选择Flink,原因有以下几点:1.对Flink略知一二(主要是懒得学其他的了,不过还是够了)2.Flink发展了好几年,成熟了并被许多大公司使用。Active3.Flink的官方文档相当不错,适合学习和排查问题。首先我们安装Flink,docker-compose.yml文件内容:version:"2.2"services:jobmanager:image:flink:latestports:-"8081:8081"command:jobmanagerenvironment:-|FLINK_PROPERTIES=jobmanager.rpc.address:jobmanager-SET_CONTAINER_TIMEZONE=true-CONTAINER_TIMEZONE=Asia/Shanghai-TZ=Asia/Shanghaitaskmanager:image:flink:latestdepends_on:-jobmanagercommand:taskmanagerscale:1环境:-|FLINK_PROPERTIES=jobmanager.rpc.address:jobmanagertaskmanager.numberOfTaskSlots:2-SET_CONTAINER_TIMEZONE=true-CONTAINER_TIMEZONE=Asia/Shanghai-TZ=Asia/Shanghai完成后直接docker-composeup-d启动flink我们访问输入ip:在浏览器的8081端口可以看到flink的后台。简单看一下后台可以知道,我们在本地开发完成并打包成jar之后,就可以在SubmitNewJob中将jar包提交给Flink运行了。写代码的时候可以参考官方文档给出的mvn命令构建Flink的基础环境当然是,现在我已经搭建好了,大家可以直接拉下代码看austin-stream模块就大功告成了。如果自己从头开始构建,可能还需要注意pom中的plugin需要改一下(否则会打包失败),可以参考我的pom文件04,austin代码来自目前的代码结构和逻辑,还是很简单的,没学过Flink的同学应该能理解:目前主要实现的是数据实时聚合到Redis,分为用户和消息模板两个维度(对应的Redis结构已写在代码注释中)。跟随Austin项目的小伙伴,在Kafka中创建对应的topic即可(我这里定义的topicName为austinLog),在AustinFlinkConstant中填入KafkaBroker信息和Redis信息后,编译打包就完成了。提交到Flink平台后,可以运行:05.经过Flink的后续处理,数据已经写入Redis。最近一直在写Controller层开发接口,将清洗后的数据显示在页面上。.从上一页的实现来看,如果有了解过的同学,可能知道我用的是低代码平台amis,而amis,我看了下图的文档,使用echarts进行渲染。应该问题不大,估计两天就开发完了。主要是适配参数的问题,到时候应该看起来比较完整了。最近有小伙伴提交了pullrequest,写了微信服务号的访问。我合并了代码,但我还没有调试它。主要麻烦是我没有营业执照,所以很难开服务号调试。稍后我会找出解决方案。今天我们就来说说这个。对Flink感兴趣的同学可以看我之前的文章和官网。我建议大家可以先把Austin的代码pull下来,部署一下自己体验一下,再看看理论。知识。1.Flink入门2.Flink反压机制3.FlinkCheckpoint机制到这里已经见识过了。竖起大拇指不过分吧?我3岁了,下次见。关注我的微信公众号【Java3y】除了技术也可以聊聊日常生活,有些话只能小声说~【在线面试官+从零开始写Java项目】持续高强度更新!求一星!!原创不易!!一连求三!!Austin项目源码Gitee链接:gitee.com/austinaustin项目源码GitHub链接:github.com/austin