ELK日志分析系统+zookeeper

news2025/1/31 2:46:34

ELK日志分析系统+zookeeper

    • 一、zookeeper简介
      • 1、zookeeper概念
      • 2、zookeeper数据结构
    • 二、zookeeper工作机制
      • 1、zookeeper特点
      • 2、zookeeper应用场景
    • 三、zookeeper集群部署
      • 1、安装前先关闭防火墙 核心防护
      • 2、安装JDK
      • 3、安装zookeeper
      • 4、修改配置文件
      • 5、创建数据目录和日志目录(三台机子都需要创建)
      • 6、配置Zookeeper启动脚本
    • 四、消息队列概述
      • 1、为什么要使用消息队列
      • 2、消息队列好处
    • 五、Kafka简介
      • 1、Kafka概念
      • 2、Kafka定义
      • 3、Kafka特性
      • 4、Kafka应用场景
      • 5、Kafka消息队列通信的模式
      • 6、Kafka架构原理
    • 六、部署Kafka
      • 1、安装Kafka
      • 2、修改配置文件
      • 3、修改环境变量
      • 4、配置Kafka脚本
      • 5、分别启动Kafka,并创建topic

一、zookeeper简介

1、zookeeper概念

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。

Zookeeper服务自身组成一个集群,2n+1个(奇数)服务允许n个失效,集群内一半以上机器可用,Zookeeper就可用。

假设 3台机器组成的集群,可以有允许一台失效,如果有2台失效,这个集群就不可用,1<1.5,一般的搭建zookeeper集群时,以奇数台机器来搭建。目的:是为了提高容错能允许多损失一台。

2、zookeeper数据结构

ZooKeeper数据模型的结构与Linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

二、zookeeper工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说 Zookeeper =文件系统+通知机制。
在这里插入图片描述

1、zookeeper特点

(1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

(2)Zookeepe集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行,即先进先出。

(5)数据更新原子性,一次数据更新要么成功,要么失败。

(6)实时性,在一定时间范围内,Client能读到最新数据。

2、zookeeper应用场景

提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。

统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP不容易记住,而域名容易记住。

统一配置管理
(1)分布式环境下,配置文件同步非常常见。一般要求一个集群中,所有节点的配置信息是一致的,比如Kafka集群。对配置文件修改后,希望能够快速同步到各个节点上。

(2)配置管理可交由ZooKeeper实现。可将配置信息写入ZooKeeper上的一个Znode。各个客户端服务器监听这个Znode。一旦 Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。

统一集群管理

(1)分布式环境中,实时掌握每个节点的状态是必要的。可根据节点实时状态做出一些调整。

(2)ZooKeeper可以实现实时监控节点状态变化。可将节点信息写入ZooKeeper上的一个ZNode。监听这个ZNode可获取它的实时状态变化。

服务器动态上下线

客户端能实时洞察到服务器上下线的变化。

软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。

三、zookeeper集群部署

官方下载地址:https://archive.apache.org/dist/zookeeper/

实验环境

准备3台机器做zookeeper集群

192.168.10.130

192.168.10.132

192.168.10.133

1、安装前先关闭防火墙 核心防护

[root@node1 ~]#setenforce 0
setenforce: SELinux is disabled
[root@node1 ~]#systemctl stop firewalld

2、安装JDK

[root@node1 ~]#yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

在这里插入图片描述

3、安装zookeeper

[root@node1 ~]#cd /opt/
[root@node1 opt]#tar -zxf apache-zookeeper-3.5.7-bin.tar.gz
[root@node1 opt]#mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

在这里插入图片描述

4、修改配置文件

[root@node1 opt]#cd /usr/local/zookeeper-3.5.7/conf/
[root@node1 conf]#cp zoo_sample.cfg zoo.cfg
[root@node1 conf]#vim zoo.cfg
#保存退出

在这里插入图片描述
在这里插入图片描述

5、创建数据目录和日志目录(三台机子都需要创建)

[root@node1 opt]#mkdir /usr/local/zookeeper-3.5.7/data
[root@node1 opt]#mkdir /usr/local/zookeeper-3.5.7/logs
[root@node1 opt]#

在这里插入图片描述

DataDir指定的目录下创建一个 myid 的文件(三台都需要创建)

[root@node1 opt]#echo 1 > /usr/local/zookeeper-3.5.7/data/myid
[root@node2 opt]#echo 2 > /usr/local/zookeeper-3.5.7/data/myid
[root@node3 opt]#echo 3 > /usr/local/zookeeper-3.5.7/data/myid

在这里插入图片描述

6、配置Zookeeper启动脚本

[root@node1 opt]#vim /etc/init.d/zookeeper

#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
	echo "---------- zookeeper 启动 ------------"
	$ZK_HOME/bin/zkServer.sh start
;;
stop)
	echo "---------- zookeeper 停止 ------------"
	$ZK_HOME/bin/zkServer.sh stop
