项目实施-09 (对接Flume)

SpringBoot对接Flume

在大数据流处理当中,我们需要从项目中,采集到用户的行为日志,通过kafka,输送到计算引擎中,进行计算分析。这其中的日志文件的采集,我们需要通过Flume完成对接。

①依赖坐标

	  <!--引入Flume-->
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-sdk</artifactId>
            <version>1.9.0</version>
        </dependency>

②引入Flume对接的项目依赖

flume官方网站上提供开源项目,以便使用者在用 日志采集时完成快速对接。
获取地址:https://pan.baidu.com/s/1chY1Ia7aBPtY7AVXZ_rrdQ
获取码:cgi8

这个开源项目包,以com为最外层包,将此包直接引入自己的项目java的直接子目录下(与自己的项目第一级包同级),即可。

③配置日志文件

配置项目中的日志文件 logback.xml


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
        <encoder>
            <pattern>%p %c#%M %d{yyyy-MM-dd HH:mm:ss} %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="flume" class="com.gilt.logback.flume.FlumeLogstashV1Appender">
        <flumeAgents>
            pro1:44444, <!--这里配置集群,此处搭建的是个伪集群-->
            pro2:44444,
            pro1:44444
        </flumeAgents>
        <flumeProperties>
            connect-timeout=4000;
            request-timeout=8000
        </flumeProperties>
        <!--这里为了测试调低了,生成环境下要调高-->
        <batchSize>1</batchSize> 
        <!--每1ms发送一次这里为了测试调低了,生成环境下要调高-->
        <reportingWindow>1</reportingWindow>
        <additionalAvroHeaders>
            myHeader=myValue
        </additionalAvroHeaders>
        <application>smapleapp</application>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%p %c#%M %d{yyyy-MM-dd HH:mm:ss} %m%n</pattern>
        </layout>
    </appender>
    <!-- 控制台输出⽇志级别 -->
    <root level="ERROR">
        <appender-ref ref="STDOUT" />
    </root>
    <logger name="com.baizhi.service" level="DEBUG" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="flume" />
    </logger>
    <logger name="com.baizhi.interceptor" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="flume" />
    </logger>

</configuration>

④项目中引用

项目中,要对接 flume 就变的很容易了,只要是 log4j日志对象的输出,都将直接通过网络,输送到接收端。

  • 示例:
package com.baizhi.interceptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//将此组件交给工厂
@Component
public class UserInputFeatureInterceptor implements HandlerInterceptor {
    private static final Logger LOGGER = LoggerFactory.getLogger(UserInputFeatureInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
        //获取信息
        String name = request.getParameter("name");
        String password = request.getParameter("password");
      
        LOGGER.info("请求参数为\t"+name+"\t"+password);
        /*2020-03-29 15:56:35.783  INFO 12620 --- [nio-9999-exec-8] c.b.i.UserInputFeatureInterceptor        : 请求参数为	测试数据2	000000	 */

        return true;
    }
}

⑤flume端设置

/apache-flume-1.9.0-bin的跟目录中,的conf文件夹中,创建(自定义)example02.perproties文件,配置如下:

# 声明基本条件 Source Channel Sink
a1.sources = s1
a1.sinks = sk1
a1.channels = c1

#配置Source组件,从Socket中接收文本数据
a1.sources.s1.type = avro
a1.sources.s1.bind = pro2
a1.sources.s1.port = 44444

#配置Sink组件 将接收数据打印在日志控制台
a1.sinks.sk1.type = logger

#配置Channel通道,主要负责数据缓冲
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

#进行组件间的绑定
a1.sources.s1.channels = c1
a1.sinks.sk1.channel = c1

启动flume

准备接收数据

[root@pro2 apache-flume-1.9.0-bin] ./bin/flume-ng agent --conf conf/ --name a1 -conf-file conf/example02.perproties -Dflume.root.logger=INFO,console
发布了32 篇原创文章 · 获赞 1 · 访问量 1154

猜你喜欢

转载自blog.csdn.net/ASYMUXUE/article/details/105182699