Flink 实战:消费 Wikipedia 实时消息
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
关于 Wikipedia Edit Stream
Wikipedia Edit Stream 是 Flink 官网提供的一个经典 demo,该应用消费的消息来自维基百科,消息中包含了用户名对 wiki 的编辑情况,demo 的官方资料地址:https://ci.apache.org/projects/flink/flink-docs-release-1.2/quickstart/run_example_quickstart.html
消息来源
消息的 DataSource 是个名为 WikipediaEditsSource 的类,这里面建立了到 irc.wikimedia.org 的 Socker 连接,再通过 Internet Relay Chat (IRC) 协议接收对方的数据,收到数据后保存在阻塞队列中,通过一个 while 循环不停的从队列取出数据,再调用 SourceContext 的 collect 方法,就在 Flink 中将这条数据生产出来了;
IRC 是应用层协议,更多细节请看:https://en.wikipedia.org/wiki/Internet_Relay_Chat
关于 WikipediaEditsSource 类的深入分析,请参考《Flink 数据源拆解分析(WikipediaEditsSource)》
实战简介
本次实战就是消费上述消息,然后统计每个用户十五秒内所有的消息,将每次操作的字节数累加起来,就得到用户十五秒内操作的字节数总和,并且每次累加了多少都会记录下来并最终和聚合结果一起展示;
和官网 demo 的不同之处
和官网的 demo 略有不同,官网用的是 Tuple2 来处理数据,但我这里用了 Tuple3,多保存了一个 StringBuilder 对象,用来记录每次聚合时加了哪些值,这样在结果中通过这个字段就能看出来这个时间窗口内每个用户做了多少次聚合,每次是什么值:
环境信息
Flink:1.7;
运行模式:单机(官网称之为 Local Flink Cluster);
Flink 所在机器的操作系统:CentOS Linux release 7.5.1804;
开发环境 JDK:1.8.0_181;
开发环境 Maven:3.5.0;
操作步骤简介
今天的实战分为以下步骤:
创建应用;
编码;
构建;
部署运行;
创建应用
应用基本代码是通过 mvn 命令创建的,在命令行输入以下命令:
按控制台的提示输入 groupId、artifactId、version、package 等信息,一路回车确认后,会生成一个和你输入的 artifactId 同名的文件夹(我这里是 wikipediaeditstreamdemo),里面是个 maven 工程:
用 IEDA 导入这个 maven 工程,如下图,已经有了两个类:BatchJob 和 StreamingJob,BatchJob 是用于批处理的,本次实战用不上,因此可以删除,只保留流处理的 StreamingJob:
应用创建成功,接下来可以开始编码了;
编码
您可以选择直接从 GitHub 下载这个工程的源码,地址和链接信息如下表所示:
这个 git 项目中有多个文件夹,本章源码在 wikipediaeditstreamdemo 这个文件夹下,如下图红框所示:
接下来开始编码:
在 pom.mxl 文件中增加 wikipedia 相关的库依赖:
在类中增加代码,如下所示,源码中已加详细注释:
至此编码结束;
构建
在 pom.xml 文件所在目录下执行命令:
命令执行完毕后,在 target 目录下的 wikipediaeditstreamdemo-1.0-SNAPSHOT.jar 文件就是构建成功的 jar 包;
在 Flink 验证
Flink 的安装和启动请参考《Flink1.7从安装到体验》;
我这边 Flink 所在机器的 IP 地址是 192.168.1.103,因此用浏览器访问的 Flink 的 web 地址为:http://192.168.1.103:8081 ;
选择刚刚生成的 jar 文件作为一个新的任务,如下图:
点击下图红框中的"upload",将文件提交:
目前还只是将 jar 文件上传了而已,接下来就是手工设置执行类并启动任务,操作如下图,红框 2 中填写的前面编写的 StreamingJob 类的完整名称:
提交后的页面效果如下图所示,可见一个 job 已经在运行中了:
接下来看看我们的 job 的执行效果,如下图,以用户名聚合后的字数统计已经被打印出来了,并且 Details 后面的内容还展示了具体的聚合情况:
至此,一个实施处理的 Flink 应用就开发完成了,希望能给您的开发过程提供一些参考,后面的实战中咱们一起继续深入学习和探讨 Flink;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca8d9a3c41bbf4503a5d3e9fb】。文章转载请联系作者。
评论