flume日志采集框架

  1. 简单介绍
    flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合、传输系统。
    可以采集文件、socket数据包等多种形式源数据,又可以将采集到的数据输出到HDFS、kafka、hive、hbase等存储系统中。
    flume是属于生产者和消费者模式,目前不支持高可用,需要编写相应的脚本来监听,当agent挂掉时,脚本自动启动agent。agent会记录上一次的收集位置。

  2. 运行机制
    核心角色是agent,一个agent包含source、channel、sink三个组件。
    source:采集源,用于和数据源对接,获取数据
    channel:数据传输通道
    sink:采集数据的传送目的
    flume的传输过程:
    source监控某个文件或数据流,数据源产生数据,拿到该数据后,将数据封装成一个event,并put到channel后commit提交,channel队列是FIFO,sink去队列中拉取数据,然后写出去。

  3. source、channel、sink的类型
    这里每个组件的类型,我们不会详细的一一介绍,只介绍一些常用的。剩余的,读者可自行百度。
    source类型:
    - [ ] exec:监控文件内容变化
    - [ ] netcat:监控端口变化
    - [ ] spooldir:监控目录下文件变化
    - [ ] avro:rpc协议下的传输格式
    channel类型:
    - [ ] memory:把事件存储在一个内存队列中
    - [ ] file:把时间存储在一个本地系统上
    - [ ] jdbc:将事件存储在数据库中
    sink类型:
    - [ ] avro:通过一个avro rpc发送事件到一个avro source中
    - [ ] logger:使用slf4j记录info级别的时间
    - [ ] thrift:通过thrift rpc发送事件到thrift source
    - [ ] hbase:发送到hbase中
    - [ ] hdfs:写到hdfs上

  4. 简单案例展示

<-----------------flume简单监听目录下文件变化展示--------------------->
//一个agent中包含的组件
a1.sources=r1
a1.channels=c1
a1.sinks=k1
//source的配置
a1.sources.r1.type=spooldir
a1.sources.r1.spoolDir=/tmp/test
//channel的配置
a1.channels.c1.type=memory
//sink的配置
//sinks的类型
a1.sinks.k1.type=hdfs
//sinks的hdfs上的路径以及分区策略(按照天数划分,一天生成一个文件夹)
a1.sinks.k1.hdfs.path=/tmp/flume/year=%Y/month=%m/day=%d
//sinks的文件前缀
a1.sinks.k1.hdfs.filePrefix=events
//sinks的文件后缀
a1.sinks.k1.hdfs.fileSuffix=.log
//sinks的文件格式
a1.sinks.k1.hdfs.fileType=DataStream
//sources的输出位置和sinks的数据拉取位置(因为一个sink只能去一个channel里拉取数据,所以是channel,而source可以将数据发送到多个channel中,所以是channels)
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
  1. 补充知识
    spooling directory source导入文件的方式是把文件按行拆分,并为每行创建一个flume事件。事件是由一个可选的header和一个二进制的body组成。文件被source重命名为.completed,表名flume已经完成文件的处理,不会再操作这个文件。
    如果由于特殊原因导致channel到sink事件的传递过程中,使得事件无法记录,name事务会回滚,事件仍然保留在channel中,等待重新传送。
    如果channel的类型是file,代理重新启动,事件也不会丢失,因为已经持久化到本地disk,
    如果是memory,因为是在内存中,代理重新启动后,事件会丢失。
    总的来说,source产生的每个事件都会到达sink,每个事件到达sink至少一个,也就是有可能重复到达,比如代理重启前部分事件或全部事件已被提交到channel中,代理重启后,spooling directory source还是会为所有未完成的时间重新传递事件。
    代理分发,通过avro实现,将多个agent串起来,这样可以减轻hdfs上的压力,提高mr程序的效率。
    sink组的概念,将多个sink当做一个sink来处理,以实现故障转移或负载均衡。sink组合代理分发读者可通过自行百度了解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值