一、Flume是什么

Flume是一个数据,日志收集的一个组件,可以用于对程序,nginx等日志的收集,而且非常简单,省时的做完收集的工作。Flume是一个分布式、可靠、和高可用的海量日志采集聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集日志,同时Flume对日志做简单的处理。

Flume作为一个非常受欢迎的日志收集工具,有如下几个特点:

1. flume的可靠性

 flume的某个节点出现故障时,数据不会丢失。flume提供了三种级别的可靠保障,级别从强到弱分别是

  •  end-to-end,收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送
  •  Store on failure 这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送
  •  Besteffort 数据发送到接收方后,不会进行确认

2. flume的可恢复性

将数据持久化到磁盘不会丢失,因为存储到了文件中,可以后续重新恢复。

二、Flume能够做什么

1.作为日志收集的工具,其目的用于日志的收集。web程序的日志收集和nginx写入程序的日志收集的操作:我接触到的日志收集,web程序的日志会在打印的时候被拦截,然后输入到kafka中,但是也有一部分的操作就是将日志直接打印到文件中,然后统一传入到ftp服务,在有程序统一处理。nginx日志分析也是日志打印到一个文件中,后续将其放入到统一位置处理。消息中间件都有日志收集的jar包,例如rocketmq的rocketmq-logappender包,kafka中有类可以直接调用。

kafka是分布式消息中间件,自带存储,提供push和pull存取数据功能,有Replication功能,能够实现高容错性,kafka收集日志,kafka有一个更小的生产消费者生态系统,但是整个社区对日志收集支持不太友好。kafka是一个消息中间件,多处理不同系统之间的数据生成 / 消费的速率不同。

flume专门设计成为日志收集的工具,封装了非常多的接口可供使用,使用简单,flume的agent(数据采集器),collector(数据简单处理和写入),storage(存储器)三部分,每一个都可以定制。并提供了简单的数据处理的能力。

使用建议:

  1.如果有很多下游的Consumer,用kafka,而需简要存储大Hadoop,hive时,用flume

  2.kafka做为一个做为一个日志缓存系统更合适,flume数据采集更优秀,在考虑场景是,需要给hadoop存储数据时,可以使用kafka+flume模式,如果有多个数据源,可以使用flume+kafka的内容

  3.  Kafka 是一个通用型系统。你可以有许多的生产者和消费者分享多个主题。相反地,Flume 被设计成特定用途的工作,特定地向 HDFS 和 HBase 发送出去。Flume 为了更好地为 HDFS 服务而做了特定的优化,并且与 Hadoop 的安全体系整合在了一起。基于这样的结论,Hadoop 开发商 Cloudera 推荐如果数据需要被多个应用程序消费的话,推荐使用 Kafka,如果数据只是面向 Hadoop 的,可以使用 Flume。

  4. Flume 拥有许多配置的来源 (sources) 和存储池 (sinks)。然后,Kafka 拥有的是非常小的生产者和消费者环境体系,Kafka 社区并不是非常支持这样。如果你的数据来源已经确定,不需要额外的编码,那你可以使用 Flume 提供的 sources 和 sinks,反之,如果你需要准备自己的生产者和消费者,那你需要使用 Kafka。

  5. Flume 可以在拦截器里面实时处理数据。这个特性对于过滤数据非常有用。Kafka 需要一个外部系统帮助处理数据。

  6. 无论是 Kafka 或是 Flume,两个系统都可以保证不丢失数据。然后,Flume 不会复制事件。相应地,即使我们正在使用一个可以信赖的文件通道,如果 Flume agent 所在的这个节点宕机了,你会失去所有的事件访问能力直到你修复这个受损的节点。使用 Kafka 的管道特性不会有这样的问题。

  7. lume 和 Kafka 可以一起工作的。如果你需要把流式数据从 Kafka 转移到 Hadoop,可以使用 Flume 代理 (agent),将 kafka 当作一个来源 (source),这样可以从 Kafka 读取数据到 Hadoop。你不需要去开发自己的消费者,你可以使用 Flume 与 Hadoop、HBase 相结合的特性,使用 Cloudera Manager 平台监控消费者,并且通过增加过滤器的方式处理数据。

Flume的核心

1.核心概念

  •  Client:client生成数据,运行在一个独立的线程
  •  Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
  •  Flow: Event从源点到达目的点的迁移的抽象。
  •     Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
  •  Source: 数据收集组件。(source从Client收集数据,传递给Channel)
  •  Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)
  •  Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)

2. Agent详解

  Flume运行核心是Agent,一个Agent就是一个JVM,它是一个完整的数据收集工具。Agent包含组件Source、Channel、Sink,通过这些组件 Event 可以从一个地方流向另一个地方,如下图所示。

  

  1. webServer产生日志的源
  2. Source收集日志工具,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。
  3. Channel管道,是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。介绍两个较为常用的Channel, MemoryChannel和FileChannel,推荐使用FileChannel。
  4. Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、 hadoop存数据, 也可以是其他agent的Source。在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。

四、Flume的日志收集

  一个简单的例子,nginx产生的日志,flume收集之后,放置到hadoop中,在服务器中部署nginx,flume,hadoop

  1.nginx在配置中,需要打开日志输出,并标识出日志输出的路径.   

http {
# 配置日志格式
log_format lf '$remote_addr $msec $http_host server {
listen 80;
server_name localhost;
location ~*\.(html|js|css|jpg|jpeg|gif|png|swf|ico|json|apk)$ {
         # 日志输出路径
access_log /opt/nginx/log/access.log lf;
root html;
#root /usr/local/extra/nginx-1.9.6/html/;
#root /usr/local/extra/nginx-1.9.6/html2/;
}
}

flume的配置:flume-conf.properties

