Flume: ------ 装饰头、查找替换拦截器、过滤抽取拦截器

Apache Flume

flume官方用户指南网址

拦截器

作用于Source组件,对Source封装的Event数据进行拦截或者是装饰 ,Flume内建了许多拦截器

  • Timestamp Interceptor

该拦截器将事件处理的时间(以毫秒为单位)插入到事件标头中。此拦截器将插入一个具有关键timestamp 的标头(或由header属性指定),其值是相关的时间戳记。如果配置中已经存在该时间戳,则该拦截器可以保留现有时间戳。

  • Host Interceptor

该拦截器将插入正在运行该代理的主机的主机名或IP地址。它会根据配置插入带有密钥主机或已配置密钥的标头,其值是主机的主机名或IP地址。

  • Static Interceptor
    静态拦截器允许用户向所有事件添加带有静态值的静态标头。
  • Remove Header Interceptor
    该拦截器通过删除一个或多个标头来操纵Flume事件标头。它可以删除静态定义的标头,基于正则表达式的标头或列表中的标头。如果这些都没有定义,或者没有标题与条件匹配,则不会修改Flume事件。
物业名称	默认	描述
类型	–	组件类型名称必须为remove_header
withName	–	要删除的标题的名称
fromList	–	要删除的标头列表,由fromListSeparator指定的分隔符分隔
fromListSeparator	\ s *,\ s *	正则表达式,用于分隔fromList指定的列表中的多个标头名称。默认为逗号,由任意数量的空格字符包围
匹配	–	名称与该正则表达式匹配的所有标头都将被删除
  • UUID Interceptor

该拦截器在所有被拦截的事件上设置一个通用的唯一标识符。示例UUID是b5755073-77a9-43c1-8fad-b7a586fc1b97,它表示128位值。

如果没有可用的事件级别的应用程序唯一键,请考虑使用UUIDInterceptor为事件自动分配UUID。在事件进入Flume网络后立即为事件分配UUID,这一点很重要。也就是说,在流的第一个Flume Source中。面对旨在实现高可用性和高性能的Flume网络中的复制和重新交付,这可以实现事件的后续重复数据删除。如果应用程序级别密钥可用,则它比自动生成的UUID更好,因为它允许使用所述众所周知的应用程序级别密钥对数据存储中的事件进行后续更新和删除。

  • Search and Replace Interceptor

该拦截器基于Java正则表达式提供简单的基于字符串的搜索和替换功能。还可以进行回溯/组捕获。该拦截器使用与Java Matcher.replaceAll()方法相同的规则。

  • Regex Filtering Interceptor

该拦截器通过将事件主体解释为文本并将文本与已配置的正则表达式进行匹配来选择性地过滤事件。提供的正则表达式可用于包含事件或排除事件。

  • Regex Extractor Interceptor

该拦截器使用指定的正则表达式提取正则表达式匹配组,并将匹配组附加为事件的标头。它还支持可插入序列化程序,用于在将匹配组添加为事件标头之前对其进行格式化。

启动flume

[root@Centos ~]#  cd /usr/apache-flume-1.9.0-bin/
[root@Centos apache-flume-1.9.0-bin]#  ./bin/flume-ng version
Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9

案例一装饰头:

创建example11.properties

[root@Centos conf]# vim example11.properties
a1.sources = s1
a1.sinks = sk1
a1.channels = c1
# 配置Source组件,从Socket中接收⽂本数据
a1.sources.s1.type = netcat
a1.sources.s1.bind = Centos
a1.sources.s1.port = 44444
# 添加拦截器
a1.sources.s1.interceptors = i1 i2 i3 i4
a1.sources.s1.interceptors.i1.type = timestamp
a1.sources.s1.interceptors.i2.type = host
a1.sources.s1.interceptors.i3.type = static
a1.sources.s1.interceptors.i3.key = from
a1.sources.s1.interceptors.i3.value = baizhi
a1.sources.s1.interceptors.i4.type=org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
a1.sources.s1.interceptors.i4.headerName = uuid
# 配置Sink组件,将接收数据打印在⽇志控制台
a1.sinks.sk1.type = logger
# 配置Channel通道,主要负责数据缓冲
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 进⾏组件间的绑定
a1.sources.s1.channels = c1
a1.sinks.sk1.channel = c1

启动flume

[root@Centos apache-flume-1.9.0-bin]# ./bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/example11.properties -Dflume.root.logger=INFO,console

启动netcat 输入数据