;;
restart)
	echo "---------- zookeeper 重启 ------------"
	$ZK_HOME/bin/zkServer.sh restart
;;
status)
	echo "---------- zookeeper 状态 ------------"
	$ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac

[root@node1 opt]#chmod  +x /etc/init.d/zookeeper
[root@node1 opt]#chkconfig --add zookeeper
[root@node1 opt]#service zookeeper start  #切记三台机子都配置完脚本再启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、消息队列概述

1、为什么要使用消息队列

主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。
我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。
当前比较常见的 MQ 中间件有:ActiveMQ、RabbitMQ、RocketMQ、Kafka 等。

2、消息队列好处

(1)解耦
允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

(2)可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

(3)缓冲
有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

(4)灵活性 & 峰值处理能力
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

(5)异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
在这里插入图片描述同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。

异步就相当于当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情。这样即节约时间,也提高了效率。

五、Kafka简介

1、Kafka概念

Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper 协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于 hadoop 的批处理系统、低延迟的实时系统、Spark/Flink 流式处理引擎,nginx 访问日志,消息服务等等,用 scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。

2、Kafka定义

kafka 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域。

3、Kafka特性

●高吞吐量、低延迟
Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。

●可扩展性
kafka 集群支持热扩展

●持久性、可靠性
消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

●容错性
允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)

●高并发
支持数千个客户端同时读写

4、Kafka应用场景

日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

流式处理:比如spark streaming和storm

5、Kafka消息队列通信的模式

(1)点对点模式,一对一消费者主动拉取数据,消息收到后消息清除
在这里插入图片描述
消息生产者生产消息发送到消息队列中,然后消息消费者从消息队列中取出并且消费消息。
消息被消费以后,消息队列中不再有存储,所以消息消费者不可能消费到已经被消费的消息。
消息队列支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
(2)发布订阅模式,一对多,又叫观察者模式,消费者消费数据之后不会清除消息
在这里插入图片描述
消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。
和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
发布/订阅模式是定义对象间一种一对多的依赖关系,使得每当一个对象(目标对象)的状态发生改变,
则所有依赖于它的对象(观察者对象)都会得到通知并自动更新。

6、Kafka架构原理

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展能力。
在这里插入图片描述
需要注意的一点是,消息写入leader后,follower是主动的去leader进行同步的!producer采用push模式将数据发布到broker,每条消息追加到分区中,顺序写入磁盘,所以保证同一分区内的数据是有序的!
分区的主要目的是:
方便扩展:因为一个topic可以有多个partition,所以我们可以通过扩展机器去轻松的应对日益增长的数据量。
提高并发:以partition为读写单位,可以多个消费者同时消费数据,提高了消息的处理效率。

六、部署Kafka

官方下载地址:http://kafka.apache.org/downloads.html
实验环境
192.168.10.130
192.168.10.132
192.168.10.133

1、安装Kafka

[root@node1 opt]#tar zxf kafka_2.13-2.7.1.tgz 
[root@node1 opt]#mv kafka_2.13-2.7.1 /usr/local/kafka

在这里插入图片描述

2、修改配置文件

[root@node1 opt]#cd /usr/local/kafka/config/   #切换到指定目录
[root@node1 config]#cp server.properties{,.bak}  #备份
[root@node1 config]#vim server.properties
#改完保存退出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、修改环境变量

[root@node1 config]#vim /etc/profile

export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[root@node1 config]#source  /etc/profile  

在这里插入图片描述

4、配置Kafka脚本

[root@node1 config]#vim /etc/init.d/kafka
#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
	echo "---------- Kafka 启动 ------------"
	${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
	echo "---------- Kafka 停止 ------------"
	${KAFKA_HOME}/bin/kafka-server-stop.sh
;;
restart)
	$0 stop
	$0 start
;;
status)
	echo "---------- Kafka 状态 ------------"
	count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
	if [ "$count" -eq 0 ];then
        echo "kafka is not running"
    else
        echo "kafka is running"
    fi
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac

[root@node1 config]#chmod +x /etc/init.d/kafka 
[root@node1 config]#chkconfig --add kafka  #设置开机自启

在这里插入图片描述

5、分别启动Kafka,并创建topic

[root@node1 config]#service kafka start 
[root@node1 config]#kafka-topics.sh --create --zookeeper 192.168.10.130:2181,192.168.10.132:2181,192.168.10.133:2181 --replication-factor 2 --partitions 3 --topic test

