在《Kafka实战-简单示例》一文中给你们介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给你们介绍如何去整合一个完整的项目,本篇博客我打算为你们介绍Flume+Kafka+Storm的实时日志统计,因为涉及的内容较多,这里先给你们梳理一个项目的运用这些技术的流程。下面是今天的内容目录:html
下面开始今天的内容分享。apache
在整合这套方案的时候,项目组也是通过一番讨论,在讨论中,观点不少,有人认为直接使用Storm进行实时处理,去掉Kafka环节;也有认为直接使用Kafka的API去消费,去掉Storm的消费环节等等,可是最终组内仍是一致决定使用这套方案,缘由有以下几点:编程
咱们认为,Kafka在整个环节中充当的职责应该单一,这项目的整个环节她就是一个中间件,下面用一个图来讲明这个缘由,以下图所示:服务器
整个项目流程如上图所示,这样划分使得各个业务模块化,功能更加的清晰明了。网络
负责从各个节点上实时收集用户上报的日志数据,咱们选用的是Apache的Flume NG来实现。数据结构
因为收集的数据的速度和数据处理的速度不必定是一致的,所以,这里添加了一个中间件来作处理,所使用的是Apache的Kafka,关于Kafka集群部署,你们能够参考我写的《Kafka实战-Kafka Cluster》。另外,有一部分数据是流向HDFS分布式文件系统了的,方便于为离线统计业务提供数据源。架构
在收集到数据后,咱们须要对这些数据作实时处理,所选用的是Apache的Storm。关于Storm的集群搭建部署博客后面补上,较为简单。编程语言
在使用Storm对数据作处理后,咱们须要将处理后的结果作持久化,因为对响应速度要求较高,这里采用Redis+MySQL来作持久化。整个项目的流程架构图,以下图所示:分布式
Flume是一个分布式的、高可用的海量日志收集、聚合和传输日志收集系统,支持在日志系统中定制各种数据发送方(如:Kafka,HDFS等),便于收集数据。Flume提供了丰富的日志源收集类型,有:Console、RPC、Text、Tail、Syslog、Exec等数据源的收集,在咱们的日志系统中目前咱们所使用的是spooldir方式进行日志文件采集,配置内容信息以下所示:模块化
producer.sources.s.type = spooldir producer.sources.s.spoolDir = /home/hadoop/dir/logdfs
固然,Flume的数据发送方类型也是多种类型的,有:Console、Text、HDFS、RPC等,这里咱们系统所使用的是Kafka中间件来接收,配置内容以下所示:
producer.sinks.r.type = org.apache.flume.plugins.KafkaSink producer.sinks.r.metadata.broker.list=dn1:9092,dn2:9092,dn3:9092 producer.sinks.r.partition.key=0 producer.sinks.r.partitioner.class=org.apache.flume.plugins.SinglePartition producer.sinks.r.serializer.class=kafka.serializer.StringEncoder producer.sinks.r.request.required.acks=0 producer.sinks.r.max.message.size=1000000 producer.sinks.r.producer.type=sync producer.sinks.r.custom.encoding=UTF-8 producer.sinks.r.custom.topic.name=test
关于,Flume的详细搭建部署,你们能够参考我写的《高可用Hadoop平台-Flume NG实战图解篇》。这里就很少作赘述了。
Kafka是一种提供高吞吐量的分布式发布订阅消息系统,她的特性以下所示:
Kafka的目的是提供一个发布订阅解决方案,他能够处理Consumer网站中的全部流动数据,在网页浏览,搜索以及用户的一些行为,这些动做是较为关键的因素。这些数据一般是因为吞吐量的要求而经过处理日志和日志聚合来解决。对于Hadoop这样的日志数据和离线计算系统,这样的方案是一个解决实时处理较好的一种方案。
关于Kafka集群的搭建部署和使用,你们能够参考我写的:《Kafka实战-Kafka Cluster》,这里就很少作赘述了。
Twitter将Storm开源了,这是一个分布式的、容错的实时计算系统,已被贡献到Apache基金会,下载地址以下所示:
http://storm.apache.org/downloads.html