实战:kafka实现日志收集系统
实战:kafka实现日志收集系统
一、Kafka案例需求概述
1.1 需要收集的信息:
- 用户唯一标识
- 用户操作时间
- 具体用户操作
1.2 工作流程:
- 用户的操作会由Web服务器进行响应。
- 同时用户的操作也会使用ajax向Nginx发送请求,nginx用于收集用户的点击数据流。
- Nginx收集的日志数据使用ngx_kafka_module将数据发送到Kafka集群的主题中。
- 只要数据保存到Kafka集群主题,后续就可以使用大数据组件进行实时计算或其他的处理了(统计报表等)
1.3 架构:
架构组成:HTML+Nginx+ngx_kafka_module+Kafkangx_kafka_module网址:https://github.com/brg-liuwei/ngx_kafka_module
注意问题:
由于使用ngx_kafka_module,只能接收POST请求,同时一般Web服务器不会和数据收集的Nginx在同一个域名,会涉及到使用ajax发送请求的跨域问题,可以在nginx中配置跨域来解决。
1.4 实战步骤:
- 安装Kafka
- 安装Nginx
- 配置ngx_kafka_module,注意跨域配置
- 开发HTML页面
二、环境搭建
2.1 安装Kafka
单节点搭建 参考地址:
单机搭建 Kafka2.12安装与配置/生产与消费
集群搭建 参考地址:
高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper)
查看java进程
2.2 安装Nginx
1 安装依赖
yum install wget git -yyum install gcc-c++ -y
2 安装ngx_kafka_module依赖的包
git clone https://github.com/edenhill/librdkafka //下载ngx_kafka_module依赖的包cd librdkafka./configuremakemake install
3 下载nginx
wget http://nginx.org/download/nginx-1.17.8.tar.gz //下载tar -zxf nginx-1.17.8.tar.gz //解压
安装nginx依赖
cd nginx-1.17.8 yum install gcc zlib zlib-devel openssl openssl-devel pcre pcre-devel -y //安装nginx依赖
4 下载ngx_kafka_module
cd ~ //退回到家目录git clone https://github.com/brg-liuwei/ngx_kafka_module.git //下载ngx_kafka_module
给nginx添加module
cd nginx-1.17.8 ./configure --add-module=/root/ngx_kafka_module make && make install
2.3 配置ngx_kafka_module,注意跨域配置
配置 nginx:nginx.conf
nginx.conf内容
具体参数:
[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;}# 添加locationlocation = /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' '*';
具体配置参数和方式可以参考官方文档:
让操作系统加载模块:
echo "/usr/local/lib" >> /etc/ld.so.conf //操作系统去加载一开始安装的依赖包ldconfig //加载
启动Kafka
zkServer.sh startkafka-server-start.sh /opt/kafka_2.12-1.0.2/config/server.properties
启动nginx:
/usr/local/nginx/sbin/nginx
测试:
curl localhost/log -d "dabing message send to kafka topic" -v在kafka消费者端能够消费到信息就表示搭建成功
三、项目搭建,开发HTML页面(使用Idea的静态项目直接打开访问即可)
演示效果
项目demo下载
下载网盘地址 提取码:aeo3
实战:kafka实现日志收集系统相关推荐
- Go语言学习之11 日志收集系统kafka库实战
本节主要内容: 1. 日志收集系统设计 2. 日志客户端开发 1. 项目背景 a. 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 b. 当系统机器比较少时,登陆到服务器上查 ...
- flume连接kafka_日志收集系统架构设计:(flume+zookeeper+kafka+php+mysql )
正文内容 一.安装jdk 二.安装flume 三.安装kafka 1.zookeeper 2.kafka 四.启动测试步骤 五.目录说明 六.日志收集系统设计图 七.大数据参考资料推荐 一.安装jdk ...
- 基于Flume的美团日志收集系统(一)架构和设计
背景 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团 ...
- 基于Flume的美团日志收集系统-----架构和设计
问题导读: 1.Flume-NG与Scribe对比,Flume-NG的优势在什么地方? 2.架构设计考虑需要考虑什么问题? 3.Agent死机该如何解决? 4.Collector死机是否会有影响? 5 ...
- printf 重新实现put_Go 实现海量日志收集系统(四)
2020.1.16 51Reboot 将在 2020.1.16日(今天) 21:00 为您带来分享主题<大佬教你如何从 ES 初学者到 ES专家> 直播链接(提前报名):https://k ...
- 基于Flume的美团日志收集系统(二)改进和优化
在<基于Flume的美团日志收集系统(一)架构和设计>中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计.在本节中,我们将会讲述在实际部署和使用过程中遇到的问 ...
- python分布式日志收集系统_Go实现海量日志收集系统(一)
项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常 ...
- java 如何去掉http debug日志_你居然还去服务器上捞日志,搭个日志收集系统难道不香吗?...
作者:MacroZheng 链接:https://juejin.im/post/5eef217d51882565d74fb4eb 来源:掘金 SpringBoot实战电商项目mall(35k+star ...
- 分布式日志收集系统Apache Flume的设计详细介绍
问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么 ...
最新文章
- 封装方法公共文件common.js
- 1014. 福尔摩斯的约会
- Python字典列表字段重组形成新的字典
- 红橙Darren视频笔记 一个控件显示两种颜色的文字 画笔的使用
- Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
- CIO们拼命都想上的“网红”中台,也有它的另一面
- ZOJ1151 Word Reversal(没法提交)
- unity物理引擎介绍
- 速达服务器应用程序错误,速达软件错误集锦及解决方法
- 变限积分求导公式总结_变限积分求导的口诀记忆法及应用
- hdu1879继续畅通工程(最小生成树kru算法)
- linux创建运维账户流程,Linux运维养成记-账户与权限管理
- 一周电商零售news汇总(1.18-1.25)​
- C/C++键盘输入含空格的字符串的各种方法
- MySQL 不等于null或空格
- 爬了10000张NASA关于火星探索的图片,我发现了一个秘密
- 15位和18位身份证提取出生日期,性别和城市代码
- NGINX源码之:目录导航
- linux 常用 shell 命令示例参考
- 网站|数据分析、大数据、数据挖掘或者数据分析学习相关的网站