Apache Flume Interceptors

1. Apache Flume Interceptor

在本章中,将讨论Apache Flume Interceptor。 Interceptor可以修改或删除传递中的事件消息。 我们将学习Apache Flume Interceptor的全部概念。 了解几种类型的Interceptor, Host Flume Interceptors, Morphline Interceptor, Flume Interceptors Regex Extractor, Regex Filtering Interceptor, Remove Header Interceptor, Search and Replace Interceptor, Static Interceptor, Timestamp Interceptors 和 UUID Interceptor。

2.什么是Flume Interceptor?

Apache Flume Interceptor可以修改或删除传递中的事件消息。 通过实现org.apache.flume.interceptor.Interceptor接口的类,开发人员可以修改甚至删除事件消息。

另外,Apache Flume支持 多个Interceptors 级联,通过在配置中指定Interceptors类名称的列表来实现。 Interceptors被调用的顺序是按配置文件中指定Interceptor的顺序。 下面一个如何通过配置来创建Flume Interceptor的例子:

a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.interceptors = i1 i2
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.HostInterceptor$Builder
a1.sources.r1.interceptors.i1.preserveExisting = false
a1.sources.r1.interceptors.i1.hostHeader = hostname
a1.sources.r1.interceptors.i2.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
a1.sinks.k1.filePrefix = FlumeData.%{CollectorHost}.%Y-%m-%d
a1.sinks.k1.channel = c1

3. Flume中的Interceptor类型

Flume Interceptor有9种类型,下面逐一讨论这些Interceptors:

——add picture here —–

Timestamp: Apache Flume Interceptors

Timestamp Flume Interceptor,在处理事件消息时,可以将时间戳以毫秒为单位,添加到Event Header中。 下表显示了Timestamp Flume Interceptor的属性名称和描述:

1542703409325662.png

示例如下:

a1.sources = r1
a1.channels = c1
a1.sources.r1.channels =  c1
a1.sources.r1.type = seq
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = timestamp

Host: Apache Flume Interceptors

该Interceptor会在事件消息中添加运行Flume Agent主机的主机名或IP地址。 下表显示了Host Flume Interceptors的属性名称和属性说明。

1542703489705023.png

示例如下:

a1.sources = r1
a1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host

Static: Apache Flume Interceptors

Static Flume Interceptor 可以在所有的消息事件中添加一个静态的Header。 

下表显示了Static Flume Interceptor属性的名称和说明:

1542703567268022.png

示例如下:

a1.sources = r1
a1.channels = c1
a1.sources.r1.channels = c1
a1.sources.r1.type = seq
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key =datacenter
a1.sources.r1.interceptors.i1.value = NEW_YORK

注意:该Interceptor不允许在当前实现中一次指定多个静态的Header,可以级联多个Static Flume Interceptor,每个Static Flume Interceptor定义一个静态的Header。

Remove Header: Apache Flume Interceptors

该Interceptor可以删除一个或多个Event Header。 通过该Flume Interceptor,可以删除静态定义的Header,  要删除的Header 可以是 基于正则表达式的或存在于列表中的Header。 如果没有匹配的事件Header, 那么消息事件保持未修改的内容。 下表显示了Remove Header Flume Interceptors的属性名称和说明。

1542703681834166.png

UUID: Apache Flume Interceptors

UUID Flume Interceptor可以为所有被拦截的消息事件设置一个通用的唯一标识符。如,UUID的值是b5755073-77a9-43c1-8fad-b7a586fc1b97,它表示一个128位的值。

下表显示了UUID Flume Interceptor的属性名称和属性说明:

1542703754982314.png

Morphline: Apache Flume Interceptors

Morphline Interceptor通过配置文件可以过滤事件消息,它定义了一系列转换命令,将事件消息从一个命令传送到另一个命令。通过基于正则表达式的模式匹配,morphline可以忽略某些事件,或者改变或添加某些事件Header。 下表显示了Morphline Flume Interceptors的属性名称和描述:

1542703837694733.png

示例如下:

a1.sources.avroSrc.interceptors = morphlineinterceptor
a1.sources.avroSrc.interceptors.morphlineinterceptor.type = org.apache.flume.sink.solr.morphline.MorphlineInterceptor $ Builder
a1.sources.avroSrc.interceptors.morphlineinterceptor.morphlineFile = /etc/flume-ng/conf/morphline.conf
a1.sources.avroSrc.interceptors.morphlineinterceptor.morphlineId = morphline1

Search and Replace: Apache Flume Interceptors

该Interceptor, 在Java正则表达式的基础上,提供了简单的基于字符串的搜索和替换功能。 而且,该 Interceptor的使用与Java Matcher.replaceAll()方法具有相同的规则。

 下表显示了该Interceptor的属性名称和描述:

1542704078318265.png

示例如下:

a1.sources.avroSrc.interceptors = search-replace
a1.sources.avroSrc.interceptors.search-replace.type = search_replace
# Remove leading alphanumeric characters in an event body.
a1.sources.avroSrc.interceptors.search-replace.searchPattern = ^[A-Za-z0-9_]+
a1.sources.avroSrc.interceptors.search-replace.replaceString =

另外一个例子:

a1.sources.avroSrc.interceptors = search-replace
a1.sources.avroSrc.interceptors.search-replace.type = search_replace
# Use grouping operators to reorder and munge words on a line.
a1.sources.avroSrc.interceptors.search-replace.searchPattern = The quick brown ([a-z]+) jumped over the lazy ([a-z]+)
a1.sources.avroSrc.interceptors.search-replace.replaceString = The hungry $2 ate the careless $1

Regex Filtering: Apache Flume Interceptors

该Interceptor可以使用正则表达式过滤消息事件。 可以将事件主体(Body)解释为文本,并将文本与配置的正则表达式进行匹配,从而, 对事件消息进行添加和删除。

下表显示属性名称以及Regex Filtering Flume Interceptors的描述:

1542704168934307.png

Flume Regex Extractor: Apache Flume Interceptors

通过该Intercepter, 可以根据正则表达式进行匹配并且提取事件消息,通过使用指定的正则表达式,将匹配的消息文本添加为事件的Header。 

表格显示Flume Regex Extractor 的属性和描述:

1542704266577926.png

Apache Flume Interceptors

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 23 = 二十 六