数据采集的理想做法是:由数据的生产者再把数据发送到平台之前对数据进行清理,这应当由产生数据的团队来处理,因为他们最了解他们自己的数据。拦截器是数据流中的一个处理点,他可以在源和通道之间插入一个或多个拦截器,来动态检查和修改Flume事件,有点类似Servlet的ServletFilter
数据—–》源——-》事件——》拦截器1———–》拦截器2——–》通道(Flume代理)
下面这个例子添加了4个拦截器(i1,i2,i3,i4,i2接收i1的处理结果,i3接收i2的处理结果,i4接收i3的处理结果,并将结果送给通道选择器),其中i1是一个时间戳拦截器,如果远中没有timestamp头,那么,拦截器会添加之,i2是一个Host拦截器,他会向事件中添加一个Flume代理所在的IP的头,i3是一个static拦截器,可用于添加一对“键值”i4是一个正则表达式过滤拦截器,这会根据“体”(即:传输数据)的内容来过滤事件。在regex上设置模式字符串,如果你设置了excludeEvents的值为false(默认值)那么,只停留与模式匹配的事件;如果为true,那么,过滤掉匹配的事件
agent,sources,s1,interceptors=i1 i2 i3 i4
agent,sources,s1,interceptors,i1,type=timestamp
agent,sources,s1,interceptors,i1,perserveExisting=true
agent,sources,s1,interceptors,i2,type=host
agent,sources,s1,interceptors,i3,type=static
agent,sources,s1,interceptors,i3,key=键
agent,sources,s1,interceptors,i3,key=值
agent,sources,s1,interceptors,i4,type=regex-filter
agent,sources,s1,interceptors,i4,regex=测试数据
agent,sources,s1,interceptors,i4,excludeEvents=true
上面的perserveExisting指定是保留头上的相关信息,还是覆盖之,还有一个拦截器是正则表达式抽取过滤器,他可以抽取事件“体”的内容,并放到Flume头上,以便通道选择器根据这些值路由不同的通道
Flume还允许我们自己定义拦截器,这就需要实现org,apache,flume,interceptor,interceptor和org,apache,flume,interceptor
interceptor,Builder接口,假定你的类名为com,yunsheng,Test
那么,你可以设置为:
agent,sources,s1,interceptors=i5
agent,sources,s1,interceptors,i5,type=com.yunsheng.Test$Builder
7.1.4Flume拦截器(Interceptor)
最新推荐文章于 2019-08-10 12:10:42 发布