flume小白入门篇一

来源:互联网 发布:九天封神翅膀进阶数据 编辑:程序博客网 时间:2024/05/17 02:09

小白flume学习手册

flume是什么?

flume是分布式,可信任的系统用于高效收集、聚合和移动大量日志数据,从各种不同的源到一个中央数据仓库。

flume的优势

  1. 可以存储数据在任何集中式存储设备中
  2. 在数源头和存储之间协调速率。
  3. contextual routing上下文路由支持
  4. flume的事务是基于通道的,为每个消息维护了两个事务(sender、receiver),确保消息可靠分发。
  5. Flume is reliable, fault tolerant, scalable, manageable, and customizable.

    flume的架构

这里写图片描述
6. flume event
event是flume中传输数据的基本单元,它包括从源到目的间传输的字节数组和一个可选的header,header被表示为一个map,其中有字符串key和字符串value。header不是用来传输数据,只为了路由意图和跟踪事件的优先级和严重性,典型的event结构如下:
这里写图片描述
7. flume agent
在flume中,agent是一个独立的守护线程。从client或者其他agent中接受数据(event),转发给下一个destination(sink或者agent ),flume中可能有多个agent,如下所示:
这里写图片描述
由图可知,agent由三个部分构成:source、channel、sink。
source(源头):从客户端接受数据,传输给一个或多个channel,以event形式。flume支持各种类型的source(Avro source, Thrift source, twitter 1% source etc),各种数据源都从指定的数据生成器收集数据。
channel(通道):临时存储,接受来自source中的数据并且缓存直到它们被sink消费。在source和sink中起到桥梁作用。channel是完全事务性的。有JDBC channel, File system channel, Memory channel。
sink(沉槽):从通道中消费数据,存储到HDFS或者hbase等集中数据库,也可以是其他的agent。sink有HDFS sink, HBase sink, Avro sink, Kafka sink, etc.
注意:一个flume agent可以有多个source,channel和sink

flume dataflow##

-一般来说,event和log数据是由log服务器和运行flume agent的服务器产生的,而这些agent是从数据生成器中接收数据的。
在agent中的数据将会被中间节点Collector收集起来,就像agent一样,在flume中可以有多个Collerctor。最后,所有Cellector中的数据将会被聚合起来,传送给HDFS or Hbase存起来,过程如下:
这里写图片描述
Multi-hop Flow
在flume中,一个event可能经过多个agent,在它到达最终destination之前,这个就是multi-hop flow.
Fan-out Flow
从一个source到多个channels的数据流就是Fan-out Flow。
主要两种类型:
重复:数据流中的数据会在所有的配置文件中复制。
复用:数据流中的数据将会被发送到指定通道,在event的header中声明。
Fan-in Flow
数据由多个source传输到一个channel的数据流。
Failure Handling
在flume中,每一个event都会产生两个事务:sender和receiver。sender发送event给reciever。一旦收到数据,receiver会提交自己的事务,发送一个“收到”信号给sender。收到信号后,sender会提交自己的事务(sender不会提交事务,知道收到所有receiver的信号

单机版例子

  1. 编辑simple.conf文件
    #命名agent组件
    a.sources = r
    a.sinks = k
    a.channels = c
    #配置source
    a.sources.r.type = netcat
    a.sources.r.bind = localhost
    a.sources.r.port = 8888
    #配置sink
    a.sinks.k.type = logger

    # Use a channel which buffers events in memorya.channels.c.type = memorya.channels.c.capacity = 1000a.channels.c.transactionCapacity = 100# Bind the source and sink to the channela.sources.r.channels = ca.sinks.k.channel = c

    2.flume-ng agent -f /soft/flume/conf/simple.conf -n a-Dflume.root.logger=INFO,console
    3.测试:通过nc客户端向8888发送消息
    nc localhost 8888
    helloworld

    Sources avro

    1. 创建r_avro.conf
      #component
      a1.sources = r1
      a1.channels = c1
      a1.sinks = k1
      #r1
      a1.sources.r1.type = avro
      a1.sources.r1.channels = c1
      a1.sources.r1.bind = 0.0.0.0
      a1.sources.r1.port = 4141
      #k1
      a1.sinks.k1.type = logger
      #c1
      a1.channels.c1.type = memory
      #bind
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1
      2.启动flume
      flume-ng agent -f r_avro.conf -n a1 -Dflume.root.logger=INFO,console
      3.启动avro-client发送数据
      flume-ng avro-client -F /home/centos/customers.txt -H localhost -p 4141 -R /home/centos/header.txt

spooldir

1.创建r_spooldir.conf
a1.sources = r1
a1.channels = c1
a1.sinks = k1

        a1.sources.r1.type = spooldir        a1.sources.r1.channels = c1        a1.sources.r1.spoolDir = /home/centos/logs        a1.sources.r1.fileHeader = true        a1.sinks.k1.type = logger        a1.channels.c1.type = memory        a1.sources.r1.channels = c1        a1.sinks.k1.channel = c1

2.启动flume
flumg-ng agent -f r_spooldir.conf -n a1 -Dflume.root.logger=INFO,console
3.创建/home/centos/logs目录

原创粉丝点击