Flume-ng原理

Flume是一个日志收集系统。具有分布式、高可靠、高可用性(HA)等特点。对海量日志进行采集、聚合和传输,它可以自己定制各类数据发送方,可以对数据进行简单的处理,并且可以写到各种数据接受方。

Flume 的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。

Flume 传输数据的基本单位是 event,如果是文本文件,通常是一行记录。

event 从 Source,流向 Channel,再到 Sink,本身是一个字节数组,并可携带 headers 信息。event 代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。

Flume 运行的核心是 Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是 source、channel、sink。通过这些组件,event 可以从一个地方流向另一个地方。

source------>channel-------->sink

source 可以接收外部源发送过来的数据。不同的 source,可以接受不同的数据格式。比如:有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有新文件产生,就会立刻读取其内容。

channel 是一个存储地,接收 source 的输出,然后到 sink 消费掉。channel 中的所有数据直到进入下一个channel中或者进入终端才会被删除。当 sink 写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。

sink 会消费 channel 中的数据,然后送给外部源或者其他 source。如数据可以写入到 HDFS 或者 HBase 中。

flume 允许多个 agent 连在一起



核心组件:

1、source

数据的来源。对现有程序改动最小的是直接读取日志文件,基本可以实现无缝接入,不需要对现有程序进行任何改动。

对于直接读取文件,Source有两种方式:

ExecSource: 以运行 Linux 命令的方式,持续的输出最新的数据,如 tail -F 文件名 ,文件名必须是指定的。 ExecSource 可以实现对日志的实时收集,但是存在Flume不运行或者指令执行出错时,将无法收集到日志数据,无法保证日志数据的完整性。
SpoolSource: 监测目录下新增的文件,并将文件中的数据读取出来。

需要注意两点:拷贝到 spool 目录下的文件不可以再打开编辑;spool 目录下不可包含相应的子目录。
SpoolSource 虽然无法实现实时的收集数据,但是可以以分钟的方式分割文件,趋近于实时。
如果应用无法实现以分钟切割日志文件的话, 可以两种收集方式结合使用。 在实际使用的过程中,可以结合 log4j 使用,使用 log4j的时候,将 log4j 的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。
log4j 有一个 TimeRolling 的插件,可以把 log4j 分割文件到 spool 目录。基本实现了实时的监控。Flume 在传完文件之后,将会修改文件的后缀,变为 .COMPLETED


2、channel

当前有几个 channel 可供选择,分别是 Memory Channel, JDBC Channel , File Channel,Psuedo Transaction Channel。比较常见的是前三种 channel。

MemoryChannel 可以实现高速的吞吐,但是无法保证数据的完整性。
FileChannel保证数据的完整性与一致性。在具体配置FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。

File Channel 是一个持久化的隧道(channel),它持久化所有的事件,并将其存储到磁盘中。因此,即使 Java 虚拟机当掉,或者操作系统崩溃或重启,再或者事件没有在管道中成功地传递到下一个代理(agent),这一切都不会造成数据丢失。

Memory Channel 是一个不稳定的隧道,其原因是由于它在内存中存储所有事件。如果 java 进程死掉,任何存储在内存的事件将会丢失。另外,内存的空间收到 RAM大小的限制,而 File Channel 这方面是它的优势,只要磁盘空间足够,它就可以将所有事件数据存储到磁盘上。


3、sink

sink在设置存储数据时,可以向文件系统、数据库、hadoop等存数据,在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。


启动agent 时参数:

$ flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/a.conf -Dflume.root.logger=DEBUG,console -n agent-1
-n 指定agent名称
-c 指定配置文件目录
-f 指定配置文件
-Dflume.root.logger=DEBUG,console 设置日志等级


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值