Flume初介绍和命令行使用

Flume是Cloudera提供的高可靠、高可用的日志采集系统,支持数据的可靠传输和可扩展性。其架构包括source、channel和sink,source从各种数据源收集日志,如文件、网络、Kafka;channel作为临时存储,保证数据在传输过程中的可靠性;sink负责将数据存储到目标位置,如HDFS、HBase等。Flume还支持多种拦截器进行日志过滤和处理,以及灵活的Channel选择器和Sink策略。安装Flume后,可以通过命令行配置和运行实例。

Flume:cloudera提供的高可用的、高可靠的、分布式的海量日志采集、聚合、和传输系统。


Flume 的设计目标:

  • 可靠性:当节点出现故障时,日志能够被传送到其他节点而不会丢失。
    flume提供了三种可靠性保障:
    • end to end (仅一次)
    • store on failoure (当数据接收方crash时,将数据写道本地,待恢复后继续发送)
    • best effort (数据发送到接收方后,不会进行确认)
  • 可扩展性 source channel sink每一层都可以水平扩展
  • 可管理性 所有source、channel、sink由agent统一管理,使得系统便于维护。

Flume配置文件(Agent的配置)主要包括以下四个部分的配置:

  • Agent连接source、sink、channel名称配置
  • Agent Source 的相关配置
  • Agent Sink 的相关配置
  • Agent Channel 的相关配置

Flume 的架构图

Flume架构

  • source:负责日志的流入,eg:从文件、网络、kafka等数据源流入数据。
    数据的流入有两种方式:
    • 轮询拉去
    • 事件驱动
  • channel:数据聚合/暂存,暂存到内存、本地文件、数据库、kafka等,日志数据不会在管道停留很长的时间,很快被sink消费掉
  • sink:负责数据转移存储,从channel中拿到日志,直接存储到HDFS、Hbase、kafka、ElasticSearch等

source和sink是异步的。


flumeSource

Source支持Avro、Exec、Http、Spooling Director、Kafka、Syslog

  • Exec Source 以运行linux命令的方式,持续的输出最新的数据
  • Spool Source 支持见识一个目录或文件,解析其中新生成的事件,并将文件中的数据读取出来
    拷贝到spool目录下的文件不可以再打开编辑,spool目录不可包含相应的子目录

Exec source和Spool Source的比较:

  1. Exec source可以实现对日志的实时收集,但是存在Flume不运行或指令出错时将无法手机到日志数据,无法保证日志数据的完整性。
  2. Spool Source 虽然无法实现实时的收集数据,但是可以以分钟的方式切割文件,趋近于实时。
  3. 如果应用无法以分钟分割日志文件,可以两种收集方式同时使用。

Flume 过滤器(拦截器):在App(应用程序日志)和source之间,对App日志进行拦截处理,官方已有的拦截器有:

  • Timestamp Interceptor:在event的header中添加一个key作为timestamp,value为当前的事件戳。
  • Host Interceprot:在event的header中添加一个的key为host,value为当前机器的hostname或IP
  • Static Interceptor:在event的header中添加自动以的key和value
  • Regex Filtering Interceptor:通过正则来清晰或包含匹配的events
  • Regex Extrator Inteneptor:通过正则来在header中添加指定的key,value则为正则匹配的部分。

Flume Channel

缓存从Source 到Sink的中间数据,可用下列配置作为channel:

  • 内存
  • 文件
  • JDBC
  • kafka

Flume Channel选择器:数据通过不同的Channel路由到不同的Sink中

  • Replication Channel Selectot:将source过来的events发往所有的Channel
  • Multiplexing Channel Selectot:可以选择将数据发往哪些Channel

Flume Sink

负责从Channel中读取数据并发送给下一个Agent或最终目的地。
目的地:HDFS、Hbase、Avro、ElasticSearch、File、Logger

Flume 序列化器

  • Body Text Serializer:忽略event header ,只将event value写到输出流。
  • Avro Event Serializer:数据以Avro序列化,然后写到输出流。

安装Flume

http://flume.apache.org/download.html下载相应的tar.gz文件,解压即可。


命令行运行flume

在安装目录下的conf文件夹下新建一个example.conf的文件。
配置以下内容。

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory 
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

开启两个linux终端,在第一个终端中输入

devil@devilshome:~/soft/flume-1.6.0$ bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 -Dflume.root.logger=INFO,console

在第二个终端中输入

devil@devilshome:~$ telnet localhost 44444

默认已经安装过telnet了,如果没有安装过,可以使用以下命令安装

devil@devilshome:~$ sudo yum install telnet

这样,在第二个终端命令行输入的信息,就可以实时显示在第一个终端界面了。

devil@devilshome:~$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello world
OK
Connection closed by foreign host.
devil@devilshome:~$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
OK
2016-06-30 16:53:13,088 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 68 65 6C 6C 6F 0D                               hello. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值