作者:飘泊的牛小盆友 | 来源:互联网 | 2023-05-18 01:44
flume日志收集系统Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据
flume
日志收集系统
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
基本概念
Event 事件
把读取的一条日志信息包装成一个对象,这个对象就叫Flume Event。
本质就是一个json字符串,如:{head:info,body:info}
Agent 代理
代理,是一个java进程(JVM),它承载event,从外部源传递到下一个目标的组件。
主要由3部分组成:Source、Channel、Sink。
Source 数据源
Source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。
Channel 数据通道
Source组件把数据收集来以后,临时存放在channel中,即channel组件在agent中是专门用来存放临时数据的。对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等等。
Sink 数据汇聚点
Sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定义。
组合过程
为了安全性,数据的传输是将数据封装成一个Event事件。Source会将从服务器收集的数据封装成Event,然后存储在缓冲区Channel,Channel的结构与队列比较相似(先进先出)。Sink就会从缓冲区Channel中抓取数据,抓取到数据时,就会把Channel中的对应数据删除,并且把抓取的数据写入HDFS等目标地址或者也可以是下一个Source。一定是当数据传输成功后,才会删除缓冲区Channel中的数据,这是为了可靠性。当接收方Crash(崩溃)时,以便可以重新发送数据。
2、可靠性
当节点出现故障时,日志能够被传送到其他节点上而不会丢失。
Flume提供了三种级别的可靠性保障,从强到弱依次分别为:
end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。)
Store on failure(这也是Scribe-Facebook开源的日志收集系统-采用的策略,当数据接收方crash(崩溃)时,将数据写到本地,待恢复后,继续发送)
Besteffort(数据发送到接收方后,不会进行确认)
3、需要安装jdk
jdk安装
4、安装flume
安装flume
5、目录结构
目录结构
Source组件
重点掌握Avro Source和Spooling Directory Source。
#单节点Flume配置
#命名Agent a1的组件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#描述/配置Source
a1.sources.r1.type = netcat #内置类型,接收来自网络的数据
a1.sources.r1.bind = 0.0.0.0 #等同于网络的127.0.0.1
a1.sources.r1.port = 22222 #服务的端口号
#描述Sink
a1.sinks.k1.type = logger #内置类型
#描述内存Channel
a1.channels.c1.type = memory #保存数据到内存
a1.channels.c1.capacity = 1000 #容量最大存放1000条日志
a1.channels.c1.transactionCapacity = 100 #事务中的一批数据100条
#为Channle绑定Source和Sink
a1.sources.r1.channels = c1 #一个source可以绑定到多个channel
a1.sinks.k1.channel = c1 #一个sink只能绑定到一个channel
flume.properties