ELK+Filebeat+zookeeper+Kafka原理和搭建
目录
引言
一、ZooKeeper介绍
二、Kafka介绍
2.1、为什么需要消息队列(MQ)
2.2、消息队列的好处
解耦合
异步处理
流量削峰
2.3、Kafka的特性
2.4、Kafka作为存储系统
2.5、Kafka消费模式
Kafka的消费模式(两种)
一对一
一对多
三、Kafka的基础架构
3.1、Kafka架构
3.2、分区的原因
3.3、工作流程
四、ELK+Filebeat+ZooKeeper+Kafka搭建部署
4.1、zookeeper安装配置
下载,解压zookeeper安装包
修改配置文件
每台机器都指定对应的节点号
启动zookeeper
4.2、Kafka安装配置
下载解压Kafka
修改配置文件
添加系统环境变量
启动kafka
Kafka命令行操作
4.3、创建topic
4.4、测试topic
发布消息
消费消息
4.5、配置数据采集层filebeat
定制nginx日志格式
修改filebeat配置文件
启动filebeat
4.6、在kafka上创建一个话题nginx-es
修改logstash的配置文件
4.7、查看网页认证
引言
ELK和Filebeat原理和搭建在前面已经说过了
ELK日志分析系统(一)之ELK原理_IT.cat的博客-CSDN博客ELK日志分析(二)之ELK搭建部署_IT.cat的博客-CSDN博客[ELFK]日志分析系统搭建---Filebeat_IT.cat的博客-CSDN博客
但是我这里是重新搭建,所以IP地址会有所改变
server 192.168.130.70 kibana elasticsearch node #es集群就省略了
server 192.168.130.60 logstash filebeat
#zookeeper+kafka集群
server 192.168.130.50 zookeeper+kafka
server 192.168.130.40 zookeeper+kafka
server 192.168.130.30 zookeeper+kafka
所以我们直接从zookeeper和kafka开始讲起
这里是elfk已经将nginx中的access日志获取到了
一、ZooKeeper介绍
Zookpper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用开源基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。
Zookeeper服务自身组成一个集群,2n+1个(奇数)服务允许n个失效,集群内一半以上机器可用,Zookeeper就可用。
假设3台机器组成的集群,可用有允许一台失效,如果有2台失效,这个集群就不可用,1<1.5,一般的搭建zookeeper集群时,以奇数台机器来搭建。目的:是为了提高容错能允许多损失一台。
二、Kafka介绍
Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。可以在系统中起到“削峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。
2.1、为什么需要消息队列(MQ)
主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最好请求线程会堆积过多,从而触发too mang connection错误,英法雪崩效应。
我们通过使用消息队列,通过以读处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。
当前比较常见的MQ中间件有ActiveMQ、RabbitMQ、RocketMQ、Kafka等
2.2、消息队列的好处
解耦合
耦合的状态表示当你实现某个功能的时候,是直接接入当前接口,而利用消息队列,可以将相应的消息发送到消息队列,这样的话,如果接口出了问题,将不会影响到当前的功能。
异步处理
异步处理替代了之前的同步处理,以部处理不需要让流程走完就返回结果,可以将消息发送到消息队列中,然后返回结果,剩下让其他业务处理接口从消息队列中拉取消费处理即可
流量削峰
高流量的时候,使用消息队列作为中间件可以将流量的高峰保存在消息队列中,从而防止系统的高请求,减轻服务器的请求处理压力
2.3、Kafka的特性
2.4、Kafka作为存储系统
2.5、Kafka消费模式
Kafka的消费模式(两种)
一种是一对一的消费,也即点对点的通信,即一个发送一个接收
第二种为一对多的消费,即一个消息发送到消息队列,消费者根据消息队列的订阅拉取消息消费
一对一
消息生产者发布消息到Queue队列中,通知消费者从队列中拉取消息进行消费。消息被消费之后则删除,Queue支持多个消费者,但对于一条消息而言,只有一个消费者可以消费,即一条消息只能被一个消费者消费
一对多
这种模式也成为发布/订阅模式,即利用Topic(一个消息集合)存储消息,消息生产者将消息发布到Topic中,同时有多个消费者订阅此Topic,消费者可以从中消费消息,注意发布到Topic中的消息会被多个消费者消费,消费者消费数据之后,数据不会被清楚,Kafka会默认保留一段时间,然后再删除。
三、Kafka的基础架构
3.1、Kafka架构
Producer:Producer即生产者,消息的产生者,是消息的入口
Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个 broker 对应一台服务器。每个 kafka 集群内的 broker 都有一个不重复的编号.
Topic:消息的主题,可以理解为消息的分类,kafka 的数据就保存在 topic。在每个broker上都可以创建多个 topic。
Partition:Topic 的分区,每个 topic 可以有多个分区,分区的作用是做负载,提高 kafka 的吞吐量。同一个 topic 在不同的分区的数据是不重复的,partition 的表现形式就是一个一个的文件夹!
Replication:每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader故障的时候会选择一个备胎(Follower)上位,成为 Leader。在 kafka 中默认副本的最大数量是 10 个,且副本的数量不能大于Broker 的数量,follower 和 leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。
Message:每一条发送的消息主体。
Consumer:消费者,即消息的消费方,是消息的出口。
Consumer Group:我们可以将多个消费组组成一个消费者组,在 kafka 的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个 topic 的不同分区的数据,这也是为了提高 kafka 的吞吐量!
Zookeeper:kafka 集群依赖 zookeeper 来保存集群的的元信息,来保证系统的可用性。
Leader:每个分区多个副本的主角色,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。
Follower:每个分区多个副本的从角色,实时的从 Leader 中同步数据,保持和Leader 数据的同步,Leader 发生故障的时候,某个 Follower 会成为新的 Leader。
3.2、分区的原因
- 便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个topic 又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了;
- 可以提高并发,因为可以以 Partition 为单位读写了。
3.3、工作流程
Producter 将消息发送给 leader
Leader 将消息写入本地文件
Followers 从 leader 同步消息
Follower 将消息写入本地后向 leader 发送 ACK 确认消息
Leader 收到所有副本的 ACK 后,向 producter 发送 ACK注:消息写入 leader 后,follower 是主动的去 leader 进行同步的
数据会写入到不同的分区,分区的目的是:
方便扩展:因为一个 topic 可以有多个 partition,所以我们可以通过扩展机器去轻松的应对日益增长的数据量。
提高并发:以 partition 为读写单位,可以多个消费者同时消费数据,提高了消息的处理效率。
partition 在写入的时候可以指定需要写入的 partition,如果有指定,则写入对应的partition。
如果没有指定 partition,但是设置了数据的 key,则会根据 key 的值 hash 出一个partition。
如果既没指定 partition,又没有设置 key,则会轮询选出一个 partition。
- 0 代表 producer 往集群发送数据不需要等到集群的返回,不确保消息发送成功。安全性最低但是效率最高。
- 1 代表 producer 往集群发送数据只要 leader 应答就可以发送下一条,只确保leader 发送成功。
- all 代表 producer 往集群发送数据需要所有的 follower 都完成从 leader 的同步才会发送下一条,确保 leader 发送成功和所有的副本都完成备份。安全性最高,但是效率最低。
四、ELK+Filebeat+ZooKeeper+Kafka搭建部署
这个架构图从左到右,总共分为 5 层,每层实现的功能和含义分别介绍如下:
第一层、数据采集层
数据采集层位于最左边的业务服务器集群上,在每个业务服务器上面安装了filebeat 做日志收集,然后把采集到的原始日志发送到 Kafka+zookeeper 集群上。
第二层、消息队列层
原始日志发送到 Kafka+zookeeper 集群上后,会进行集中存储,此时,filbeat 是消息的生产者,存储的消息可以随时被消费。
第三层、数据分析层
Logstash 作为消费者,会去 Kafka+zookeeper 集群节点实时拉取原始日志,然后将获取到的原始日志根据规则进行分析、清洗、过滤,最后将清洗好的日志转发至 Elasticsearch 集群
第四层、数据持久化存储
Elasticsearch 集群在接收到 logstash 发送过来的数据后,执行写磁盘,建索引库等操作,最后将结构化的数据存储到 Elasticsearch 集群上。
第五层、数据查询、展示层
Kibana 是一个可视化的数据展示平台,当有数据检索请求时,它从 Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析。
由于条件限制,我们将logstash和Filebeat部署在一台服务器上,并且少一台es集群
server 192.168.130.70 kibana elasticsearch node #es集群就省略了
server 192.168.130.60 logstash filebeat
#zookeeper+kafka集群
server 192.168.130.50 zookeeper+kafka
server 192.168.130.40 zookeeper+kafka
server 192.168.130.30 zookeeper+kafka
前面的ELK已经搭好,Filebeat后续还要更改配置
4.1、zookeeper安装配置
下载,解压zookeeper安装包
#zookeep下载地址
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
#解压安装包
tar -zxf apache-zookeeper-3.8.0-bin.tar.gz
mv apache-zookeeper-3.8.0-bin /usr/local/zookeeper-3.8.0
cd /usr/local/zookeeper-3.8.0/conf/
cp zoo_sample.cfg zoo.cfg
修改配置文件
vim zoo.cfg
其他两台都执行以上的部署和修改文件,配置文件可以通过scp进行传输
scp zoo.cfg 192.168.130.40:/usr/local/zookeeper-3.8.0/conf 192.168.130.30:/usr/local/zookeeper-3.8.0/conf
去另外两台看一下
都有了,并且内容一致
每台机器都指定对应的节点号
cd /usr/local/zookeeper-3.8.0
mkdir data logs
echo 1 > data/myid
注意:每台都要执行,并且节点号不能相同
启动zookeeper
cd /usr/local/zookeeper-3.8.0/bin
./zkServer.sh start #启动
./zkServer.sh status #查看状态
4.2、Kafka安装配置
下载解压Kafka
#下载kafka
cd /opt
wget http://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgztar zxf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka
修改配置文件
cd /usr/local/kafka/config/
vim server.properties
三台相同设置,但是id号不能一样
添加系统环境变量
vim /etc/profile
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/binsource /etc/profile
启动kafka
cd /usr/local/kafka/config/
kafka-server-start.sh -daemon server.properties
netstat -antp | grep 9092
Kafka命令行操作
创建topic
kafka-topics.sh --create --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 --replication-factor 2 --partitions 3 --topic test--zookeeper:定义 zookeeper 集群服务器地址,如果有多个 IP 地址使用逗号分割,一般使用一个 IP 即可
--replication-factor:定义分区副本数,1 代表单副本,建议为 2
--partitions:定义分区数
--topic:定义 topic 名称
查看当前服务器中的所有topic
kafka-topics.sh --list --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181
查看某个topic的详情
kafka-topics.sh --describe --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181
发布消息
kafka-console-producer.sh --broker-list 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092 --topic test
消费消息
kafka-console-consumer.sh --bootstrap-server 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092 --topic test --from-beginning--from-beginning:会把主题中以往所有的数据都读取出来
修改分区数
kafka-topics.sh --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --alter --topic test --partitions 6
删除topic
kafka-topics.sh --delete --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --topic test
4.3、创建topic
cd /usr/local/kafka/bin
kafka-topics.sh --create --zookeeper \
192.168.130.50:2181,192.168.130.40:2181,192.168.130.30:2181 \
--partitions 3 \
--replication-factor 2 \
--topic test
kafka-topics.sh --describe --zookeeper 192.168.130.50:2181
#查看详情
4.4、测试topic
发布消息
kafka-console-producer.sh --broker-list 192.168.130.50:9092,192.168.130.40:9092,192.168.130.30:9092 --topic test
kafka-console-producer.sh --broker-list 192.168.130.40:9092 --topic test
消费消息
kafka-console-consumer.sh --bootstrap-server 192.168.130.30:9092 --topic test --from-beginning
4.5、配置数据采集层filebeat
定制nginx日志格式
vim /usr/local/nginx/conf/nginx.conf
log_format json '{"@timestamp":"$time_iso8601",'
'"@version":"1",'
'"client":"$remote_addr",'
'"url":"$uri",'
'"status":"$status",'
'"domain":"$host",'
'"host":"$server_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"referer": "$http_referer",'
'"ua": "$http_user_agent"'
'}';
access_log /usr/local/nginx/conf/access.log json;
再重启一下nginx
修改filebeat配置文件
vim /usr/local/filebeat/filebeat.yml
其他不变
这里的path指向位置一定要与上面nginx指定的日志路径一样
启动filebeat
./filebeat -c filebeat.yml &
4.6、在kafka上创建一个话题nginx-es
kafka-topics.sh --create --zookeeper 192.168.130.50:2181,192.168.130.40:2181,192.168.130.30:2181 --replication-factor 1 --partitions 1 --topic nginx-es
修改logstash的配置文件
vim /etc/logstash/conf.d/logstash.conf
systemctl restart logstash
4.7、查看网页认证
ELK+Filebeat+zookeeper+Kafka原理和搭建相关推荐
- zookeeper + kafka集群搭建详解
文章目录 一.消息队列介绍 1.1 为什么需要消息队列 (MO) 1.2 使用消息队列的好处 (1)解耦 (2)可恢复性 (3)缓冲 (4)灵活性 & 峰值处理能力 (5)异步通信很多时候,用 ...
- Zookeeper+Kafka集群搭建
Zookeeper集群搭建 Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群. 1.软件环境 (3台服务器-我的测试) 192.168.30.204 server1 ...
- 关于监控日志中间件(filebeat,zookeeper,kafka,elasticsearch)的安装步骤
filebeat中的filebeat.yml实现的配置信息要素 filebeat.prospectors #用于定义数据原型,检测日志或是发现日志 - input_type: log #指定数据的输入 ...
- Zookeeper+kafka集群搭建,问题(zoo.cfg file is running,it‘s probably not running,option ‘UseCompressedOops‘)
1. 下载Zookeeper 1.1 从Zookeeper官网选择对应版本下载,我这边是3.4.5,如下图. 1.2 将下载的压缩包拉到要安装集群主机的 /usr/local 目录(你也可以进入 /u ...
- 搭建 ELK 集群 kafka filebeat kibana logstash zookeeper elasticsearch
文章目录 一.前置准备 1. 部署总览 2. 技术选型 3. 全局配置 4. 软件下载 5. 操作声明 二.jdk安装 2.1. 上传 2.2. 解压 2.3. 设置环境变量 三.zk集群 3.1. ...
- ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)
ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台 参考:http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为 ...
- ELK+kafka日志系统搭建-实战
日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠 ...
- kafka集群搭建教程(使用自带的zookeeper)
kafka集群搭建教程(使用自带的zookeeper) 一.kafka简介 二.kafka名词解释 三.zookeeper与Kafka 四.kafka集群搭建前准备 1.下载 2.检验jdk 3.系统 ...
- ELK集群+Kafka集群+FileBeat——命运多舛的安装采坑之路
欢迎大家关注我的公众号,添加我为好友! 开始的时候感觉日志监控是比较NB的技术,感觉很神奇,那么多日志,为什么一下子就能够找到自己想要的?后来初步了解到了ELK(ElasticSearch + Log ...
最新文章
- Modern Control
- 司机和售票员问题 信号signal注册一例
- Android【FileInputStream、FileOutputStream---本地文件I/O操作-读写操作模板(btnWrite方法、btnRead方法)】
- 数据库垂直拆分和水平拆分
- 笔记本电脑网络连接显示红叉_物联网设备的网络连接---上篇
- 数字安全控制系统行业调研报告 - 市场现状分析与发展前景预测
- 18华工校赛 小马哥的超级盐水 折半枚举
- 使用安全浏览器将网页保存为pdf的方法步骤
- 计算机WIN7系统网络访问权限设置,win7系统ipv6无网络访问权限如何解决?
- java normalize_Java Path normalize()用法及代码示例
- https证书存在错误该怎么解决
- 网络训练 (总结5)
- 旅行售货员问题及其近似算法(NPC问题)
- 燃烧的远征java(一)-开发环境:JDK1.6+tomcat5.5
- Android Studio 代理问题总结(Gradle代理,模拟器代理)
- Fast Ground Segmentation for 3D LiDAR Point Cloud Based on Jump-Convolution-Process实现
- adobe Adobe Acrobat DC资源下载
- 随笔——基尔霍夫热辐射定律中灰体发射率和吸收率相等的推导逻辑
- 民事诉讼过程中的一些笔记
- oracle ocm认证概述