在这里插入图片描述
在这里插入图片描述
测试topic

[root@node1 config]#kafka-console-producer.sh --broker-list 192.168.10.130:9092,192.168.10.132:9092,192.168.10.133:9092  --topic test  #发布消息

[root@node2 config]# kafka-console-consumer.sh --bootstrap-server 192.168.10.130:9092,192.168.10.132:9092,192.168.10.133:9092 --topic test --from-beginning
 #消费消息
 
#查看当前服务器中的所有 topic
kafka-topics.sh --list --zookeeper 192.168.10.130:2181,192.168.10.132:2181,192.168.10.133:2181
 
#查看某个 topic 的详情
kafka-topics.sh  --describe --zookeeper    192.168.10.130:2181,192.168.10.132:2181,192.168.10.133:2181

#修改分区数
kafka-topics.sh --zookeeper 192.168.10.130:2181,192.168.10.132:2181,192.168.10.133:2181 --alter --topic test --partitions 6

#删除 topic
kafka-topics.sh --delete --zookeeper 192.168.10.130:2181,192.168.10.132:2181,192.168.10.133:2181 --topic test

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE-网络原理之UDP协议

目录UDP报文结构UDP的特点无连接不可靠面向数据报缓冲区基于UDP的应用层协议UDP报文结构 报头大小为8个字节. 16位源端口号与16位目的端口号: 16个比特位可表示65536个端口号,分别为0-65535,其中1-1023为为专属端口号,用来为一些知名服务器提供服务,例如: HTTP服务器专属端口号…

【CSS】课程网站 网格商品展示 模块制作 ③ ( 清除浮动需求 | 没有设置高度的盒子且内部设置了浮动 | 使用双伪元素清除浮动 )

文章目录一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 )二、清除浮动代码示例一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 ) 如果盒子没有设置高度 , 并且盒子中还设置了浮动 , 如上一篇博客 【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒…

溯源反制(windows)

痛点&#xff1a; windows服务器被恶意入侵出现遭受挖矿&#xff0c;在没有专业的安全溯源反制的工具如何排查系统异常文件精准找出异常程序呢&#xff1f; 这样的吗 使用开源火绒、后门工具、D_盾_web查杀工具、360安全卫士进行全局查杀搜寻异常文件程序。 在应急响应中&am…

SpringBoot默认包扫描机制与默认配置文件

文章目录一、SpringBoot默认包扫描机制 - 示例二、SpringBoot默认扫描包机制 - 原理三、SpringBoot手动扫描包机制 - 原理&示例四、ComponentScan与MapperScan五、SpringBoot默认配置文件一、SpringBoot默认包扫描机制 - 示例 默认情况下&#xff0c;扫描启动类同级及其子…

护眼灯到底有没有用?盘点口碑销量好的护眼台灯

有一定的护眼作用。很多人认为护眼灯是智商税&#xff0c;想法并不正确&#xff0c;市面上品质好的护眼灯&#xff0c;光线是通过特殊处理过的&#xff0c;色温、亮度、光线均匀度、显色性都贴合人眼&#xff0c;并且能够护眼的效果。 我们在挑选护眼灯时&#xff0c;在室内环…

【MyBatis Plus】003 -- 配置(基本、进阶、DB策略) 条件构造器

目录 4、配置 4.1 基本配置 4.1.1 configLocation &#xff08;MyBatis 配置文件位置&#xff09; 4.1.2 mapperLocations&#xff08;MyBatis Mapper 所对应的 XML 文件位置&#xff09; 4.1.3 typeAliasesPackage &#xff08;别名包扫描路径&#xff09; 4.2 进阶配置 4.2.1…

代码随想录算法训练营第五十七天 | 647. 回文子串、516. 最长回文子序列、动态规划总结

647. 回文子串 动规五部曲 1、确定dp数组&#xff08;dp table&#xff09;以及下标的含义 在判断字符串S是否为回文时&#xff0c;如果知道 s[1]&#xff0c;s[2]&#xff0c;s[3] 这个子串是回文的&#xff0c;那么只需要比较 s[0]和s[4]这两个元素是否相同&#xff0c;如果…

NodeJS Cluster模块基础教程

Cluster简介 默认情况下&#xff0c;Node.js不会利用所有的CPU&#xff0c;即使机器有多个CPU。一旦这个进程崩掉&#xff0c;那么整个 web 服务就崩掉了。 应用部署到多核服务器时&#xff0c;为了充分利用多核 CPU 资源一般启动多个 NodeJS 进程提供服务&#xff0c;这时就…

【java】面向对象的编程基础