# 配置Agent
agent.sources = r1
agent.sinks = k1
agent.channels = c1 # 配置Source
agent.sources.r1.type = exec
agent.sources.r1.channels = c1
agent.sources.r1.deserializer.outputCharset = UTF-8 # 配置需要监控的日志输出目录
agent.sources.r1.command = tail -f /usr/local/nginx/log/access.log # 配置Sink
agent.sinks.k1.type = hdfs
agent.sinks.k1.channel = c1
agent.sinks.k1.hdfs.useLocalTimeStamp = true
agent.sinks.k1.hdfs.path = hdfs://localhost:9000/flume/events/%Y-%m
agent.sinks.k1.hdfs.filePrefix = %Y-%m-%d-%H
agent.sinks.k1.hdfs.fileSuffix = .log
agent.sinks.k1.hdfs.minBlockReplicas = 1
agent.sinks.k1.hdfs.fileType = DataStream
agent.sinks.k1.hdfs.writeFormat = Text
agent.sinks.k1.hdfs.rollInterval = 86400
agent.sinks.k1.hdfs.rollSize = 1000000
agent.sinks.k1.hdfs.rollCount = 10000
agent.sinks.k1.hdfs.idleTimeout = 0 # 配置Channel
agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000
agent.channels.c1.transactionCapacity = 100 # 将三者连接
agent.sources.r1.channel = c1
agent.sinks.k1.channel = c1

这些配置之后,启动时会出现错误,原因是,需要一些jar包,flume下的lib是没有这些包,需要如下包(这些包从hadoop中复制过来):

{HADOOP_HOME}/share/hadoop/common/lib/commons-configuration2-2.1.1.jar
{HADOOP_HOME}/share/hadoop/common/lib/hadoop-auth-3.1.1.jar
{HADOOP_HOME}/share/hadoop/common/hadoop-common-3.1.1.jar
{HADOOP_HOME}/share/hadoop/hdfs/hadoop-hdfs-3.1.1.jar
{HADOOP_HOME}/share/hadoop/common/lib/woodstox-core-5.2.0.jar
{HADOOP_HOME}/share/hadoop/common/lib/ stax2-api-3.1.4.jar
{HADOOP_HOME}/share/hadoop/common/lib/htrace-core4-4.1.0-incubating.jar

然后运行如下命令:

bin/flume-ng agent --conf conf/  --name agent --conf-file conf/flume-conf.properties -Dflume.root.logger=DEBUG,console

在访问ip:80时,服务器日志将写入到hadoop的flume/event/目录下

Flume初始的更多相关文章

  1. Flume NG简介及配置

    Flume下载地址:http://apache.fayea.com/flume/ 常用的分布式日志收集系统: Apache Flume. Facebook Scribe. Apache Chukwa ...

  2. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  3. Flume环境部署和配置详解及案例大全

    flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDF ...

  4. Flume(一)Flume原理解析

    前言 最近有一点浮躁,遇到了很多不该发生在我身上的事情.没有,忘掉这些.好好的学习,才是正道! 一.Flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应 ...

  5. flume原理

    1. flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generat ...

  6. Flume架构

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统: Flume 介绍 Flume是由cloudera软件公司产出的高可用.高可靠.分布式的海量日志收集系 ...

  7. 【基本知识】Flume基本环境搭建以及原理

    系统:CentOS6.5JDK:1.8.0_144Flume:flume-ng-1.6.0-cdh5.12.0 一.什么是Flume flume 作为 cloudera 开发的实时日志收集系统,受到了 ...

  8. flume 前世今生

    Cloudera 开发的分布式日志收集系统 Flume,是 hadoop 周边组件之一.其可以实时的将分布在不同节点.机器上的日志收集到不同的存储系统.Flume 初始的发行版本目前被统称为 Flum ...

  9. Flume原理解析【转】

    一.Flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generati ...

随机推荐

  1. CURL命令测试网站打开速度

    curl -o /dev/null -s -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total} http: ...

  2. (zxing.net)一维码UPC A的简介、实现与解码

    一.简介 UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条  码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. U ...

  3. EF一对多的表,模糊查询2个表的数据!

    如用户表和电话表,要求搜索时可以模糊查询姓名和号码.都可以找到包含该字符的所有用户. /// <summary> /// 模糊查询姓名和电话号码,并按姓名排序返回 /// </sum ...

  4. 在 Cef 中实现 C++ 与 JavaScript 交互场景分析

    此文已由作者邓佳佳授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 本文主要介绍 CEF 场景中 C++ 和 JavaScript 交互(以下简称 JS Bridge)中的一些重 ...

  5. django系列6--Ajax01 特点, 基本格式, 向前端发送数据

    一.Ajax了解 AJAX(Asynchronous Javascript And XML)优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 优点: 1.ajax使用Java ...

  6. JZOJ6096 森林

    题目传送门 Description ​我们定义对一棵树做一次变换的含义为:当以 1 号节点为根时,交换两个互相不为祖先的点的子树: ​一棵树的权值为对它进行至多一次变换能得到的最大直径长度: ​初始时 ...

  7. jdk动态代理 案例

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...

  8. C语言实现单链表,并完成链表常用API函数

    C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...

  9. Spring Boot 之 Hello World 战记

    1. Maven创建SpringBoot项目 2. application.properties spring.session.store-type=none // 解决默认的30+编译错误 3. d ...

  10. P4382 [八省联考2018]劈配

    题目链接 题意分析 受到了\(olinr\ \ julao\)的影响 写了匈牙利算法 首先 我们对于每一个人 从高到低枚举志愿 如果当前志愿的老师有剩余的话 那么我们就选 否则的话 我们看看谁的那个志 ...