关联XXXXX话题的问卷调查
持续更新中…
一、项目介绍
本项目分为六个模块,第一个为java语言基于springboot实现的问卷答题模块,具体包含问题的校对统计,echarts,bootstrap,click,jquery等前端模块,第二个为admin管理员界面,用于对题目和答题者信息的管理和数据导入导出,图片上传以及大屏可视化。第三个为scala语言基于spark开发的日志清洗、分类、分析聚合模块。第四个为springboot admin sever系统监控模块用于,实时监控项目底层的JVM,mysql,redis等运行是否正常。第五个为docker部署模块。第六个为内网穿透模块,便于外网访问问卷,进行答题测试。
1、springboot答题模块
主要实现 JavaEE 层面整体的业务逻辑,通过 Spring 进行构建,对接业务需求。部署在 Tomcat 上。具体使用的技术有:spring,springMVC,mybatis,redis等,使用的数据库为:mysql数据库。
用户输入学号、姓名等相关信息即可完成登陆(未注册自动注册),然后进入答题界面参与答题,答题结束后显示成绩,然后引导跳转到大数据实时展示页面。上述这些操作都将被日志文件记录下来,保存在日志文件内。
当有新的数据插入或者更新mysql的时候,本模块的websocket能在100ms内把最新的数据广播给当前左右在线的浏览器,反之如果数据库没有新数据插入,那么短时间内则不会自动广播。
2、scala数据分析模块
基于spark实现,具体使用的技术由,kafka,flume,spark,redis,zookeeper等,使用的数据库为mysql。
首先flume负责采集日志文件中的日志信息,转交给kafka,再由spark程序来消费,清洗、分类、分析聚合后写入数据库。
当有新数据写入mysql的时候,本模块会利用redis引导答题模块用websocket技术实时往当前在线浏览器推送最新数据。从访问到浏览器刷新,整个流程延迟在1-2秒左右。
二、项目说明
1、开发环境
虚拟机版本:centos7
编译器:idea 2019.2
数据库:mysql 5.7
答题模块:见pom.xml文件
kafka版本:kafka_2.12-3.0.0.tgz
flume版本:apache-flume-1.9.0-bin.tar.gz
spark版本:spark-3.0.0-bin-hadoop3.2.tgz
zookeeper版本:apache-zookeeper-3.5.7-bin.tar.gz
三、项目运行流程
准备工作:
①导入mysql.sql文件,将数据库和表建好。
②修改两个模块的数据库连接四要素,以及开启redis的连接密码:123等信息。
③将两个模块的代码打包发到linux操作系统。
④启动zookeeper集群和kafka集群
启动项目:
开启redis并查看进程:
redis-server /opt/module/redis-7.0.2/redis.conf
查看进程
ps -ef | grep redis 或者使用ps -aux|grep redis
由于可能linx端口占用8080,关闭占用8080端口的进程
sudo fuser -k 8080/tcp
也可用其他端口
① 进入kafka根目录创建kafka主题(需对中间参数做必要修改)
bin/kafka-topics.sh --create --bootstrap-server hadoop100:2181 --replication-factor 1 --partitions 1 --topic solvingProblem
注意:若要修改topic,记得整个项目都全部改。
②启动kafka消费数据
bin/kafka-console-consumer.sh --bootstrap-server hadoop100:9092 --topic solvingProblem
③进入flume根目录启动flume采集日志文件
bin/flume-ng agent -n a1 -c conf/ -f ./flume.conf
④启动答题模块的springboot项目
在本地运行
nohup java -jar surveysystem.jar >/root/log/run.log 2>/root/log/error.log &
日志文件保存在/root/log/run.log内,错误日志保存在/root/log/error.log内。若要改路径,记得把flume.conf中的路径也一起改了。
在docker上运行
新建vim Dockerfile
FROM java:8
VOLUME ~/log
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo ‘Asia/Shanghai’ >/etc/timezone
ADD ./surveysystem-0.0.1-SNAPSHOT.jar ~/surveysystem.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08","~/surveysystem.jar"]
创建镜像
docker build -t surveysystem .
运行镜像
docker run -d -p 192.168.169.100:8081:8081 -v /root/log:/root/log -v /etc/localtime:/etc/localtime --name surveyapp surveysystem:latest
日志追踪
docker logs -f surveyapp
⑤进入spark根目录启动spark,对日志文件进行实时分析
bin/spark-submit --class com.bigworldxld.anli.Solving --master local[*] /root/survey_spark.jar
开启内网穿透工具“39nat”
注册账号
登录www.39nat.com,点击右上角的“开始使用按钮”。如果您还没有登录,这里会弹出登录界面。没有密码可以在登录界面下方点击注册按钮注册。
添加映射
在隧道列表中,内网地址表示您本地的地址,可以是tcp、http、https、dir(本地目录)四种类型。外网地址表示本地映射到公网的地址,可以是http和tcp类型。
下载登录客户端
点击下载与您操作系统对应的客户端,解压后无需安装即可使用
linux:打开终端,进入下载目录执行命令解压
unzip 39nat.zip
得到文件39nat,之后在终端中直接执行此命令
./39nat
执行客户端程序后,按照提示输入账号和密码后即可使用。客户端有做断线自动重连处理,同一个账号密码不能同时登录多个客户端。
假设本地Web开发环境地址是http://192.168.169.100:8080,您可以在添加隧道时,选择外网协议为http,内网协议为http,内网地址192.168.169.100,内网端口8080
项目预览:
当完成了步骤后,其他外网用户可以在浏览器输入39nat客户端生成的https://3229se.39nat.com,即可访问该项目了。