文章目录面向对象的编程基础定义方法重载执行顺序静态变量和方法加载顺序包和访问控制类的封装object类方法重写抽象类接口枚举类面向对象的编程基础 定义 public class person { String name; int age; char sex; person(String name,int age,char sex) {this.ageage;this.…

【华为OD机试】1043 - 从单向链表中删除指定值的节点

文章目录一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1&#x1f538;样例2二、代码参考作者&#xff1a;KJ.JK&#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &am…

计算机网络笔记(横向)

该笔记也是我考研期间做的整理。一般网上的笔记是按照章节纪录的&#xff0c;我是按照知识点分类纪录的&#xff0c;大纲如下&#xff1a; 文章目录1. 各报文1.1 各报文头部详解1.2 相关口诀2. 各协议2.1 各应用层协议使用的传输层协议与端口2.2 各协议的过程2.2.1 数据链路层的…

零死角玩转stm32中级篇2-IIC总线

本篇博文目录:一.IIC基础知识1.什么是IIC总线2.IIC总线和串口有什么区别3.IIC总线是怎么实现多机通信4.仲裁是什么5.如果当前有一个从机进行了IIC通信又来了一个优先级高的从机&#xff0c;这时会打断前一个通信吗?6.IIC是怎么保证地址的唯一性7.在IIC总线协议中&#xff0c;规…

走进小程序【六】微信小程序架构之【视图层】万字详解

文章目录&#x1f31f;前言&#x1f31f;小程序架构&#x1f31f;视图层 View&#x1f31f;WXML&#x1f31f;数据绑定&#x1f31f;列表渲染&#x1f31f;条件渲染&#x1f31f;模板&#x1f31f;WXSS&#x1f31f;尺寸单位&#x1f31f;样式导入&#x1f31f;内联样式&#x…

VIM 编辑器使用教程

我们如果要在终端模式下进行文本编辑或者修改文件就可以使用 VI/VIM 编辑器&#xff0c;Ubuntu 自带了 VI 编辑器&#xff0c;但是 VI 编辑器对于习惯了 Windows 下进行开发的人来说不方便&#xff0c;比如竟然 不能使用键盘上的上下左右键调整光标位置。因此我推荐大家使用 V…

PADS-按键、蜂鸣器、继电器PCB封装设计

1 按键PCB封装设计 1.1 查看元件手册, 得知焊盘尺寸&#xff0c;同时需要观察按键&#xff0c;用丝印来进行表示。 1.2 进入PADS-Layout 无模命令UMM G0.254 GD0.254进行设计 放置一个表贴端点&#xff0c;更改矩形尺寸&#xff0c;同时计算与原点的距离&#xff0c;这里我们按…

流量整形(GTS和LR)

Generic Traffic Shaping通用流量整形 通用流量整形(简称GTS)可以对不规则或不符合预定流量特性的流量进行整形,以保证网络上下游之间的带宽匹配,避免拥塞发生。 GTS与CAR一样,都采用了令牌桶技术来控制流量。GTS与CAR的主要区别在于:利用CAR进行报文流量控制时,…

DFIG控制7:不平衡电网下的转子侧控制

DFIG控制7&#xff1a;不平衡电网下的转子侧控制。主要是加入了转子侧的电流负序分量控制器。 本文基于教程的第7部分&#xff1a; DFIM Tutorial 7 - Asymmetrical Voltage Dips Analysis in DFIG based Wind Turbines 控制策略简介 来自&#xff1a; H. Abu-Rub, M. Malin…

【Java实现】约瑟夫问题的Java代码实现

约瑟夫问题&#xff08;Josephus Problem&#xff09;是一个经典的数学问题&#xff0c;描述了一群人围成一圈报数&#xff0c;每报到第几个人就会被杀死&#xff0c;直到最后只剩下一个人。 1&#xff09;设编号为 1&#xff0c;2&#xff0c;3 ... n 的 n 个人围坐一圈。 2&…

MySQL之数据类型

目录 一 数值类型 1 int类型&#xff0c;以tinyint为例 范围&#xff1a; 越界问题&#xff1a; 验证&#xff1a; 2 bit&#xff08;位&#xff09; 应用&#xff1a; 显示问题&#xff1a; 3 小数 1 float[(M,D)] [unsigned] 范围&#xff1a; 2 decimal 精度问…

TCP分包和粘包

文章目录TCP分包和粘包TCP分包TCP 粘包分包和粘包解决方案&#xff1a;TCP分包和粘包 TCP分包 场景&#xff1a;发送方发送字符串”helloworld”&#xff0c;接收方却分别接收到了两个数据包&#xff1a;字符串”hello”和”world”发送端发送了数量较多的数据&#xff0c;接…