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

关于Flume-Kafka-Flume的模式进行数据采集操作


       测试是否连接成功:

        在主节点flume目录下输入命令:

bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.logger=info,console
# 这个file_to_kafka.conf文件就是我们的配置文件

 

        然后在另一台节点输入命令进行消费数据:

 kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic topic_log

        然后再开一个主节点终端,在这个主节点上面在对应生成数据的文件追加数据

         

        这样就可以看见第一个主节点的终端和消费节点上面有数据变化了! 

 


         下面这个是配置拦截器,把json格式的内容进行消费,其他的进行拦截

        Flume采集数据到kafka的配置conf文件内容:

#定义组件

#1、定义source、channel、agent名称
a1.sources = r1
a1.channels = c1
#配置source

#2、描述source
a1.sources.r1.type = TAILDIR

#指定监控的组名
a1.sources.r1.filegroups = f1

#指定f1组监控的路径
a1.sources.r1.filegroups.f1 = /opt/software/applog/log/app.*

#指定断点续传的文件
a1.sources.r1.positionFile = /opt/software/flume/taildir_position.json
# 配置拦截器
a1.sources.r1.interceptors =  i1
a1.sources.r1.interceptors.i1.type = com.atguigu.gmall.flume.interceptor.ETLInterceptor$Builder
#配置channel

#3、描述channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel

#指定kafka集群
a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092

#指定数据写到kafka哪个topic
a1.channels.c1.kafka.topic = topic_log

#是否以Event对象的形式写入kafka
a1.channels.c1.parseAsFlumeEvent = false
#组装 

#4、关联source->channel
a1.sources.r1.channels = c1

         如果一开始测试我们flume和kafka是否能成功采集数据的时候,我们应该先把拦截器的两行配置先删除,后面再根据我们需要的内容进行拦截对应的内容。就比如:我们期望我们采集到数据是json格式的,如果不是json格式的话,我们就放弃这个数据。

     具体操作:

(1)创建Maven工程flume-interceptor

(2)创建包:com.gugu.gmall.flume.interceptor

(3)在pom.xml文件中添加如下配置

        

<dependencies>
    <dependency>
        <groupId>org.apache.flume</groupId>
        <artifactId>flume-ng-core</artifactId>
        <version>1.9.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

<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>

 在com.gugu.gmall.flume.utils包下创建JSONUtil类

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

在com.gugu.gmall.flume.interceptor包下创建ETLInterceptor类 

package com.gugu.gmall.flume.interceptor;import com.atguigu.gmall.flume.utils.JSONUtil;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;public class ETLInterceptor implements Interceptor {@Overridepublic void initialize() {}@Overridepublic Event intercept(Event event) {//1、获取body当中的数据并转成字符串byte[] body = event.getBody();String log = new String(body, StandardCharsets.UTF_8);//2、判断字符串是否是一个合法的json,是:返回当前event;不是:返回nullif (JSONUtil.isJSONValidate(log)) {return event;} else {return null;}}@Overridepublic List<Event> intercept(List<Event> list) {Iterator<Event> iterator = list.iterator();while (iterator.hasNext()){Event next = iterator.next();if(intercept(next)==null){iterator.remove();}}return list;}public static class Builder implements Interceptor.Builder{@Overridepublic Interceptor build() {return new ETLInterceptor();}@Overridepublic void configure(Context context) {}}@Overridepublic void close() {}
}

        然后进行打包,复制到我们flume下的lib目录下就可以了!

        然后再和上面测试一样进行测试连接,是否成功把非json格式的数据拦截成功!


感谢各位的观看,创作不易,能不能给哥们来一个点赞呢!!!

好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!

私信,评论我呗!!!!!!

关注我下一篇不迷路哦!

相关文章:

  • git安装后报git: ‘remote-https‘ is not a git command. See ‘git --help‘.
  • Portraiture2024PS/LR专用智能磨皮插件,AI算法美颜,提高P图效率
  • 2.3 调用智谱 API
  • 【数据分享】2023年我国省市县三级的专精特新“小巨人”企业数量(Excel/Shp格式)
  • C#中.NET 6.0 控制台应用通过EF访问新建数据库
  • 竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python
  • 云原生微服务架构图
  • 计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法
  • openGauss通过VIP实现的故障转移
  • 汽车 CAN\CANFD数据记录仪
  • 情报收集工具的编写
  • 无需添加udid,ios企业证书的自助生成方法
  • Linux:firewalled服务常规操作汇总
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 【C++】plog
  • Django 博客开发教程 16 - 统计文章阅读量
  • docker容器内的网络抓包
  • ECMAScript入门(七)--Module语法
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java,console输出实时的转向GUI textbox
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS+CSS实现数字滚动
  • LintCode 31. partitionArray 数组划分
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 闭包--闭包作用之保存(一)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 缓存与缓冲
  • 手写一个CommonJS打包工具(一)
  • 我的zsh配置, 2019最新方案
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (新)网络工程师考点串讲与真题详解
  • (转)我也是一只IT小小鸟
  • .bashrc在哪里,alias妙用
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET CORE Aws S3 使用
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET 解决重复提交问题
  • .Net 知识杂记
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net连接MySQL的方法
  • .NET上SQLite的连接
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @hook扩展分析
  • @Pointcut 使用
  • @TableLogic注解说明,以及对增删改查的影响
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20170705]diff比较执行结果的内容.txt
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [bzoj2957]楼房重建