flume浅谈

1.1 什么是flume?

 Flume是apache旗下的数据采集工具,主要目的是收集日志,事件等资源


  • 官网简介

Flume是一种分布式、可靠和可用的服务,用于高效地收集、聚合和移动大量日志数据。它有一个简单而灵活的基于流数据流的体系结构。它具有可调的可靠性机制和许多故障转移和恢复机制,具有健壮性和容错性。它使用一个简单的可扩展数据模型,允许在线分析应用程序。

它可以将从各种各样的数据源上采集数据,并传输到 Hadoop生态圈(hbase,hive,hdfs,kafka)

1.2 Flume特性

 Flume是分布式,可靠的高可用的海量日志采集,汇聚和传输的程序

Flume可以采集文件,socket数据包(网络端口)、文件夹、kafka、mysql数据库等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中Flume可以采集文件,socket数据包(网络端口)、文件夹、kafka、mysql数据库等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中,因此,flume可以适用于大部分的日常数据采集

2 Flume核心概念

 1:agent

flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道。

Source:采集组件,用于跟数据源对接,以获取数据;它有各种各样的内置实现;

Sink:下沉组件,用于往下一级agent传递数据或者向最终存储系统传递数据

Channel:传输通道组件,用于从source将数据传递到sink

 

单个agent采集数据

 

多级agent之间串联

 

3 Flume的事物机制

 Flume有二个独立的事物,分别是从Source到Channel    Channel到Sink的event传递

Channel是中间缓存的,主要是让Source和Sink解耦合

一旦事务中所有的事件全部传递到Channel且提交成功,那么Soucrce就将event batch标记为完成。

同理,事务以类似的方式处理从Channel到Sink的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚,且所有的事件都会保持到Channel中,等待重新传递

4 flume的配置文件

-- 日志生成模拟脚本:
while true; do echo 111111111111111111111111_$RANDOM >> access.log; sleep 0.2; done

kill 后台程序

-- fume的采集配置
a1.sources = r1   --source名字
a1.channels = c1 --channel名字,可以跟多个 如 c1 c2空格隔开
a1.sinks = k1 --Sinks名字

# source config
a1.sources.r1.channels = c1
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = g1
a1.sources.r1.filegroups.g1 = /var/log/eventlog/access.*  --找到输入文件的目录
a1.sources.r1.header.g1.abc = bbb 
a1.sources.r1.batchSize = 100  --提交的event批次大小
a1.sources.r1.fileHeader = true
a1.sources.r1.fileHeaderKey = fileName
a1.sources.r1.interceptors = i1 --这个是解决时间戳问题,因为sink输出是分钟   
a1.sources.r1.interceptors.i1.type = timestamp --这个是解决时间戳问题,因为sink输出是分钟


# channel config
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000   
a1.channels.c1.transactionCapacity = 200

# sink config
a1.sinks.k1.channel = c1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://doitedu01:8020/flume_test/%Y-%m-%d/%H-%M/ --输出在hdfs目录下按照,年月日 / 时分来创建文件夹
a1.sinks.k1.hdfs.filePrefix = event_  --前缀  中间以时间戳为标识
a1.sinks.k1.hdfs.fileSuffix = .log  --后缀
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.rollSize = 134217728 --128M 是以128M来确定block块
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.fileType = DataStream

-- flume agent的启动命令
bin/flume-ng agent -c conf -f agentconf/taildir-m-hdfs.properties -n a1
 
-- 添加日志级别调整参数 可以查看报错信息
bin/flume-ng agent -c conf -f agentconf/taildir-m-hdfs.properties -n a1 -Dflume.root.logger=DEBUG,console


-- 添加监控配置
bin/flume-ng agent -c conf -f agentconf/taildir-m-hdfs.properties -n a1 -Dflume.monitoring.type=http -Dflume.monitoring.port=34545

可以在port这个网页进行访问.linux01:34545

ganglia 拦截器使用的是本地时间,如果设置每天读取文件的话在2020-8-30 23:59:58还有数据出入Source,那么输入在Channel缓存中,等Channel输出的时候是2020-8-31 00:01:00
就会输出在明天的文件内
使用拦截器,不使用本地时间 不会导致出错

--后台启动
bin/flume-ng agent -c conf -f agentconf/taildir-m-hdfs.properties -n a1 1>/dev/null 2>&1 &
/dev/null 会将数据删除不保存,
2>&1  是将报错的文件也保存在1的目录下, 
1是保存正确是文件
2是保存报错的的文件
& 后台运行

ll –a显示所有文件


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值