当前位置:   article > 正文

对接kafka_实战!Nginx+Kafka实现页面采集

jquery连接kafka

75964b7d408a8177564d2520f9c5e749.png

0.架构简介

模拟线上的实时流,比如用户的操作日志,采集到数据后,进行处理,暂时只考虑数据的采集,使用Html+Jquery+Nginx+Ngx_kafka_module+Kafka来实现,其中Ngx_kafka_module 是开源的专门用来对接NginxKafka的一个组件。

1.需求描述

1.1 用htmljquery 模拟用户请求日志

其中包括下面下面几项:

用户id:user_id, 访问时间:act_time, 操作: (action,包括click,job_collect,cv_send,cv_upload)

企业编码job_code

1.2 用Nginx接受1.1中的请求

1.3 接受完请求后,使用ngx_kafka_module将数据发送到Kafka的主题tp_individual 中。

1.4 在kafka中使用一个消费者消费该主题,观察

2.搭建步骤

2.1 Kafka安装

由于使用现成的已安装好的docker-kafka镜像,所以直接启动即可.

2.2 安装Nginx,并启动

  1. $ cd /usr/local/src
  2. $ git clone git@github.com:edenhill/librdkafka.git
  3. # 进入到librdkafka,然后进行编译
  4. $ cd librdkafka
  5. $ yum install -y gcc gcc-c++ pcre-devel zlib-devel
  6. $ ./configure
  7. $ make && make install
  8. $ yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
  9. $ cd /opt/hoult/software
  10. # 1.下载
  11. $ wget http://nginx.org/download/nginx-1.18.0.tar.gz
  12. # 2.解压
  13. $ tar -zxf nginx-1.18.0.tar.gz -C /opt/hoult/servers
  14. # 3. 下载模块源码
  15. $ cd /opt/hoult/software
  16. $ git clone git@github.com:brg-liuwei/ngx_kafka_module.git
  17. # 4. 编译
  18. $ cd /opt/hoult/servers/nginx-1.18.0
  19. $ ./configure --add-module=/opt/hoult/software/ngx_kafka_module/
  20. $ make && make install
  21. # 5.删除Nginx安装包
  22. $ rm /opt/hoult/software/nginx-1.18.0.tar.gz
  23. # 6.启动nginx
  24. $ cd /opt/hoult/servers/nginx-1.18.0
  25. $ nginx

3.相关配置

3.1 nginx配置nginx.conf

  1. #pid logs/nginx.pid;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  9. # '$status $body_bytes_sent "$http_referer" '
  10. # '"$http_user_agent" "$http_x_forwarded_for"';
  11. #access_log logs/access.log main;
  12. sendfile on;
  13. #tcp_nopush on;
  14. #keepalive_timeout 0;
  15. keepalive_timeout 65;
  16. #gzip on;
  17. kafka;
  18. kafka_broker_list linux121:9092;
  19. server {
  20. listen 9090;
  21. server_name localhost;
  22. #charset koi8-r;
  23. #access_log logs/host.access.log main;
  24. #------------kafka相关配置开始------------
  25. location = /kafka/log {
  26. #跨域相关配置
  27. add_header 'Access-Control-Allow-Origin' $http_origin;
  28. add_header 'Access-Control-Allow-Credentials' 'true';
  29. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  30. kafka_topic tp_individual;
  31. }
  32. #error_page 404 /404.html;
  33. }
  34. }

3.2 启动kafka 生产者和消费者

  1. # 创建topic
  2. kafka-topics.sh --zookeeper linux121:2181/myKafka --create --topic tp_individual --partitions 1 --replication-factor 1
  3. # 创建消费者
  4. kafka-console-consumer.sh --bootstrap-server linux121:9092 --topic tp_individual --from-beginning
  5. # 创建生产者测试
  6. kafka-console-producer.sh --broker-list linux121:9092 --topic tp_individual
  7. 复制代码

3.3 编写Html + Jquery代码

  1. <!DOCTYPE html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no">
  5. <title>index</title>
  6. <!-- jquery cdn, 可换其他 -->
  7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  8. </head>
  9. <body>
  10. <input id="click" type="button" value="点击" onclick="operate('click')" />
  11. <input id="collect" type="button" value="收藏" onclick="operate('job_collect')" />
  12. <input id="send" type="button" value="投简历" onclick="operate('cv_send')" />
  13. <input id="upload" type="button" value="上传简历" onclick="operate('cv_upload')" />
  14. </body>
  15. <script>
  16. function operate(action) {
  17. var json = {'user_id': 'u_donald', 'act_time': current().toString(), 'action': action, 'job_code': 'donald'};
  18. $.ajax({
  19. url:"http://linux121:8437/kafka/log",
  20. type:"POST" ,
  21. crossDomain: true,
  22. data: JSON.stringify(json),
  23. // 下面这句话允许跨域的cookie访问
  24. xhrFields: {
  25. withCredentials: true
  26. },
  27. success:function (data, status, xhr) {
  28. // console.log("操作成功:'" + action)
  29. },
  30. error:function (err) {
  31. // console.log(err.responseText);
  32. }
  33. });
  34. };
  35. function current() {
  36. var d = new Date(),
  37. str = '';
  38. str += d.getFullYear() + '-';
  39. str += d.getMonth() + 1 + '-';
  40. str += d.getDate() + ' ';
  41. str += d.getHours() + ':';
  42. str += d.getMinutes() + ':';
  43. str += d.getSeconds();
  44. return str;
  45. }
  46. </script>
  47. </html>

a.html放在nginx的目录下,浏览器访问192.168.18.128:9090

4.演示

  • 4.1 首先启动zk集群,kafka集群
  • 4.2 然后创建topic, 创建消费者,创建生产者,测试topic
  • 4.3 启动nginx访问页面,进行点击,观察消费者状态

整个过程如下图:

96f7d65942c34d52b72e89979b9fd9a3.png

查看个人资料,可以关注更多。

作者:Hoult丶吴邪
链接: https:// juejin.cn/post/69030466 65821749256
来源:掘金
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/192778
推荐阅读
相关标签
  

闽ICP备14008679号