Flume

Flume海量日志采集、聚合和传输的系统
不依赖hadoop,只依赖jdk
可以向外暴露地址和端口,让其他服务器将数据加密或者走内网发送到Flume上,然后再通过sink到hdfs上

一个flume的agent就是一个jvm的进程
Flume-Ng
multi-agent flow
在这里插入图片描述
Consolidation合并到一起
Flume-Ng架构
Multiplexing the flow
在这里插入图片描述
在这里插入图片描述
Source(收集):完成对日志数据的收集,分成 transtion 和 event 打入到channel之中。
Channel(暂存):主要提供一个队列的功能,对source提供中的数据进行简单的缓存。
Sink(处理):取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。
Event:一条消息或者是一条数据
Channel:event的临时缓冲区,等待sink消费,线程安全并且具有事务性,支持source写失败重复写和sink读失败重复读
sink:从channel获取event并发送到中心存储或者下一级agent
agent:包含source,channel,sink等组件的flume进程
Interceptor:event拦截器,根据配置文件在event的header中添加时间戳、主机名称等
selector:event选择器,event选择流入channel的方式,flume提供了复制(replicating)和复用(multiplexing)选择器
sink processor:event sink处理器,flume提供了故障转移处理器和负载均衡处理器

数据采集基于多个agent

source:
spooldir 监听目录,只要目录中有新的数据,就会将目录中的数据采集
exec:会将命令的返回值给source,和tail -F 可以实时采集数据

Exec source
可通过写Unix command的方式组织数据,最常用的就是tail -F [file]。
可以实现实时传输,但在flume不运行和脚本错误时,会丢数据,也不支持断点续传功能。
Spooling Directory Source
SpoolSource:是监测配置的目录下新增的文件,并将文件中的数据读取出来,可实现准实时。需要注意:
1、拷贝到spool目录下的文件不可以再打开编辑。也就是说不能再次更改这个文件,否则会跑异常
2、spool目录下不可包含相应的子目录。在实际使用的过程中,可以结合log4j使用,使用log4j的时候,将log4j的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。log4j有一个TimeRolling的插件,可以把log4j分割的文件到spool目录。基本实现了实时的监控。Flume在传完文件之后,将会修改文件的后缀,变为.COMPLETED(后缀也可以在配置文件中灵活指定)
3、spool在sink为hdfs的情况下,传完数据后,本地文件就会变成access_20160505_000001.log.COMPLETED,当从hdfs上转入hive后,hdfs上的数据就消失了

ExecSource,SpoolSource对比:ExecSource可以实现对日志的实时收集,但是存在Flume不运行或者指令执行出错时,将无法收集到日志数据,无法何证日志数据的完整性。SpoolSource虽然无法实现实时的收集数据,但是可以使用以分钟的方式分割文件,趋近于实时。如果应用无法实现以分钟切割日志文件的话,可以两种收集方式结合使用。

Channel有多种方式:有MemoryChannel, JDBC Channel, MemoryRecoverChannel, FileChannel。MemoryChannel可以实现高速的吞吐,但是无法保证数据的完整性。

channel类型:memory channel、file channel和kafka channel等,如果使用kafka channel,那么日志收集层只需要配置source和kafka channel组件,不需要配置sink组件,减少了日志收集层启动的进程数并且有效降低内存,磁盘等使用率,而日志汇聚层可以只配置kafka channel和sink,不需要再配置source,减少日志汇聚层的进程数,

拦截器
时间戳,主机,uuid,静态,正则表达式过滤,搜索-替换拦截器等,支持自定义拦截器,实现Interceptor接口
选择器
复制选择器,默认,source以复制的方式将一个event同时写入多个channel中,不同的sink可以从不同的channel中获取相同的event

复用选择器,需要和拦截器配合使用,根据event的头信息的不同键值数据来判断event应该被写入哪个channel中

负载均衡和故障转移,需要设置sink组,同一个sink组内有多个子sink,不同的sink之间可以配置成负载均衡或者故障转移

单层日志收集架构,简单易用,但问题很多
分层日志收集架构,将日志采集,日志汇聚分发分开部署,将不同种类的数据源分类划分层次,第一层日志采集层,负责采集各个业务线不同的日志数据,每台日志服务器都部署一个或者多个agent,在agent内部根据业务场景选择负载均衡、故障转移保证系统高效运行。第二层日志汇聚层,负责接收日志采集层实时发送过来的日志数据,根据业务类型分类,对同一类型的日志数据统一处理,

flume 命令:

sh flume-ng 参数
global options:
--conf,-c <conf>          使用 <conf> 目录下的配置
agent options:
  --name,-n <name>          这个Agent的名称(必需)
  --conf-file,-f <file>     指定一个配置文件 (如果有 -z 可以缺失)
  --zkConnString,-z <str>   指定使用的ZooKeeper的链接 (如果有 -f 可以缺失)
  --zkBasePath,-p <path>    指定agent config 在 ZooKeeper Base Path

启动

sh flume-ng agent --conf ./conf --conf-file ./conf/spool/data-log.conf --name data_agent -Dflume.root.logger=INFO,console >/letv/data/20160427.log 2>&1 &

(2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。)

参考:
http://www.cnblogs.com/cswuyg/p/4498804.html
http://andrewli.blog.51cto.com/7625043/1615155
http://my.oschina.net/leejun2005/blog/288136
http://www.cnblogs.com/lxf20061900/p/4012847.html
http://www.huyanping.cn/flumehive%E5%A4%84%E7%90%86%E6%97%A5%E5%BF%97/

高并发下的优化
https://blog.csdn.net/xvshu/article/details/50413373

flume常见异常汇总以及解决方案
https://www.cnblogs.com/yinzhengjie/p/9951214.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值