实战:kafka实现日志收集系统

实战:kafka实现日志收集系统


一、Kafka案例需求概述

1.1 需要收集的信息:
  • 用户唯一标识
  • 用户操作时间
  • 具体用户操作
1.2 工作流程:

实战:kafka实现日志收集系统_第1张图片

  • 用户的操作会由Web服务器进行响应。
  • 同时用户的操作也会使用ajax向Nginx发送请求,nginx用于收集用户的点击数据流。
  • Nginx收集的日志数据使用ngx_kafka_module将数据发送到Kafka集群的主题中。
  • 只要数据保存到Kafka集群主题,后续就可以使用大数据组件进行实时计算或其他的处理了(统计报表等)
1.3 架构:
	架构组成:
		HTML+Nginx+ngx_kafka_module+Kafka
	
	ngx_kafka_module网址:
		https://github.com/brg-liuwei/ngx_kafka_module
注意问题:
	由于使用ngx_kafka_module,只能接收POST请求,同时一般Web服务器不会和数据收集的Nginx在同一个域名,
	会涉及到使用ajax发送请求的跨域问题,可以在nginx中配置跨域来解决。
1.4 实战步骤:
  1. 安装Kafka
  2. 安装Nginx
  3. 配置ngx_kafka_module,注意跨域配置
  4. 开发HTML页面

二、环境搭建

2.1 安装Kafka

单节点搭建 参考地址
     单机搭建 Kafka2.12安装与配置/生产与消费

集群搭建 参考地址
     高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper)

实战:kafka实现日志收集系统_第2张图片
查看java进程
实战:kafka实现日志收集系统_第3张图片


2.2 安装Nginx

1 安装依赖
	yum install wget git -y
	yum install gcc-c++ -y

实战:kafka实现日志收集系统_第4张图片
实战:kafka实现日志收集系统_第5张图片

2 安装ngx_kafka_module依赖的包
	git clone https://github.com/edenhill/librdkafka   //下载ngx_kafka_module依赖的包
	cd librdkafka
	./configure
	make
	make install

实战:kafka实现日志收集系统_第6张图片实战:kafka实现日志收集系统_第7张图片
实战:kafka实现日志收集系统_第8张图片
实战:kafka实现日志收集系统_第9张图片

3 下载nginx
	wget http://nginx.org/download/nginx-1.17.8.tar.gz  //下载
	tar -zxf nginx-1.17.8.tar.gz		//解压

实战:kafka实现日志收集系统_第10张图片
安装nginx依赖

	cd nginx-1.17.8   
	yum install gcc zlib zlib-devel openssl openssl-devel pcre pcre-devel -y    //安装nginx依赖

实战:kafka实现日志收集系统_第11张图片

4 下载ngx_kafka_module
	cd ~  //退回到家目录
	git clone https://github.com/brg-liuwei/ngx_kafka_module.git    //下载ngx_kafka_module

实战:kafka实现日志收集系统_第12张图片
给nginx添加module

	cd nginx-1.17.8		
	./configure --add-module=/root/ngx_kafka_module	
	make  &&  make install

实战:kafka实现日志收集系统_第13张图片
实战:kafka实现日志收集系统_第14张图片

2.3 配置ngx_kafka_module,注意跨域配置

配置 nginx:nginx.conf
实战:kafka实现日志收集系统_第15张图片
nginx.conf内容
实战:kafka实现日志收集系统_第16张图片

具体参数:

[root@kafka ~]# cat /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


    kafka;
    kafka_broker_list 192.168.80.30:9092;


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
	
		# 添加location
		location = /log {
			### 设置跨域
	   	 	add_header 'Access-Control-Allow-Origin' $http_origin;
	    	add_header 'Access-Control-Allow-Credentials' 'true';
	    	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
	    	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';
	    	add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
	    	if ($request_method = 'OPTIONS') {
	       	 	add_header 'Access-Control-Max-Age' 1728000;
	        	add_header 'Content-Type' 'text/plain; charset=utf-8';
	        	add_header 'Content-Length' 0;
	        	return 204;
	    	}
	    	kafka_topic tp_dabing_log;
		}
	
	        error_page   500 502 503 504  /50x.html;
	        location = /50x.html {
	            root   html;
	        }
	       
	   }

}
注意
	问题1:执行curl命令,返回404错误
	解决:
		1.检查curl指定的链接是否错误。
		2.检查nginx.conf文件是否配置正确(修改的nginx.conf文件是安装目录下的,而不是源码目录下的)。

	问题2:html页面埋点跨域问题
	解决:
		在nginx.conf中编辑:add_header 'Access-Control-Allow-Origin' '*'; 
具体配置参数和方式可以参考官方文档:

实战:kafka实现日志收集系统_第17张图片

让操作系统加载模块:
	echo "/usr/local/lib" >> /etc/ld.so.conf   //操作系统去加载一开始安装的依赖包
	ldconfig    //加载

在这里插入图片描述

启动Kafka
	zkServer.sh start
	kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/server.properties
启动nginx:
	/usr/local/nginx/sbin/nginx

实战:kafka实现日志收集系统_第18张图片

测试:
	curl   localhost/log    -d   "dabing message send to kafka topic"    -v
	
	在kafka消费者端能够消费到信息就表示搭建成功

实战:kafka实现日志收集系统_第19张图片


三、项目搭建,开发HTML页面(使用Idea的静态项目直接打开访问即可)

实战:kafka实现日志收集系统_第20张图片

实战:kafka实现日志收集系统_第21张图片

演示效果

实战:kafka实现日志收集系统_第22张图片


项目demo下载

下载网盘地址 提取码:aeo3

你可能感兴趣的:(高吞吐消息中间件,kafka,zookeeper,centos,logging,nginx)