搭建kafka的日志收集平台(原理)
项目描述:
搭建nginx web静态网页,收集用户访问日志,清洗数据调用淘宝接口,得出IP所属的isp、province和bandwidth并入库。
项目环境:
centos7.4机器共3台,nginx,filebeat,kafka2.12,zookeeper,python3.6、mysql
项目原理:
第一部分:user访问nginx web服务
-
测试环境时,可以直接使用ip访问nginx
web服务,也可以绑定域名访问。但由于我有三台机器,对应着三个ip,为了提高服务的体验,我使用了DNS做负载均衡。 -
但是DNS具有一定的局限性,例如www.abc.com可以解析成多个ip地址,一般来说会用轮询的方式去解析成各个ip,但是如果其中一个服务器挂了,DNS不会立马将这个ip地址去掉,还是会解析成挂掉的ip,可能会造成访问失败。虽然客户端有重试,但是还是会影响用户体验
-
在nginx web前面加入nginx反向代理,安全性也会高一些,负载均衡控制起来容易很多,nginx反向代理相当于一个门卫。引入keepalive通过vrrp(虚拟路由冗余协议)解决高可用的问题,有master核backup,master挂了vip立马漂到backup那里去,这样就能解决高可用。但是如果其中一个一直没有出问题,就会闲置另一个,所以就弄双vip互为主备,提高资源的利用率,需要注意的是两个ip都是虚拟ip。
-
nginx web服务只能做静态页面的展示,这里使用了三台虚拟机做web服务,在三台机器上面分别部署filebeat收集本机器的日志再吐到kafka
第二部分:kafka和zookeeper
2.1、kafka是什么?为什么要使用kafka?
刚开始做项目时我也感到很疑惑,既然在每一台机器上面部署了filebeat为什么不直接把filebeat收集来的日志吐到数据库里去呢?后来我意识到,收集日志很大一个作用用于故障定位,我用了三台机器来部署filebeat,如果在公司多的会有成千上万台机器,如果发生故障日志确实是收集到了,但是不方便做故障的定位;其次kafka日志集中管理,后续如果又有新的机器需要获取数据,直接从kafka里面获取就好了,不需要再在每台机器上面重新部署加入新机器,能够尽可能的减少日志处理对nginx的影响,总的来说kafka起到了一个消息缓冲的作用。
2.1.1、 kafka是什么?
kafka是一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据,kafka是消息中间介的一种;通常用于:日志收集、业务解耦、流量削峰;消息中间件有两种通信模式:点对点、发布订阅,kafka属于发布订阅模式;