数据处理方法分为离线处理和在线处理,今天写到的就是基于Storm的在线处理。在下面给出的完整案例中,我们将会完成下面的几项工作:
如何一步步构建我们的实时处理系统(Flume+Kafka+Storm+Redis)
实时处理网站的用户访问日志,并统计出该网站的PV、UV
将实时分析出的PV、UV动态地展示在我们的前面页面上
如果你对上面提及的大数据组件已经有所认识,或者对如何构建大数据实时处理系统感兴趣,那么就可以尽情阅读下面的内容了。
需要注意的是,核心在于如何构建实时处理系统,而这里给出的案例是实时统计某个网站的PV、UV,在实际中,基于每个人的工作环境不同,业务不同,因此业务系统的复杂度也不尽相同,相对来说,这里统计PV、UV的业务是比较简单的,但也足够让我们对大数据实时处理系统有一个基本的、清晰的了解与认识,是的,它不再那么神秘了。
实时处理系统架构
我们的实时处理系统整体架构如下:
即从上面的架构中我们可以看出,其由下面的几部分构成:
Flume集群
Kafka集群
Storm集群
从构建实时处理系统的角度出发,我们需要做的是让数据在各个不同的集群系统之间打通(从上面的图示中也能很好地说明这一点),即需要做各个系统之前的整合,包括Flume与Kafka的整合,Kafka与Storm的整合。当然,各个环境是否使用集群,依个人的实际需要而定,在我们的环境中,Flume、Kafka、Storm都使用集群。
Flume+Kafka整合
1整合思路
对于Flume而言,关键在于如何采集数据,并且将其发送到Kafka上,并且由于我们这里了使用Flume集群的方式,Flume集群的配置也是十分关键的。而对于Kafka,关键就是如何接收来自Flume的数据。从整体上讲,逻辑应该是比较简单的,在Kafka中创建一个用于我们实时处理系统的topic,然后Flume将其采集到的数据发送到该topic上即可。
2整合过程
整合过程:Flume集群配置与KafkaTopic创建。
Flume集群配置
在我们的场景中,两个FlumeAgent分别部署在两台Web服务器上,用来采集Web服务器上的日志数据,然后其数据的下沉方式都为发送到另外一个FlumeAgent上,所以这里我们需要配置三个FlumeAgent。
FlumeAgent01
该FlumeAgent部署在一台Web服务器上,用来采集产生的Web日志,然后发送到FlumeConsolidationAgent上,创建一个新的配置文件flume-sink-avro.conf,其配置内容如下:
#########################################################
##
##主要作用是监听文件中的新增数据,采集到数据之后,输出到avro
##注意:Flumeagent的运行,主要就是配置sourcechannelsink
##下面的a1就是agent的代号,source叫r1channel叫c1sink叫k1
#########################################################
a1.sources=r1
a1.sinks=k1
a1.channels=c1
#对于source的配置描述监听文件中的新增数据exec
a1.sources.r1.type=exec
a1.sources.r1.