Flume组件简介
Flume组件介绍:
FLume 是通过agent(代理)为最小的独立运行单位,agent包括Source,Channel,Sink
Source: 1)NetCat Source 使用TCP和UDP两种协议方式,使用方法基本相同,通过监听指定的***IP和端口***来传输数据,它会将监听到的每一行数据转化成一个Event写入到Channel中
2)Avro Source(读音类似于[ævrə]) (https://blog.csdn.net/zhouleilei/article/details/8537831) Avro Source可以定制avro-client发送一个指定的文件给Flume agent,Avro源使用***Avro RPC机制***,Flume主要的RPC Source也是 Avro Source,它使用Netty-Avro inter-process的通信(IPC)协议来通信,因此可以用java或JVM语言发送数据到Avro Source端。
3)Exec类型的Source a1.sources.r1.command=tail -f /tmp/err.log 要执行的***命令***
4)Taildir Source 监控指定的***多个文件***,一旦文件内有新写入的数据,就会将其写入到指定的sink内,本来源可靠性高,不会丢失数据,建议使用
5)Spooling Directory类型的 Source: 指定的文件加入到“自动搜集”目录中。flume会持续监听这个***目录***,把文件当做source来处理
6)Kafka Source 支持从***Kafka***指定的topic中读取数据
7)自定义Source(继承封装)
Channel: 1)Memory Channel(内存Channels) events存储在配置最大大小的***内存***队列中。对于流量较高和由于agent故障而准备丢失数据的流程来说,这是一个理想的选择。
2)file channel(磁盘持久化) File Channel是一个持久化的隧道(channel),数据安全并且只要磁盘空间足够,它就可以将数据存储到***磁盘***上。
3) JDBC Channel(数据库) events存储在持久化存储***数据库***中
4)Kafka Channel events存储在***Kafka***集群中。Kafka提供高可用性和高可靠性,所以当agent或者kafka broker 崩溃时,events能马上被其他sinks可用。
5)自定义channel
Sink: 1)File Roll 存储于***本地系统***中。
a1.sinks.s1.type=file_roll
a1.sinks.s1.sink.directory=/home/work/rolldata
a1.sinks.s1.sink.rollInterval=60
2)Avro 是实现***多级流动***、扇出流(1到多) 扇入流(多到1) 的基础。
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.212
a1.sinks.s1.port=9999
3)HDFS 此Sink将事件写入到Hadoop分布式文件系统***HDFS***中目前它支持创建文本文件和序,列化文件。
拦截器: 设置在source和channel之间。source接收到的时间,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器。
1)Timestamp (***时间戳***拦截器)
a1.sources.r1.interceptors = timestamp
a1.sources.r1.interceptors.timestamp.type=timestamp
a1.sources.r1.interceptors.timestamp.preserveExisting=false
2)Host (***主机***拦截器)
a1.sources.r1.interceptors = host
a1.sources.r1.interceptors.host.type=host
a1.sources.r1.interceptors.host.useIP=false
a1.sources.r1.interceptors.timestamp.preserveExisting=true
3)Static(***静态***拦截器)
a1.sources.r1.interceptors = static
a1.sources.r1.interceptors.static.type=static
a1.sources.r1.interceptors.static.key=logs
a1.sources.r1.interceptors.static.value=logFlume
a1.sources.r1.interceptors.static.preserveExisting=false
4)REGEX_FILTER (***正则过滤***拦截器)
a1.sources.r1.interceptors = regex
a1.sources.r1.interceptors.regex.type=REGEX_FILTER
a1.sources.r1.interceptors.regex.regex=(rm)|(kill)
a1.sources.r1.interceptors.regex.excludeEvents=false
5)Regex_Extractor(***正则匹配***拦截器)
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = regex_extractor
#hostname is bigdata111 ip is 192.168.212.111
a1.sources.r1.interceptors.i1.regex = hostname is (.*?) ip is (.*)
6)UUID(***UUID***拦截器)
a1.sources.sources1.interceptors = i1
a1.sources.sources1.interceptors.i1.type = org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
a1.sources.sources1.interceptors.i1.headerName = uuid
a1.sources.sources1.interceptors.i1.preserveExisting = true
a1.sources.sources1.interceptors.i1.prefix = UUID-
7)自定义拦截器(java)