我们Source中读到的数据往往会被分为几个不同的日志种类 然后通过Sink发送到不同的节点去进行处理 。 那么对于同一个Source中读到的不同的数据 我们往往根据读到的数据中的一些特定的字段值或者其他的特征值 来将他们区分为不同的日志种类 在Flume中我们需要自定义拦截器,然后通过ChannelSelector(Channel选择器)来将同一个Source中的不同类型的日志数据 进行一次分类 将他们写入不同的Channel中。
拦截器的思想 : Source中读取到的Event事件 我们通过获得这个Event的body部分(也就是该Event的实际数据),通过判定这个body中是否包含某一个关键字(根据不同的业务决定不同的选择方法 这个示例就是通过是否包含“Hello”关键字) 来将他们分为两个不同的种类。 那么Flume的ChannelSelector 是怎么判定这个Event写入哪个Channel中呢 是通过这个Event的Header中包含的信息 (需要我们自己在运行文件中定义) 所以我们对这个Event加入Header信息 对不同类型的日志数据指定不同的关键字 即可
Java代码:
首先需要带入依赖
<dependencies>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
<