Flink实时数仓项目—日志数据采集

本文介绍了在实时数仓项目中如何进行日志数据采集。首先,通过模拟日志生成器产生数据,然后创建SpringBoot程序进行数据接收和落盘。接着配置Nginx实现负载均衡,确保多台服务器的数据采集。最后,测试日志采集流程,验证数据能否成功进入Kafka。


前言

实时数仓项目的数据来源有两个,一个是用户行为日志数据,一个是业务数据库中的业务数据,我们需要对这两部分数据进行采集,先进行用户行为日志数据的采集。


一、日志数据采集

1.模拟日志生成器的使用

因为日志数据是用户通过点击等操作产生的,所以没办法拿到真实的数据,这里使用模拟生成日志数据的方式来生成日志数据。
主要流程:运行生成日志数据的springboot程序,然后通过接口进行接受数据,并将数据落盘,形成了日志数据。

2.使用流程

1)将对应生成日志数据的程序文件上传到/opt/module/rt_applog目录下:

[atguigu@hadoop102 ~]$ cd /opt/module/gmall-flink/rt_applog/ 
[atguigu@hadoop102 rt_applog]$ ll
总用量 45652
-rw-rw-r-- 1 atguigu atguigu	952 36 14:54 application.yml
-rw-rw-r-- 1 atguigu atguigu 15642393 1229 14:54 gmall2020-mock-log-2020-12-18.jar
-rw-rw-r-- 1 atguigu atguigu 31094068 25 15:29 gmall-logger-0.0.1-SNAPSHOT.jar

2)根据自己的实际需求修改application.yml文件:
配置说明:
mock.date:生成的数据的日期
mock.url:生成的数据发送到的地址
在这里插入图片描述3)运行jar包: java -jar gmall2020-mock-log-2020-12-18.jar
注意:zookeeper从3.5开始,AdminServer的端口改成了8080,什么意思,你懂的!

3.创建日志采集springboot程序

1)在IDEA中创建日志采集模块,依赖选取如下:
在这里插入图片描述
创建最终结果如下:
在这里插入图片描述
2)Kafka配置
因为要将日志数据发送到Kafka,所以要对Kafka进行配置,在application.propeties中配置如下:

# 应用名称
spring.application.name=gmall2022-logger

# 应用服务 WEB 访问端口
server.port=8081

#============== kafka ===================
# 指定 kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=hadoop102:9092

# 指定消息 key 和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

注意:要修改该web应用的访问端口,否则会与zookeeper的端口冲突
3)日志落盘配置
因为日志数据还要落盘,所以要对落盘进行配置,在Resources中添加logback.xml文件,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="/opt/module/gmall-flink/rt_applog/logs" />
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <!-- 将某一个包下日志单独打印日志 -->
    <logger name="com.ssl.gmall2022.controller.LoggerController" level="INFO" additivity="false">
        <appender-ref ref="rollingFile" />
        <appender-ref ref="console" />
    </logger>

    <root level="error" additivity="false">
        <appender-ref ref="console" />
    </root>
</configuration>

上面指定落盘位置为服务器的/opt/module/gmall-flink/rt_applog/logs这个目录下,同时在控制台进行打印。
4)创建controller包,编写LoggerController类处理日志数据,一边进行落盘,一边将数据发送到Kafka

@RestController //相当于@Controller+@ResponseBody
@Slf4j
public class LoggerController {

    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;

    @RequestMapping("applog")
    public String getLogger(@RequestParam("param")String jsonStr){
        //落盘
        log.info(jsonStr);

        //写入Kafka的ods_base_log主题
        kafkaTemplate.send("ods_base_log",jsonStr);

        return "success";
    }
}

4.进行Nginx配置

因为有多台服务器,所以为了提高性能,可以配置Nginx进行负载均衡。
流程:模拟生成数据的脚本会将数据发送给nginx中指定的地址,然后nginx再进行负载均衡,将数据转发给配置的多台服务器。
再nginx的conf目录下,修改nginx.conf,内容如下:

http {
	# 启动省略
	upstream logcluster{
		server hadoop102:8081 weight=1;
		server hadoop103:8081 weight=1;
		server hadoop104:8081 weight=1;
	}
	server {
		listen	80;
		server_name	localhost;

		#charset koi8-r;

		#access_log logs/host.access.log main;

	location / {
		#root	html;
		#index	index.html index.htm;
		#  代理的服务器集群	命名随意, 但是不能出现下划线
		proxy_pass http://logcluster;
		proxy_connect_timeout 10;
	}

	# 其他省略
}

创建了一个代理,名称为logcluster,当nginx监听到localhost的80端口有请求时,nginx会依次将请求发送给hadoop102:8081、hadoop103:8081、hadoop104:8081

5.日志采集流程测试

1)先修改模拟日志生成的配置,配置将请求发送给hadoop102:

# 外部配置打开
#logging.config=./logback.xml

#业务日期
mock.date=2020-07-13

#模拟数据发送模式mock.type=http
#http 模式下,发送的地址
mock.url=http://hadoop102/applog
=

2)在hadoop102上启动配置好的Nginx:/opt/module/nginx/sbin/nginx
3)在hadoop102上运行kafka消费者,观察是否能消费到ods_base_log这个主题的数据
4)将处理日志采集的springboot程序的jar包分别进行分发,并分别在三台服务器上运行:java -jar gmall2022-logger-0.0.1-SNAPSHOT.jar
5)在hadoop102上运行生成日志数据的jar包:java -jar gmall2020-mock-log-2020-12-18.jar
最终,可以观察到Kafka可以消费到数据。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值