一、作业要求

使用Kafka做日志收集

需要收集的信息:**
1、用户ID(user_id)
2、时间(act_time)
3、操作(action,可以是:点击:click,收藏:job_collect,投简历:cv_send,上传简历:cv_upload)
4、对方企业编码(job_code)
1、HTML可以理解为拉勾的职位浏览页面
2、Nginx用于收集用户的点击数据流,记录日志access.log
3、将Nginx收集的日志数据发送到Kafka主题:tp_individual

架构:
HTML+Nginx+ngx_kafka_module+Kafka
提示:
学员需要自己下载nginx,配置nginx的ngx_kafka_module,自定义一个html页面,能做到点击连接就收集用户动作数据即可。
作业需提交:
1、html的截图+搭建的过程+结果截图以文档或视频演示形式提供。
2、作业实现过程的代码。
(注意:1、需要把搭建过程用文档写清楚,2、运行效果:在html上点击相应的连接或按钮,应该在Kafka中看到有消息流进来,效果最好以视频形式演示。)


二、实现步骤

1. 安装 Nginx 和 ngx_kafka_module

1.1 安装 librdkafka

  1. # 在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel、git
  2. yum -y install gcc pcre-devel zlib-devel openssl openssl-devel git
  3. # 需要先安装 librdkafka,否则会报下面这个错
  4. ## fatal error: librdkafka/rdkafka.h: No such file or directory
  5. cd /opt/lagou/servers
  6. git clone https://github.com/edenhill/librdkafka
  7. # 下载完成后配置并编译
  8. cd /opt/lagou/servers/librdkafka
  9. ./configure
  10. make && make install

1.2 安装 Nginx 和 ngx_kafka_module

  1. cd /opt/lagou/software
  2. # 下载 nginx 安装包
  3. wget https://nginx.org/download/nginx-1.19.6.tar.gz
  4. # 解压安装包
  5. tar -zxvf nginx-1.19.6.tar.gz -C ../servers/
  6. cd /opt/lagou/servers
  7. # 下载 ngx_kafka_module 安装包
  8. git clone https://github.com/brg-liuwei/ngx_kafka_module
  9. cd /opt/lagou/servers/nginx-1.19.6
  10. # 配置
  11. ./configure --add-module=/opt/lagou/servers/ngx_kafka_module/
  12. # 编译
  13. make && make install
  14. # 修改配置文件前需要先启动 zookeeper 和 Kafka,启动成功后创建 topic
  15. kafka-topics.sh --create --zookeeper linux121:2181,linux122:2181,linux123:2181 --replication-factor 1 --partitions 3 --topic tp_individual
  16. # 修改配置文件
  17. vim /usr/local/nginx/conf/nginx.conf

image.png

  1. # 启动 nginx
  2. ./sbin/nginx
  3. # 启动 kafka 消费者窗口
  4. kafka-console-consumer.sh --bootstrap-server linux121:9092,linux122:9092,linux123:9092 --from-beginning --topic tp_individual
  5. # 测试
  6. curl linux121:81/kafka/log -d "hello world" -v

image.png
image.png
测试成功

1.3 编写 html 文件

下载 jquery-3.5.1.min.js 文件,编写 html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>拉勾教育</title>
  6. </head>
  7. <script src="./jquery-3.5.1.min.js"></script>
  8. <body>
  9. <input id="user_id" type="text" value="zz-001" hidden="hidden">
  10. <input id="job_code" type="text" value="LG000001" hidden="hidden">
  11. <button id="click" class="action" act_type="click">点击</button>
  12. <button id="collect" class="action" act_type="job_collect">收藏</button>
  13. <button id="send" class="action" act_type="cv_send">投简历</button>
  14. <button id="upload" class="action" act_type="cv_upload">上传简历</button>
  15. <label id="label"></label>
  16. </body>
  17. <style>
  18. .action {
  19. height: 30px;
  20. font-family: 微软雅黑;
  21. font-size: 14px;
  22. color: rgb(255, 255, 255);
  23. border: none;
  24. font-weight: bold;
  25. border-radius: 4px;
  26. }
  27. #click {
  28. background-color: rgb(136, 50, 50);
  29. }
  30. #collect {
  31. background-color: rgb(211, 126, 69);
  32. }
  33. #send {
  34. background-color: rgb(204, 192, 85);
  35. }
  36. #upload {
  37. background-color: rgb(121, 155, 102);
  38. }
  39. </style>
  40. <script>
  41. $(document).ready(function () {
  42. $(".action").click(function () {
  43. var user_id = $("#user_id").val();
  44. var act_time = new Date();
  45. var action = this.getAttribute("act_type")
  46. var job_code = $("#job_code").val();
  47. var log = "{\"user_id\":\""+user_id+"\",\"act_time\":\""+act_time+"\",\"action\":\""+action+"\",\"job_code\":\""+job_code+"\"}";
  48. $.ajax({
  49. url: "http://linux121:81/kafka/log",
  50. type: "POST",
  51. dataType: "json",
  52. data: log
  53. })
  54. });
  55. })
  56. </script>
  57. </html>

1.4 验证视频

屏幕录制2021-04-09 上午12.05.44.mov (11.29MB)