1.概述

  在《Kafka实战-简单示例》一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打算为大家介绍Flume+Kafka+Storm的实时日志统计,由于涉及的内容较多,这里先给大家梳理一个项目的运用这些技术的流程。下面是今天的内容目录:

  • 项目流程
  • Flume
  • Kafka
  • Storm

  下面开始今天的内容分享。

2.项目流程

  在整合这套方案的时候,项目组也是经过一番讨论,在讨论中,观点很多,有人认为直接使用Storm进行实时处理,去掉Kafka环节;也有认为直接使用Kafka的API去消费,去掉Storm的消费环节等等,但是最终组内还是一致决定使用这套方案,原因有如下几点:

  • 业务模块化
  • 功能组件化

  我们认为,Kafka在整个环节中充当的职责应该单一,这项目的整个环节她就是一个中间件,下面用一个图来说明这个原因,如下图所示:

  整个项目流程如上图所示,这样划分使得各个业务模块化,功能更加的清晰明了。

  • Data Collection

  负责从各个节点上实时收集用户上报的日志数据,我们选用的是Apache的Flume NG来实现。

  • Data Access

  由于收集的数据的速度和数据处理的速度不一定是一致的,因此,这里添加了一个中间件来做处理,所使用的是Apache的Kafka,关于Kafka集群部署,大家可以参考我写的《Kafka实战-Kafka Cluster》。另外,有一部分数据是流向HDFS分布式文件系统了的,方便于为离线统计业务提供数据源。

  • Stream Computing

  在收集到数据后,我们需要对这些数据做实时处理,所选用的是Apache的Storm。关于Storm的集群搭建部署博客后面补上,较为简单。

  • Data Output

  在使用Storm对数据做处理后,我们需要将处理后的结果做持久化,由于对响应速度要求较高,这里采用Redis+MySQL来做持久化。整个项目的流程架构图,如下图所示:

3.Flume

  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:,dn2:,dn3:
producer.sinks.r.partition.key=
producer.sinks.r.partitioner.class=org.apache.flume.plugins.SinglePartition
producer.sinks.r.serializer.class=kafka.serializer.StringEncoder
producer.sinks.r.request.required.acks=
producer.sinks.r.max.message.size=
producer.sinks.r.producer.type=sync
producer.sinks.r.custom.encoding=UTF-
producer.sinks.r.custom.topic.name=test

  关于,Flume的详细搭建部署,大家可以参考我写的《高可用Hadoop平台-Flume NG实战图解篇》。这里就不多做赘述了。

4.Kafka

  Kafka是一种提供高吞吐量的分布式发布订阅消息系统,她的特性如下所示:

  • 通过磁盘数据结构提供消息的持久化,这种结构对于即使数据达到TB+级别的消息,存储也能够保持长时间的稳定。
  • 搞吞吐特性使得Kafka即使使用普通的机器硬件,也可以支持每秒数10W的消息。
  • 能够通过Kafka Cluster和Consumer Cluster来Partition消息。

  Kafka的目的是提供一个发布订阅解决方案,他可以处理Consumer网站中的所有流动数据,在网页浏览,搜索以及用户的一些行为,这些动作是较为关键的因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于Hadoop这样的日志数据和离线计算系统,这样的方案是一个解决实时处理较好的一种方案。

  关于Kafka集群的搭建部署和使用,大家可以参考我写的:《Kafka实战-Kafka Cluster》,这里就不多做赘述了。

5.Storm

  Twitter将Storm开源了,这是一个分布式的、容错的实时计算系统,已被贡献到Apache基金会,下载地址如下所示:

http://storm.apache.org/downloads.html
  Storm的主要特点如下:
  • 简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
  • 可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
  • 容错性。Storm会管理工作进程和节点的故障。
  • 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
  • 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
  • 快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。
  • 本地模式。Storm有一个本地模式,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
  Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节 点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无 状态的,这样一来它们就变得十分健壮,两者的协调工作是由Apache的ZooKeeper来完成的。
  Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Spout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西作为输入数据。数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。在Storm Concepts页面里对这些术语有更详细的描述。
  关于Storm集群的搭建部署,博客在下一篇中更新,到时候会将更新地址附在这里,这里就先不对Storm集群的搭建部署做过多的赘述了。

6.总结

  这里就是为大家介绍的Flume+Kafka+Storm的整体流程,后续会给大家用一个项目案例来实践演示这个流程,包括具体的各个模块的编码实践。今天大家可以先熟悉下实时计算项目的流程开发。

