flume

Flume概述

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。

版本区别
        0.9之前称为flume og
        0.9之后为flume ng
        
        目前都使用flume ng!
        
        1.7之前,没有taildirsource,1.7及之后有taildirsource

使用Flume
        启动agent:    flume-ng  agent  -n agent的名称  -f agent配置文件  -c 其他配置文件所在的目录 -Dproperty=value

Flume基础架构

flume_第1张图片

图1-1 Flume组成架构

1 Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。

Agent主要有3个部分组成,SourceChannelSink

1.Source(数据源)

Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directorynetcat、sequence generator、syslog、http、legacy。

2.Sink(落地)

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

Sink组件目的地包括hdfsloggeravro、thrift、ipc、fileHBase、solr、自定义。

3.Channel

Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。

Flume自带两种Channel:Memory ChannelFile Channel

Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

 

Event

传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event由HeaderBody两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

Interceptors

在source将event放入到channel之前,调用拦截器对event进行拦截和处理!      

在Flume中允许使用拦截器对传输中的event进行拦截和处理!拦截器必须实现org.apache.flume.interceptor.Interceptor接口。拦截器可以根据开发者的设定修改甚至删除event!Flume同时支持拦截器链,即由多个拦截器组合而成!通过指定拦截器链中拦截器的顺序,event将按照顺序依次被拦截器进行处理!

Channel Selectors

当一个source对接多个channel时,由 Channel Selectors选取channel将event存入!      

Channel Selectors用于source组件将event传输给多个channel的场景。常用的有replicating(默认)和multiplexing两种类型。replicating负责将event复制到多个channel,而multiplexing则根据event的属性和配置的参数进行匹配,匹配成功则发送到指定的channel!

Sink Processors

 当多个sink从一个channel取数据时,为了保证数据的顺序,由sink processor从多个sink中挑选一个sink,由这个sink干活!      

用户可以将多个sink组成一个整体(sink组),Sink Processors可用于提供组内的所有sink的负载平衡功能,或在时间故障的情况下实现从一个sink到另一个sink的故障转移。

 

如何编写agent的配置文件
        agent的配置文件的本质是一个Properties文件!格式为 属性名=属性值
        
        在配置文件中需要编写:
        ①定义当前配置文件中agent的名称,再定义source,sink,channel它们的别名
        ②指定source和channel和sink等组件的类型
        ③指定source和channel和sink等组件的配置,配置参数名和值都需要参考flume到官方用户手册
        ④指定source和channel的对应关系,以及sink和channel的对应关系连接组件

监控端口数据官方案例

使用Flume监听一个端口,收集该端口数据,并打印到控制台。

实现步骤:

1.安装netcat工具

sudo yum install -y nc

2.判断44444端口是否被占用

sudo netstat -tunlp | grep 44444

3.创建Flume Agent配置文件flume-netcat-logger.conf

查看flume官方文档:

使用的组件类型
①netcat source:  作用就是监听某个tcp端口手动的数据,将每行数据封装为一个event。
        工作原理类似于nc -l 端口
配置:
    必须属性:
    type    –    The component type name, needs to be netcat
    bind    –    Host name or IP address to bind to
    port    –    Port # to bind to
    
②logger sink: 作用使用logger(日志输出器)将event输出到文件或控制台,使用info级别记录event!
    必须属性:
    type    –    The component type name, needs to be logger
    可选属性:
maxBytesToLog    16    Maximum number of bytes of the Event body to log

③memery channel
    必须属性:
    type    –    The component type name, needs to be memory
    可选属性:
    capacity    100    The maximum number of events stored in the channel
    transactionCapacity    100    The maximum number of events the channel will take from a source or give to a sink per transaction

 

在job文件夹下创建Flume Agent配置文件flume-netcat-logger.conf。

vim flume-netcat-logger.conf

 

在flume-netcat-logger.conf文件中添加如下内容。

# Name the components on this agent

#r1:表示a1的SOURCE的名称

a1.sources = r1 

#k1:表示a1的Sink的名称    

a1.sinks = k1

#c1:表示a1的Channel的名称

a1.channels = c1

# Describe/configure the source

#表示a1的输入源类型为netcat端口类型

a1.sources.r1.type = netcat

#表示a1的输入源的监听的主机

a1.sources.r1.bind = kylin3

#表示a1的输入源的监听的端口号

a1.sources.r1.port = 44444

# Describe the sink

#标识a1的输出目的地事控制台logger类型

a1.sinks.k1.type = logger

# Use a channel which buffers events in memory

#表示a1的channel类型是memory

a1.channels.c1.type = memory

#表示a1的channel总容量10000个

a1.channels.c1.capacity = 10000

#表示a1的channel传输时收集到1000条event以后再去提交事务

a1.channels.c1.transactionCapacity = 1000

# Bind the source and sink to the channel

#表示r1和c1连接起来

a1.sources.r1.channels = c1

#表示c1和k1连接起来

a1.sinks.k1.channel = c1

 

注:配置文件来源于官方手册http://flume.apache.org/FlumeUserGuide.html

先开启flume监听端口

第一种写法:

 bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

第二种写法:

bin/flume-ng agent -c conf/ -n a1 –f job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

参数说明:

       --conf/-c:表示配置文件存储在conf/目录

       --name/-n:表示给agent起名为a1

       --conf-file/-f:flume本次启动读取的配置文件是在job文件夹下的flume-telnet.conf文件。

       -Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。

使用netcat工具向本机的44444端口发送内容

nc kylin3 44444

hello

 

在Flume监听页面观察接收数据情况

 

 

 

 

 

 

 

 

你可能感兴趣的:(Flume)