[root@Centos ~]# telnet Centos 44444
Trying 192.168.17.150...
Connected to Centos.
Escape character is '^]'.
todat this is a demo
OK
today is 2020 0601
OK
hello world
OK
happy every day
OK

flume端结果

表头里存在装饰信息
在这里插入图片描述

案例二查找替换拦截器

删除案例一中的from消息头,并且查找替换以jiansiyu为开头的输入数据,修改为handsome and violent

创建文件example12.properties

[root@Centos conf]# vim example12.properties
a1.sources = s1
a1.sinks = sk1
a1.channels = c1
# 配置Source组件,从Socket中接收⽂本数据
a1.sources.s1.type = netcat
a1.sources.s1.bind = Centos
a1.sources.s1.port = 44444
# 添加拦截器
a1.sources.s1.interceptors = i1 i2 i3 i4 i5 i6
a1.sources.s1.interceptors.i1.type = timestamp
a1.sources.s1.interceptors.i2.type = host
a1.sources.s1.interceptors.i3.type = static
a1.sources.s1.interceptors.i3.key = from
a1.sources.s1.interceptors.i3.value = baizhi
a1.sources.s1.interceptors.i4.type =org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
a1.sources.s1.interceptors.i4.headerName = uuid
a1.sources.s1.interceptors.i5.type = remove_header
a1.sources.s1.interceptors.i5.withName = from
a1.sources.s1.interceptors.i6.type = search_replace
a1.sources.s1.interceptors.i6.searchPattern = ^jiangsiyu
a1.sources.s1.interceptors.i6.replaceString = handsome and violent
# 配置Sink组件,将接收数据打印在⽇志控制台
a1.sinks.sk1.type = logger
# 配置Channel通道,主要负责数据缓冲
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 进⾏组件间的绑定
a1.sources.s1.channels = c1
a1.sinks.sk1.channel = c1

启动flume

[root@Centos apache-flume-1.9.0-bin]# ./bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/example12.properties -Dflume.root.logger=INFO,console

启动netcat 输入数据

[root@Centos ~]# telnet Centos 44444
Trying 192.168.17.150...
Connected to Centos.
Escape character is '^]'.
this is a demo
OK
my name is jiangsiyu
OK
jiangsiyu is here
OK

flume端结果

from消息头移除 如果jiangsiyu是数据消息的第一个 就会被替换为handsome and violent在这里插入图片描述
注意:^jiangsiyu前面带 ^表示头部分 不带则全部 如下

a1.sources.s1.interceptors.i6.searchPattern = jiangsiyu

在这里插入图片描述
在这里插入图片描述

案例三:过滤抽取拦截器

创建文本文件example14.properties

[root@Centos conf]# vim example14.properties
# 声明基本组件 Source Channel Sink example14.properties
a1.sources = s1
a1.sinks = sk1
a1.channels = c1
# 配置Source组件,从Socket中接收⽂文本数据
a1.sources.s1.type = netcat
a1.sources.s1.bind = Centos
a1.sources.s1.port = 44444
# 添加拦截器器
a1.sources.s1.interceptors = i1 i2
a1.sources.s1.interceptors.i1.type = regex_extractor
a1.sources.s1.interceptors.i1.regex = ^(INFO|ERROR)
a1.sources.s1.interceptors.i1.serializers = s1
a1.sources.s1.interceptors.i1.serializers.s1.name = loglevel
a1.sources.s1.interceptors.i2.type = regex_filter
a1.sources.s1.interceptors.i2.regex = .*jaingsiyu.*
a1.sources.s1.interceptors.i2.excludeEvents = false
# 配置Sink组件,将接收数据打印在⽇日志控制台
a1.sinks.sk1.type = logger
# 配置Channel通道,主要负责数据缓冲
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 进⾏行行组件间的绑定
a1.sources.s1.channels = c1
a1.sinks.sk1.channel = c1

启动flume

[root@Centos apache-flume-1.9.0-bin]# ./bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/example14.properties -Dflume.root.logger=INFO,console

输入数据Telnet

[root@Centos ~]# telnet Centos 44444
Trying 192.168.17.150...
Connected to Centos.
Escape character is '^]'.
INFO nihao money
OK
INFO nihao jiangsiyu
OK
hello jiangsiyu
OK
hello world
OK
ERROR hello jiangsiyu
OK
ERROR hello world
OK
hello ERROR jiangsiyu
OK
hello jiangsiyu INFO
OK
hello INFO
OK

结果如下

必须含有jiangsiyu 否则接收不到 INFO/ERROR必须是头 否则在headers中不能匹配
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值