7.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

Kafka实战-实时日志统计流程的更多相关文章

  1. Kafka实战-数据持久化

    1.概述 经过前面Kafka实战系列的学习,我们通过学习<Kafka实战-入门>了解Kafka的应用场景和基本原理,<Kafka实战-Kafka Cluster>一文给大家分享 ...

  2. Kafka实战-Storm Cluster

    1.概述 在<Kafka实战-实时日志统计流程>一文中,谈到了Storm的相关问题,在完成实时日志统计时,我们需要用到Storm去消费Kafka Cluster中的数据,所以,这里我单独给 ...

  3. 使用Flume+Kafka+SparkStreaming进行实时日志分析

    每个公司想要进行数据分析或数据挖掘,收集日志.ETL都是第一步的,今天就讲一下如何实时地(准实时,每分钟分析一次)收集日志,处理日志,把处理后的记录存入Hive中,并附上完整实战代码 1. 整体架构 ...

  4. (一个)kafka-jstorm集群实时日志分析 它 ---------kafka实时日志处理

    package com.doctor.logbackextend; import java.util.HashMap; import java.util.List; import java.util. ...

  5. DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优

    胡夕 <Apache Kafka实战>作者,北航计算机硕士毕业,现任某互金公司计算平台总监,曾就职于IBM.搜狗.微博等公司.国内活跃的Kafka代码贡献者. 前言 虽然目前Apache ...

  6. 《Apache Kafka 实战》读书笔记-认识Apache Kafka

    <Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...

  7. Kafka实战-Kafka到Storm

    1.概述 在<Kafka实战-Flume到Kafka>一文中给大家分享了Kafka的数据源生产,今天为大家介绍如何去实时消费Kafka中的数据.这里使用实时计算的模型——Storm.下面是 ...

  8. Kafka实战-Flume到Kafka

    1.概述 前面给大家介绍了整个Kafka项目的开发流程,今天给大家分享Kafka如何获取数据源,即Kafka生产数据.下面是今天要分享的目录: 数据来源 Flume到Kafka 数据源加载 预览 下面 ...

  9. 【转】Kafka实战-Flume到Kafka

    Kafka实战-Flume到Kafka Kafka   2015-07-03 08:46:24 发布 您的评价:       0.0   收藏     2收藏 1.概述 前面给大家介绍了整个Kafka ...

随机推荐

  1. springboot与缓存(redis,或者caffeine,guava)

    1.理论介绍 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry. CachingProvide ...

  2. Django model进阶

    Django-model进阶   QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Ent ...

  3. jquery.validate.js的简单示例

    一.官方资料 官网 github 二.html <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  4. 20172306 2018-2019 《Java程序设计与数据结构》第一周学习总结

    20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 ...

  5. selenium实现淘宝的商品爬取

    一.问题 本次利用selenium自动化测试,完成对淘宝的爬取,这样可以避免一些反爬的措施,也是一种爬虫常用的手段.本次实战的难点: 1.如何利用selenium绕过淘宝的登录界面 2.获取淘宝的页面 ...

  6. 渗透测试的理论部分2——OSSTMM的详细描述

    昨天休息了一天,今天我要连更两篇博客,作为补充,以下为正文 本章详细描述了OSSTMM内的RAV得分这一理论概念,对日后从事正规安全工作至关重要 OSSTMM为开源安全测试方法论,对OSSTMM不了解 ...

  7. 牛客练习赛42 C 反着计算贡献

    https://ac.nowcoder.com/acm/contest/393/C 题意 给你一个矩阵, 每次从每行挑选一个数,组成一个排列,排列的和为不重复数字之和,求所有排列的和(n,m<= ...

  8. 用Rider写一个有IOC容器Autofac的.net core的程序

    一:Autofac是一个和Java里的Spring IOC容器一样的东西,不过它确实没有Spring里的那么方便,主要是在于它没有提供足够的Api和扫描方式等等,不过优点是它比Spring要快很多,而 ...

  9. jvm虚拟机--垃圾回收子系统

    转载自cyc2018的github:https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Java%20%E8%99%9A%E ...

  10. 9.3AspectJ

    1.1 介绍 AspectJ是一个基于Java语言的AOP框架 Spring2.0以后新增了对AspectJ切点表达式支持 @AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术,允许 ...