# lg-kafka-new **Repository Path**: sunli1103_admin/lg-kafka-new ## Basic Information - **Project Name**: lg-kafka-new - **Description**: 【java训练营作业19-RabbitMQ死信队列】第六阶段 分布式消息服务中间件进阶 模块二 高吞吐消息中间件Kafka 本模块对Kafka集群原理和消息流处理流程、组件机制、流处理基础等进行深入讲解,对从架构选型角度对三种MQ进行比较。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-09-06 - **Last Updated**: 2022-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 作业说明 #### 课程介绍 > **第六阶段 分布式消息服务中间件进阶** > > 模块二 高吞吐消息中间件Kafka > > 本模块对Kafka集群原理和消息流处理流程、组件机制、流处理基础等进行深入讲解,对从架构选型角度对三种MQ进行比较。 #### 作业内容 > 使用Kafka做日志收集。 > > 一、需要收集的信息: > > 1、用户ID(user_id) > > 2、时间(act_time) > > 3、操作(action,可以是:点击:click,收藏:job_collect,投简历:cv_send,上传简历:cv_upload) > > 4、对方企业编码(job_code) > > 二、工作流程: > ![输入图片说明](https://images.gitee.com/uploads/images/2020/0909/174405_d1ca5c99_1712191.png "屏幕截图.png") > > 1、HTML可以理解为拉勾的职位浏览页面 > > 2、用户的操作会由Web服务器进行响应。 > > 3、同时用户的操作也会使用ajax向Nginx发送请求,nginx用于收集用户的点击数据流。 > > 4、Nginx收集的日志数据使用ngx_kafka_module将数据发送到Kafka集群的主题中。 > > 5、只要数据保存到Kafka集群主题,后续就可以使用大数据组件进行实时计算或其他的处理了,比如职位推荐,统计报表等。 > > 三、架构: > > HTML+Nginx+[ngx_kafka_module](https://github.com/brg-liuwei/ngx_kafka_module)+Kafka > > ngx_kafka_module网址:[https://github.com/brg-liuwei/ngx_kafka_module](https://github.com/brg-liuwei/ngx_kafka_module) > > 注意问题:由于使用ngx_kafka_module,只能接收POST请求,同时一般Web服务器不会和数据收集的Nginx在同一个域名,会涉及到使用ajax发送请求的跨域问题,可以在nginx中配置跨域来解决。 > > 四、实战步骤: > 1. 安装Kafka > 2. 安装Nginx > 3. 配置ngx_kafka_module,注意跨域配置 > 4. 开发HTML页面 #### 安装软件 ``` jdk-8u261-linux-x64 zookeeper-3.4.14 kafka_2.12-1.0.2 nginx-1.15.6 ngx_kafka_module ``` #### 实现步骤 1. 安装JDK ```shell rpm -ivh jdk-8u261-linux-x64.rpm ``` 2. 安装zookeeper ```shell tar -zxvf zookeeper-3.4.14.tar.gz -C /opt cd /opt/zookeeper-3.4.14/conf cp zoo_sample.cfg zoo.cfg vi zoo.cfg ``` 修改配置文件`/opt/zookeeper-3.4.14/conf/zoo.cfg`:数据目录 ```shell dataDir=/var/lagou/zookeeper/data ``` 设置环境变量`/etc/profile` ```shell export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14 export PATH=$PATH:$ZOOKEEPER_PREFIX/bin export ZOO_LOG_DIR=/var/lagou/zookeeper/log ``` 生效配置,并启动zookeeper ```shell source /etc/profile cd /opt/zookeeper-3.4.14/bin zkServer.sh start zkServer.sh status ``` 3. 安装kafka ```shell tar -zxvf kafka_2.12-1.0.2.gz -C /opt ``` 修改配置文件`/opt/kafka_2.12-1.0.2/config/server.properties`:数据目录和zookeeper地址 ```shell 60行: log.dir=/var/lagou/kafka/kafka-logs 123行: zookeeper.connect=localhost:2181/myKafka ``` 设置环境变量`/etc/profile` ```shell export KAFKA_HOME=/opt/kafka_2.12-1.0.2 export PATH=$PATH:$KAFKA_HOME/bin ``` 生效配置,并启动kafka ```shell source /etc/profile cd /opt/kafka_2.12-1.0.2/bin kafka-server-start.sh -daemon /opt/kafka_2.12-1.0.2/config/server.properties ``` 4. 安装nginx 安装相关类库 ```shell yum -y install gcc gcc-c++ pcre-devel zlib zlib-devel openssl openssl-devel ``` 准备好ngx_kafka_module https://github.com/brg-liuwei/ngx_kafka_module 编译nginx ```shell tar -zxvf /root/upload/nginx-1.15.6.tar.gz cd /root/upload/nginx-1.15.6/ ./configure --prefix=/opt/nginx-1.15.6 --add-module=/root/upload/ngx_kafka_module-master/ make && make install cd /opt/nginx-1.15.6/sbin ./nginx -V ``` 设置nginx配置文件`/opt/nginx-1.15.6/conf/nginx.conf` ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for'; access_log logs/access.log access; sendfile on; keepalive_timeout 65; kafka; # kafka地址信息 kafka_broker_list 127.0.0.1:9092; server { listen 80; server_name localhost; root html/; location = /operation { # 主题 这里设置为tp_individual kafka_topic tp_individual; } } } ``` 启动nginx ```shell ./nginx ``` 启动nginx时报错 ```shell ./nginx: error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No such file or directory ``` 加载so库 ```shell echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig ``` 5. html(拉勾职位信息页面) ```html 拉勾求职信息
``` #### 相关问题 1. nginx安装问题 安装nginx时遇到一个小问题。注意第一步解压nginx安装包后的文件为待编译的安装程序,所以不要解压到待安装目录,否则会编译安装时会发生文件冲突。 第二步进行编译安装时,安装后的运行目录通过`./configure --prefix=/opt/nginx-1.15.6`指定。 2. html访问跨域问题 软件运行环境搭建在虚拟机192.168.0.111中,如果用本机的html通过ajax访问,会发生跨域问题。 解决方法为将html也部署到虚拟机的nginx中,并且ajax请求地址改为192.168.0.111。具体参看nginx相关配置。 #### 测试流程 1. 启动kafka消费端 输入图片说明 2. 打开拉勾职位浏览页面 输入图片说明 3. 依次点击:点击查看(click),收藏(job_collect),投简历(cv_send),上传简历(cv_upload) 输入图片说明 4. 查看nginx的access.log ![输入图片说明](https://images.gitee.com/uploads/images/2020/0907/041746_6faa0626_1712191.png "屏幕截图.png") 5. 查看kafka消费端信息 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0907/041906_85e2cdd9_1712191.png "屏幕截图.png") #### 视频讲解 ![视频讲解](reference/md-videos/kafka.mp4) #### 参考资料 https://blog.csdn.net/qq_23830637/article/details/108098161