当前位置: 首页 > news >正文

Flume拦截器的实现

Flume conf文件编写

vim file_to_kafka.conf
#定义组件
a1.sources = r1
a1.channels = c1#配置source
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /Users/zhangjin/model/project/realtime-flink/applog/log/app.*
# 设置断点续传的位置
a1.sources.r1.positionFile = /Users/zhangjin/model/flume/taildir_position.json
a1.sources.r1.interceptors =  i1
a1.sources.r1.interceptors.i1.type = com.flume.interceptor.ETLInterceptor$Builder#配置channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = localhost:9092
a1.channels.c1.kafka.topic = topic_log
# 设置不以Flume event 写入数据,以Body数据进行写入
a1.channels.c1.parseAsFlumeEvent = false#组装
a1.sources.r1.channels = c1

Flume ETLInterceptor拦截器的编写

maven依赖

	<dependencies><!--Flume依赖 --><dependency><groupId>org.apache.flume</groupId><artifactId>flume-ng-core</artifactId><version>1.9.0</version><scope>provided</scope></dependency><!--Json格式校验--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies>

maven package打包依赖

    <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

判断是否是JSON字符串

public class JSONUtil {/** 通过异常判断是否是json字符串* 是:返回true  不是:返回false* */public static boolean isJSONValidate(String log){try {JSONObject.parseObject(log);return true;}catch (JSONException e){return false;}}
}

拦截器实现

  1. 继承Interceptor接口
  2. 实现单event处理
  3. 实现批量event处理
  4. 重写builder方法
public class ETLInterceptor implements Interceptor {@Overridepublic void initialize() {}/*** 单个event处理* 检验是否是Json格式* @param event* @return*/@Overridepublic Event intercept(Event event) {//1 获取json数据byte[] body = event.getBody();String log = new String(body, StandardCharsets.UTF_8);//2 校验json数据if (JSONUtil.isJSONValidate(log)) {return event;} else {return null;}}/*** 多个event处理* @param list* @return*/@Overridepublic List<Event> intercept(List<Event> list) {Iterator<Event> iterator = list.iterator();while (iterator.hasNext()) {Event event = iterator.next();if (intercept(event) == null) {iterator.remove();}}return list;}@Overridepublic void close() {}/*** 拦截器重写Builder方法*/public static class Builder implements Interceptor.Builder {@Overridepublic Interceptor build() {return new ETLInterceptor();}@Overridepublic void configure(Context context) {}}
}

测试

maven package打包,将生成的jar包放在了Flume的lib目录下
启动kafka

# 启动命令
./bin/kafka-server-start.sh -daemon ./config/server.properties &# 开启消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic_log

启动Flume

bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.logger=info,console

http://www.mrgr.cn/news/82523.html

相关文章:

  • Gitea代码仓服务搭建
  • 李宏毅机器学习笔记-Transformer
  • C#设计模式(行为型模式):观察者模式
  • pytorch镜像源
  • 树莓派OpenWrt下怎么驱动带USB的摄像头
  • C# 设计模式(创建型模式):建造者模式
  • 我用AI学Android Jetpack Compose之开篇
  • unity学习6:unity的3D项目的基本操作
  • 文件上传漏洞
  • node.js之---内置模块
  • node.js内置模块之---EventEmitter 类
  • 树莓派5-yolo5部署
  • MySQL8安装与卸载
  • 局域网中单台交换机VLAN应用
  • Visual Studio 中增加的AI功能
  • java 自定义字典序列化器:使用注解自动转换字典信息(自定义注解转换字典)
  • Fabric环境部署
  • Chromebook 的 4 个最佳变声器
  • IP5385应用于移动电源快充方案的30W到100W大功率电源管理芯片
  • 简单园区网的部署
  • node.js之---子线程(child_process)模块
  • 【大模型】7 天 AI 大模型学习
  • node.js之---CommonJS 模块
  • LLVM防忘录
  • 上升沿下降沿递增
  • VSCode下配置Blazor环境 断点调试Blazor项目