Flink实时数仓项目—日志数据采集
前言
实时数仓项目的数据来源有两个,一个是用户行为日志数据,一个是业务数据库中的业务数据,我们需要对这两部分数据进行采集,先进行用户行为日志数据的采集。
一、日志数据采集
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 3 月 6 14:54 application.yml
-rw-rw-r-- 1 atguigu atguigu 15642393 12 月 29 14:54 gmall2020-mock-log-2020-12-18.jar
-rw-rw-r-- 1 atguigu atguigu 31094068 2 月 5 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可以消费到数据。

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

被折叠的 条评论
为什么被折叠?



