当前位置:   article > 正文

html+Nginx+kafka实现_html 连接kafka

html 连接kafka

0.架构简介

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

 

1.需求描述

1.1 用html和jquery 模拟用户请求日志,其中包括下面下面几项:

用户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 https://github.com/edenhill/librdkafka
  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/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/servers
  14. # 3. 下载模块源码
  15. $ cd /opt/software
  16. $ git clone git@github.com:brg-liuwei/ngx_kafka_module.git
  17. # 4. 编译
  18. $ cd /opt/servers/nginx-1.18.0
  19. $ ./configure --add-module=/opt/software/ngx_kafka_module/
  20. $ make && make install 
  21. # 5.删除Nginx安装包
  22. $ rm /opt/software/nginx-1.18.0.tar.gz
  23. # 6.启动nginx
  24. $ cd /opt/servers/nginx-1.18.0/sbin
  25. $ nginx 


3.相关配置

3.1 nginx配置nginx.conf

  1. #user nobody;
  2. worker_processes 1;
  3. #error_log logs/error.log;
  4. #error_log logs/error.log notice;
  5. #error_log logs/error.log info;
  6. #pid logs/nginx.pid;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  14. # '$status $body_bytes_sent "$http_referer" '
  15. # '"$http_user_agent" "$http_x_forwarded_for"';
  16. #access_log logs/access.log main;
  17. sendfile on;
  18. #tcp_nopush on;
  19. #keepalive_timeout 0;
  20. keepalive_timeout 65;
  21. #gzip on;
  22. #此处配置的是和kafka进行整合,配置kafka的broker的地址
  23. kafka;
  24. kafka_broker_list linux121:9092;
  25. server {
  26. listen 6666;
  27. server_name localhost;
  28. add_header 'Access-Control-Allow-Origin' $http_origin;
  29. add_header 'Access-Control-Allow-Credentials' 'true';
  30. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  31. add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  32. add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
  33. #charset koi8-r;
  34. #access_log logs/host.access.log main;
  35. location / {
  36. root html;
  37. index index.html index.htm;
  38. }
  39. #配置要消费的kafka分区,如果topic不存在会自动创建
  40. location = /kafka/mytopic {
  41. kafka_topic tp_individual;
  42. }
  43. #可以配置多个topic
  44. location = /kafka/topic2 {
  45. kafka_topic user;
  46. }
  47. location = /job {
  48. root html;
  49. index jobPage.html;
  50. }
  51. }
  52. }

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 

3.3 编写Html + Jquery代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>kafka job</title>
  6. <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
  7. </head>
  8. <body>
  9. <div>
  10. <button id="click" type="button" onclick="post('click')">点击</button>
  11. <button id="collect" type="button" onclick="post('job_collect')">收藏</button>
  12. <button id="send" type="button" onclick="post('cv_send')">上传简历</button>
  13. <button id="upload" type="button" onclick="post('cv_upload')">投递简历</button>
  14. </div>
  15. </body>
  16. <script type="text/javascript">
  17. function post(action) {
  18. let json = {'user_id': 'u_donald', 'act_time': current().toString(), 'action': action, 'job_code': 'donald'};
  19. alert("begin")
  20. alert(json)
  21. $.ajax({
  22. url: "http://linux121:6666/kafka/mytopic",
  23. type:"POST" ,
  24. crossDomain: true,
  25. data: JSON.stringify(json),
  26. xhrFields: {
  27. withCredentials: true //跨域访问
  28. },
  29. success:function (data, status, xhr) {
  30. alert("操作成功:'" + action)
  31. },
  32. error:function (err) {
  33. alert(err.responseText);
  34. }
  35. });
  36. }
  37. function current() {
  38. let d = new Date(),
  39. str = '';
  40. str += d.getFullYear() + '-';
  41. str += d.getMonth() + 1 + '-';
  42. str += d.getDate() + ' ';
  43. str += d.getHours() + ':';
  44. str += d.getMinutes() + ':';
  45. str += d.getSeconds();
  46. return str;
  47. }
  48. </script>
  49. </html>

运行页面点击效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/828944
推荐阅读
相关标签
  

闽ICP备14008679号