Flume个人心得笔记之Interceptor安装
目录
六.Search And Replace Interceptor
一.概述
- Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的
- 拦截器需要实现org.apache.flume.interceptor.Interceptor接口
- 拦截器可以修改或删除事件基于开发者在选择器中选择的任何条件
- 拦截器采用了责任链模式,多个拦截器可以按指定顺序拦截
- 一个拦截器返回的事件列表被传递给链中的下一个拦截器
- 如果一个拦截器需要删除事件,它只需要在返回的事件集中不包含要删除的事件即可
- 如果要删除所有事件,只需返回一个空列表
二.Timestamp Interceptor
一、概述
- 这个拦截器在事件头中插入以毫秒为单位的当前处理时间
- 头的名字为timestamp,值为当前处理的时间戳
- 如果在之前已经有这个时间戳,则保留原有的时间戳
二、可配置项说明
配置项 | 说明 |
type | timestamp |
preserveExisting | false 如果时间戳已经存在是否保留 |
三、配置示例
1.创建文件
vim timein.conf
2.配置第一个节点,2,3默认扇出
i1.type = timestamp
3.启动
4.传输数据
5.接收数据 -时间检测
6.把数据放到HDFS上,按天存放
7.启动
前提HDFS是启动的,可以直接启动Headoop集群
8.传输数据
9.查看HDFS接收数据
按天存放 %Y-%m-%D
三.Host Interceptor
一、概述
- 这个拦截器插入当前处理Agent的主机名或ip
- 头的名字为host或配置的名称
- 值是主机名或ip地址,基于配置
二、可配置项说明
配置参数 | 说明 |
type | host |
preserveExisting | false 如果主机名已经存在是否保留 |
useIP | true 如果配置为true则用IP,配置为false则用主机名 |
hostHeader | host 加入头时使用的名称 |
三、配置示例
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1 s2
a1.channels=c1 c2
#描述/配置a1的source1
a1.sources.r1.type=http
a1.sources.r1.port=8888
a1.sources.r1.interceptors=i1
a1.sources.r1.interceptors.i1.type=host
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.212
a1.sinks.s1.port=8090
a1.sinks.s2.type=avro
a1.sinks.s2.hostname=192.168.234.213
a1.sinks.s2.port=8090
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.channels.c2.type=memory
a1.channels.c2.capacity=1000
a1.channels.c2.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1 c2
a1.sinks.s1.channel=c1
a1.sinks.s2.channel=c2
不常用,不演示了
四.Static Interceptor
一、概述
- 此拦截器允许用户增加静态头信息使用静态的值到所有事件
- 目前的实现中不允许一次指定多个头
- 如果需要增加多个静态头可以指定多个Static interceptors
二、可配置项说明
配置项 | 说明 |
type | static |
preserveExisting | true |
key | key 要增加的头名 |
value | value 要增加的头值 |
三、配置示例
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1 s2
a1.channels=c1 c2
#描述/配置a1的source1
a1.sources.r1.type=http
a1.sources.r1.port=8888
a1.sources.r1.interceptors=i1
a1.sources.r1.interceptors.i1.type=static
a1.sources.r1.interceptors.i1.key=addr
a1.sources.r1.interceptors.i1.value=beijing
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.212
a1.sinks.s1.port=9999
a1.sinks.s2.type=avro
a1.sinks.s2.hostname=192.168.234.213
a1.sinks.s2.port=9999
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.channels.c2.type=memory
a1.channels.c2.capacity=1000
a1.channels.c2.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1 c2
a1.sinks.s1.channel=c1
a1.sinks.s2.channel=c2
五.UUID Interceptor
一、概述
- 这个拦截器在所有事件头中增加一个全局一致性标志,其实就是UUID
二、可配置项说明
配置项 | 说明 |
type | org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder |
headerName | id 头名称 |
preserveExisting | true 如果头已经存在,是否保留 |
prefix | “” 在UUID前拼接的字符串前缀 |
三、配置示例
六.Search And Replace Interceptor
一、概述
- 这个拦截器提供了简单的基于字符串的正则搜索和替换功能
二、可配置项说明
配置项 | 说明 |
type | search_replace |
searchPattern | 要搜索和替换的正则表达式 |
replaceString | 要替换为的字符串 |
charset | UTF-8 字符集编码,默认utf-8 |
三、配置示例
1.编辑文本
2.添加配置
3.启动
4.传输数据
5.接收数据
七.Regex Filtering Interceptor
一、概述
- 此拦截器通过解析事件体去匹配给定正则表达式来筛选事件
- 所提供的正则表达式即可以用来包含或刨除事件
二、可配置项说明
配置项 | 说明 |
type | regex_filter |
regex | ”.*” 所要匹配的正则表达式 |
excludeEvents | false 如果是true则刨除匹配的事件,false则包含匹配的事件。 |
三、配置示例
1.编辑文本
vim regexin.conf
2.配置文件
3.启动
4.传输数据
5.接收数据
有数字,刨除,不接收
八.Regex Extractor Interceptor
一、概述
- 使用指定正则表达式匹配事件,并将匹配到的组作为头加入到事件中
- 它也支持插件化的序列化器用来格式化匹配到的组在加入他们作为头之前
二、可配置项说明
配置项 | 说明 |
type | regex_extractor |
regex | 要匹配的正则表达式 |
serializers | 匹配对象列表 |
三、配置示例
# 01 define agent name, source/sink/channel
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 02 source,http,jsonhandler
a1.sources.r1.type = http
a1.sources.r1.bind = master
a1.sources.r1.port = 6666
a1.sources.r1.handler = org.apache.flume.source.http.JSONHandler
# 03 regex extractor interceptor,match event body to extract character and digital
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = regex_extractor
a1.sources.r1.interceptors.i1.regex = (^[a-zA-Z]*)\\s([0-9]*$) # regex匹配并进行分组,匹配结果将有两个部分, 注意\s空白字符要进行转义
# specify key for 2 matched part
a1.sources.r1.interceptors.i1.serializers = s1 s2
# key name
a1.sources.r1.interceptors.i1.serializers.s1.name = word
a1.sources.r1.interceptors.i1.serializers.s2.name = digital
# 04 logger sink
a1.sinks.k1.type = logger
# 05 channel,memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 06 bind source,sink to channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1