首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flume+Kafka+Storm+Redis构建大数据实时处理系统

一、大数据处理的常用方法之前在《采集清洗处理:基于MapReduce的离线数据分析》中已经有提及到,这里依然给出下面的图示:

前面给出的那篇文章是基于MapReduce的离线数据分析案例,其通过对网站产生的用户访问日志进行处理并分析出该网站在某天的PV、UV等数据。对应上面的图示,其走的就是离线处理的数据处理方式,而这里即将要介绍的是另外一条路线的数据处理方式,即基于Storm的在线处理。

即从上面的架构中我们可以看出,其由下面的几部分构成:Flume集群Kafka集群Storm集群从构建实时处理系统的角度出发,我们需要做的是让数据在各个不同的集群系统之间打通(从上面的图示中也能很好地说明这一点),即需要做各个系统之前的整合,包括Flume与Kafka的整合,Kafka与Storm的整合。

1整合思路对于Flume而言,关键在于如何采集数据,并且将其发送到Kafka上,并且由于我们这里了使用Flume集群的方式,Flume集群的配置也是十分关键的。而对于Kafka,关键就是如何接收来自Flume的数据。从整体上讲,逻辑应该是比较简单的,在Kafka中创建一个用于我们实时处理系统的topic,然后Flume将其采集到的数据发送到该topic上即可。

在我们的场景中,两个FlumeAgent分别部署在两台Web服务器上,用来采集Web服务器上的日志数据,然后其数据的下沉方式都为发送到另外一个FlumeAgent上,所以这里我们需要配置三个FlumeAgent。

这样的话,我们的整合就没有问题,当然Kafka中的数据应该是由我们的Storm来进行消费的,这里只是作为整合的一个测试,下面就会来做Kafka+Storm的整合。四、Kafka+Storm整合

Kafka和Storm的整合其实在Storm的官网上也有非常详细清晰的文档:http://storm.apache.org/releases/1.0.6/storm-kafka.html想对其有更多了解的同学可以参考一下。

在Storm中,我们提交的一个作业称为topology,其又包含了spout和bolt,在Storm中,对数据的处理逻辑正是在spout和bolt中体现:

即在spout中,正是我们数据的来源,又因为其实时的特性,所以可以把它比作一个“水龙头”,表示其源源不断地产生数据:

所以,问题的关键是spout如何去获取来自Kafka的数据?好在,Storm-Kafka的整合库中提供了这样的API来供我们进行操作。2整合过程整合过程应用了KafkaSpout。

如果是在Storm集群中提交的作业运行,那么也可以在Storm的日志中看到Web服务器产生的日志数据:

这样的话就完成了Kafka+Storm的整合。五、Storm+Redis整合

1整合思路其实所谓Storm和Redis的整合,指的是在我们的实时处理系统中的数据的落地方式,即在Storm中包含了我们处理数据的逻辑,而数据处理完毕后,产生的数据处理结果该保存到什么地方呢?显然就有很多种方式了,关系型数据库、NoSQL、HDFS、HBase等,这应该取决于具体的业务和数据量,在这里,我们使用Redis来进行最后分析数据的存储。

需要说明的是mid信息是一个set集合,只要求出该set集合的大小,也就可以求出UV值。至此,准确来说,我们的统计PV、UV的大数据实时处理系统是构建完成了,处理的数据结果的用途根据不同的业务需求而不同,但是对于网站的PV、UV数据来说,是非常适合用作可视化处理的,即用网页动态将数据展示出来,我们下一步正是要构建一个简单的Web应用将PV、UV数据动态展示出来。六、数据可视化处理

数据可视化处理目前我们需要完成两部分的工作:开发一个Web项目,能够查询Redis中的数据,同时提供访问的页面自行开发或找一个符合我们需求的前端UI,将Web项目中查询到的数据展示出来对于Web项目的开发,因个人的技术栈能力而异,选择的语言和技术也有所不同,只要能够达到我们最终数据可视化的目的,其实都行的。

可以看到,echarts的这个UI还是比较好看的,而且也真的能够满足我们的需求。每个省份上的两个不同颜色的点表示目前我们需要展示的数据有两种,分别为PV和UV,在左上角也有体现,而颜色的深浅就可以体现PV或者UV的数量大小关系了。在这个界面上,点击左上角的UV,表示不查看UV的数据,这样我们就会只看到PV的情况:

当然,也可以只查看UV的情况:

当鼠标停留在某个省份上时,就可以查看这个省份具体的PV或UV值,比如下面我们把鼠标停留在“广东”上时,就可以看到其此时的PV值为170,查看其它省份的也是如此:

那么数据是可以查看了,又怎么体现动态呢?对于页面数据的动态刷新有两种方案,一种是定时刷新页面,另外一种则是定时向后端异步请求数据。目前我采用的是第一种,页面定时刷新,有兴趣的同学也可以尝试使用第二种方法,只需要在后端开发相关的返回JSON数据的API即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710A04TJ800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券