概述
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
它的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送达目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地之后,flume再删除自己缓存的数据。
event
将传输的数据进行封装,是Flume传输数据的基本单位。一条日志在Flume中对应着一个JSON串,即一个Flume Event。
agent
Flume运行的核心就是agent,agent本身是一个Java进程,包含3个核心的组件:source–channel–sink。
source
专门用来收集数据,可以处理各种类型、各种格式的日志数据。包括:
①avro source:监听avro端口,来接收外部avro客户端的事件流。接收到的是经过avro序列化后的数据,然后反序列化数据继续传输。
②spooldir source:将指定的文件加入到自动搜集的目录中。flume会持续监听这个目录,把文件当做source来处理。(注意:加入到自动搜集目录的文件不能修改,否则会报错;也不能产生重名的文件)
③exec source:可以将命令产生的输出作为源。
④netcat source:用来监听一个指定端口,并接收监听到的数据。
channel
source组件把数据收集来以后,临时存放在channel中。即channel组件在agent中是专门用来存放临时数据的,对采集到的数据进行简单的缓存。可以存放在memory、jdbc、file等等。
①memory channel:事件被存储在内存中,适合需要高吞吐量且允许数据丢失的场景下。
②jdbc channel:事件被持久化到可靠的数据库中。目前只支持Derby数据库
③file channel:时间被存储到文件中,性能比较低,但是不会丢失数据。
sink
用于把数据发送到目的地的组件,目的地包括:
①logger sink:记录指定级别的日志(INFO,DEBUG,ERROR),通常用于调试。(注意:需要在–conf -c)参数指定的目录下有log4j的配置文件。
②file_roll sink:在本地系统中存储事件。每隔指定时长生成文件保存这段时间内收集到的日志信息。
③avro sink:实现多级流动,扇出流(1到多),扇入流(多到1)的基础。
④hdfs sink:将sink事件写入到Hadoop中的hdfs中。
Selector– 选择器
可以工作在复制、多路复用模式下。
复制模式:Selector默认是复制模式(replicating),即把source复制,然后分发给多个sink。
多路复用模式:multiplexing,用户可以指定转发的规则,selector根据规则进行数据的分发。
Interceptors–拦截器
在运行阶段修改、删除Event,通过拦截器来实现。
①timestamp interceptor:在事件头中插入以毫秒为单位的当前处理时间。
②host interceptor:插入当前处理agent的主机名或ip。
③search_replace interceptor:提供了简单的基于字符串的正则搜索和替换功能。
④regex_extractor:使用指定正则表达式匹配事件,并将匹配到的组作为头加入到事件中。
Processor–失败恢复,负载均衡
①失败恢复:failover
②负载均衡:round_robin轮训方式;random随机方式
Flume的特点
①复杂流动:Flume允许用户进行多级流动到最终目的地,也允许扇出流(一到多)、扇入流(多到一)的流动和故障转移、失败处理。
②可靠性
事务型的数据传递,保证数据的可靠性。
③可恢复
通道可以以内存或文件的方式实现,内存更快,但是不可恢复;文件比较慢但提供了可恢复性。
Flume
最新推荐文章于 2024-09-16 08:32:08 发布