vi@TOC
一、Flume自带的拦截器
示例1:
具体实现:
通过正则表达式,过滤掉匹配上的消息,这里是以user开头的消息
实现一个source传向2个通道,两个sink将两个通道的数据分别传入Kafka和hdfs
配置文件:
定义三个组件:
//agent组件的三部分的初始化定义
train.sources=trainSource
train.channels=kafkaChannel hdfsChannel
train.sinks=kafkaSink hdfsSink
source:
//sousce被定义为监听某个文件路径下的新文件
train.sources.trainSource.type=spooldir
//flume监听的文件目录,该目录下的文件内容会被flune收集
train.sources.trainSource.spoolDir=/root/software/flumlogfile/train
//指定一个把文件中的一行数据解析成Event的解析器,所有解析器必须实现EventDeserializer.Builder接口 LINE这个反序列化器会把文本数据的每行解析成一个Event
train.sources.trainSource.deserializer=LINE
//指定一个Event数据所包含的最大字符数,一行文本超过配置的这个长度就会被截断
train.sources.trainSource.deserializer.maxLineLength=32000
//指定要被读取的文件的正则表达式
train.sources.trainSource.includePattern=train_[0-9]{
4}-[0-9]{
2}-[0-9]{
2}.csv
//指定拦截器是head_filter类型
train.sources.trainSource.interceptors=head_filter
//定义组件,regex_filter 正则过滤拦截器
train.sources.trainSource.interceptors.head_filter.type=regex_filter
//设置Event内容的正则表达式
train.sources.trainSource.interceptors.head_filter.regex=^user*
//true表示丢弃掉匹配上正则表达式的内容,flase表示保留匹配上正则表达式的内容
train.sources.trainSource.interceptors.head_filter.excludeEvents=true
channel:
train.channels.kafkaChannel.type=file
train.channels.kafkaChannel.checkpoinDir=/root/software/flumlogfile/checkpoint/train
train.channels.kafkaChannel.dataDirs=/root/software/flumlogfile/data/train
train.channels.hdfsChannel.type=memory
train.channels.hdfsChannel.capacity=64000
train.channels.hdfsChannel.transactionCapacity=16000
sink:
train.sinks.kafkaSink.type=org.apache.flume.sink.kafka.KafkaSink
train.sinks.kafkaSink.batchSize=640
train.sinks.kafkaSink.brokerList=192.168.21.2:9092
train.sinks.kafkaSink.topic=train
train.sinks.hdfsSink.type=hdfs
train.