1.Flink实时项目前期准备
1.日志生成项目

日志生成机器:hadoop101
jar包:mock-log-0.0.1-SNAPSHOT.jar
gmall_mock
|----mock_common
|----mock_db
|----mock_log
项目地址:https://github.com/zhangbaohpu/gmall-mock
将模块mock_log打包成jar,并在同级添加application.yml
cd /opt/software/applog/
vim application.yml
点击查看代码
# 外部配置打开
# logging.config=./logback.xml
#业务日期
mock.date: "2020-12-18"
#模拟数据发送模式
mock.type: "http"
#http模式下,发送的地址
mock.url: "http://hadoop101:8081/applog"
#mock:
# kafka-server: "hdp1:9092,hdp2:9092,hdp3:9092"
# kafka-topic: "ODS_BASE_LOG"
#启动次数
mock.startup.count: 1000
#设备最大值
mock.max.mid: 20
#会员最大值
mock.max.uid: 50
#商品最大值
mock.max.sku-id: 10
#页面平均访问时间
mock.page.during-time-ms: 20000
#错误概率 百分比
mock.error.rate: 3
#每条日志发送延迟 ms
mock.log.sleep: 100
#商品详情来源 用户查询,商品推广,智能推荐, 促销活动
mock.detail.source-type-rate: "40:25:15:20"
#领取购物券概率
mock.if_get_coupon_rate: 75
#购物券最大id
mock.max.coupon-id: 3
#搜索关键词
mock.search.keyword: "图书,小米,iphone11,电视,口红,ps5,苹果手机,小米盒子"
然后启动项目
java -jar mock-log-0.0.1-SNAPSHOT.jar
默认端口8080,调用以下方法,会向接口http://hadoop101:8081/applog 发送日志数据
点击查看代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class GmallMockLogApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(GmallMockLogApplication.class, args);
MockTask mockTask = context.getBean(MockTask.class);
mockTask.mainTask();
}
}
2.日志采集项目
日志处理机器:hadoop101,hadoop102,hadoop103
项目地址:https://github.com/zhangbaohpu/gmall-flink-parent/tree/master/gmall-logger
jar包:gmall-logger-0.0.1-SNAPSHOT.jar
项目中配置文件:application.yml
点击查看代码
server:
port: 8081
#kafka
spring:
kafka:
bootstrap-servers: 192.168.88.71:9092,192.168.88.72:9092,192.168.88.73:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
LoggerController.java
接收日志,并把日志发送给kafka
点击查看代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhangbao
* @date 2021/5/16 11:33
**/
@RestController
@Slf4j
public class LoggerController {
@Autowired
KafkaTemplate kafkaTemplate;
@RequestMapping("/applog")
public String logger(String param){
log.info(param);
kafkaTemplate.send("ods_base_log",param);
return param;
}
}
3.nginx配置
安装机器:hadoop101
修改nginx.conf配置,hadoop101作为负载均衡机器,hadoop101,hadoop102,hadoop103作为日志处理机器,nginx默认端口为80,主要配置如下:
点击查看代码
#在 server 内部配置
location /
{
proxy_pass http://www.logserver.com;
}
#切记:在 server 外部配置反向代理
upstream www.logserver.com{
server hadoop101:8081 weight=1;
server hadoop102:8081 weight=2;
server hadoop103:8081 weight=3;
}
4.将日志采集项目jar分发
将日志采集jar包分发到其他机器,供nginx负载均衡转发调用
xsync gmall-logger-0.0.1-SNAPSHOT.jar
5.修改模拟日志生成的配置
我们将生成的日子发送给nginx,然后在分发到其他采集日志的机器,生成日志的机器在hadoop101
cd /opt/software/applog/
vim application.yml
点击查看代码
#模拟数据发送模式
mock.type: "http"
#http模式下,发送的地址
mock.url: "http://hadoop101/applog"
6.集群群起脚本
将采集日志服务和nginx服务放在脚本中
在/home/zhangbao/bin创建脚本logger.sh
cd /home/zhangbao/bin,并授予执行权限
点击查看代码
#!/bin/bash
JAVA_HOME=/opt/module/jdk1.8.0_144/bin/java
APPNAME=gmall-logger-0.0.1-SNAPSHOT.jar
case $1 in
"start"){
for i in hadoop101 hadoop102 hadoop103
do
echo "================$i================="
ssh $i "$JAVA_HOME -Xms32m -Xmx64m -jar /opt/software/applog/$APPNAME >/dev/null 2>&1 &"
done
echo "===============NGINX================="
/opt/module/nginx/sbin/nginx
};;
"stop"){
echo "===============NGINX================="
/opt/module/nginx/sbin/nginx -s stop
for i in hadoop101 hadoop102 hadoop103
do
echo "================$i==============="
ssh $i "ps -ef|grep $APPNAME |grep -v grep|awk '{print \$2}'|xargs kill" >dev/null 2>&1
done
};;
esac
7.测试
| hadoop101 | hadoop102 | hadoop103 | |
|---|---|---|---|
| gmall_mock(生产日志) | √ | ||
| gmall-logger(采集日志) | √ | √ | √ |
| nginx | √ | ||
| kafka | √ | √ | √ |
注意以下操作需要在linux的zhangbao用户下操作,因为这些组件是在此用户下安装,不然起不来,脚本都在hadoop101这台机器:
启动zookeeper
su zhangbao
zk.sh start
启动kafka
kf.sh start
然后本项目的jar包可以在root用户下操作
手动执行
- 启动kafka消费者
kafka-console-consumer.sh --zookeeper hadoop101:2181,hadoop102:2181,hadoop103:2181 --topic ods_base_log
- 启动nginx
/opt/module/nginx/sbin/nginx,地址:http://hadoop101/
启动日志采集服务
日志采集服务做了负责均衡,分别在hadoop101,hadoop102,hadoop103
java -jar /opt/software/applog/gmall-logger-0.0.1-SNAPSHOT.jar生产日志服务
生产日志服务在hadoop101,一台即可
java -jar /opt/software/applog/mock-log-0.0.1-SNAPSHOT.jar
使用脚本启停采集日志服务和nginx服务
./bin/logger.sh start
./bin/logger.sh stop
1.Flink实时项目前期准备的更多相关文章
- 5.Flink实时项目之业务数据准备
1. 流程介绍 在上一篇文章中,我们已经把客户端的页面日志,启动日志,曝光日志分别发送到kafka对应的主题中.在本文中,我们将把业务数据也发送到对应的kafka主题中. 通过maxwell采集业务数 ...
- 10.Flink实时项目之订单维度表关联
1. 维度查询 在上一篇中,我们已经把订单和订单明细表join完,本文将关联订单的其他维度数据,维度关联实际上就是在流中查询存储在 hbase 中的数据表.但是即使通过主键的方式查询,hbase 速度 ...
- 3.Flink实时项目之流程分析及环境搭建
1. 流程分析 前面已经将日志数据(ods_base_log)及业务数据(ods_base_db_m)发送到kafka,作为ods层,接下来要做的就是通过flink消费kafka 的ods数据,进行简 ...
- 4.Flink实时项目之数据拆分
1. 摘要 我们前面采集的日志数据已经保存到 Kafka 中,作为日志数据的 ODS 层,从 kafka 的ODS 层读取的日志数据分为 3 类, 页面日志.启动日志和曝光日志.这三类数据虽然都是用户 ...
- 6.Flink实时项目之业务数据分流
在上一篇文章中,我们已经获取到了业务数据的输出流,分别是dim层维度数据的输出流,及dwd层事实数据的输出流,接下来我们要做的就是把这些输出流分别再流向对应的数据介质中,dim层流向hbase中,dw ...
- 7.Flink实时项目之独立访客开发
1.架构说明 在上6节当中,我们已经完成了从ods层到dwd层的转换,包括日志数据和业务数据,下面我们开始做dwm层的任务. DWM 层主要服务 DWS,因为部分需求直接从 DWD 层到DWS 层中间 ...
- 9.Flink实时项目之订单宽表
1.需求分析 订单是统计分析的重要的对象,围绕订单有很多的维度统计需求,比如用户.地区.商品.品类.品牌等等.为了之后统计计算更加方便,减少大表之间的关联,所以在实时计算过程中将围绕订单的相关数据整合 ...
- 11.Flink实时项目之支付宽表
支付宽表 支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上, 没有办法统计商品级的支付状况. 所以本次宽表的核心就是要把支付表的信息与订单明细关联上. 解决方案有两个 一个 ...
- 8.Flink实时项目之CEP计算访客跳出
1.访客跳出明细介绍 首先要识别哪些是跳出行为,要把这些跳出的访客最后一个访问的页面识别出来.那么就要抓住几个特征: 该页面是用户近期访问的第一个页面,这个可以通过该页面是否有上一个页面(last_p ...
随机推荐
- wordpress中遇到的问题
在博客园申请了账号,也已经开始写了两篇内容,但还是想要有属于自己的小站.于是将域名续费了几年,又在我之前买的vps上搭建了一个wordpress博客站点,这样以后我就可以同时发布到两个地方. 根据教程 ...
- MCU变量加载过程
前言 在开发mcu代码的时候经常会有些疑惑,变量是怎么在编译之后进入单片机的ram区的呢,特别是在使用keil开发的时候.后来在接触gcc编译器和自研的mcu后,终于明白了这个问题.实际上变量编译后被 ...
- 深入理解Java虚拟机一:运行时数据区域
根据<Java虚拟机规范(第2版)>的规定,Java虚拟机管理的内存包括下图几个运行时数据区域: 1.程序计数器 程序计数器(Program Counter Register ...
- 简单查看windows蓝屏原因
相信各位在使用windows(xp.7.8.1.10...)过程中都遇到过蓝屏的情况,而蓝屏时,系统会将其记录起来,并追踪到引起蓝屏的程序,以下内容将简单介绍一下如何查看引起windows蓝屏的原因: ...
- Unity3D开发入门教程(二)—— Lua入门
五邑隐侠,本名关健昌,12年游戏生涯. 本教程以 Unity 3D + VS Code + C# + tolua 为例. 如果你还没有编程基础,建议你先学习一些编程基础.本文不是完全菜鸟教程,主要针对 ...
- MongoDB_文档存储结构(三)
MongoDB 文档数据库的存储结构分为四个层次,从大到小依次是:数据库(database).集合(collection).文档(document).键值对. 图 1 描述了 MongoDB 与 My ...
- Jenkins_构建任务提示文件权限不足的处理方法
问题现象 构建任务失败,查看日志提示读取文件权限不足. 问题分析 在linux上查看对应文件,发现这些文件只有root用户才有读的权限,jenkins默认是以jenkins用户在操作linux系统,因 ...
- 初识python: 回调函数
回调函数 简单理解就是:将一个函数通过参数的形式传递给另一个函数 #!/user/bin env python # author:Simple-Sir # time:2019/8/9 10:49 # ...
- 【填坑往事】使用Rxjava2的distinct操作符处理自定义数据类型去重的问题
最近碰到一个问题,自定义数据类型列表中出现了重复数据,需要去重.处理去重的办法很多,比如借助Set集合类,使用双重循环拿每一个元素和其他元素对比等.这里介绍一种简单而且比较优雅的方式:使用Rxjava ...
- pycharm创建脚本头文件模板
代码头文件信息可以包括:python 解析器的位置.字符集.作者信息.创建脚本时间等,pycharm工具创建头部信息模板操作步骤如下: 设置头文件:文件-->设置-->编辑器-->文 ...