#zookeeper集群+kafka集群

news2025/1/12 23:31:54

kafka3.0之前是依赖于zookeeper的。

zookeeper是开源,分布式的架构。提供协调服务(Apache项目)

基于观察者模式涉及的分布式服务管理架构。

存储和管理数据。分布式节点上的服务接受观察者的注册。一旦分布式节点上的数据发生变化,由zookeeper负责通知分布式节点上的服务。

互相监督,互相监控,用于大数据分析场景。

zookeeper:分为领导者和追随者 leader follower组成的集群

只要有一半以上的集群存活,zookeeper集群就可以正常工作。适用于安装奇数台的服务集群

主要作用:全局数据一致,每个zookeeper都可以保存一份相同的数据。维护监控服务的数据一致。

数据更新的原子性。要么都成功要么都失败。

实时性,只要有变化,立刻同步。

zookeeper的应用场景:

1.统一命名服务,在分布式的环境下,对所有的应用和服务都进行统一命名

2.统一配置管理,配置文件同步,kafka的配置文件被修改可以快速同步到其他节点。

3.统一集群管理:实时掌握所有节点的状态。

4.服务器动态上下线

5.实现负载均衡,把访问服务器的数据发送到访问最少的服务器客户端的请求

领导者和追随者:

zookeeper的选举机制。

三台服务器为例 A B C

A先启动,发起一次选举,投票给自己,只有一票,不满半数,A的状态是looking

B启动,再发起一次选举,A和B分别投自己一票,交换选举信息,myid,A发现B的myid比A大,A的这一票会转而投给B

A 0 B 2 没有半数以上结果,A B会进入looking B有可能成为leader

C启动 MYID C的myid最大,A和B都会把票投给C,加上C自己的一票

A 0 B 0 C 3

C的状态变为leader,A和B会变为follower

只要leader确定,后续的服务器都是追随者。

只有两种情况会开启选举机制:

1.初始化的情况会产生选举

2.服务器之间和leader丢失了连接状态

leader已存在,建立连接即可

leader不存在,服务器id大的胜出(EPOCH大,直接胜出。EPOCH相同,事务id大的胜出)

EPOCH:每个leader任期的一个代号,没有leader,大家的逻辑地位相同,每投完一

次数据,数据都是递增的。

事务id:表示

服务器的每一次变更

服务器id:用来表示zookeeper集群当中,都有个id,每台机器不重复,和myid保持一致

实验部署

zookeeoer+kafka(2.7.0)

192.168.233.10 ---zookeeper+kafak  20.0.0.10
192.168.233.20 ---zookeeper+kafak
192.168.233.30 ---zookeeper+kafak

2/4G

关闭防火墙
所有服务器
拖入kafak,zookeeper

所有服务器
升级java环境
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

java -version

line 2
tickTime=2000
服务器与客户端的心跳时间(ms)
line 6
initLimit=10
领导者和追随者之间,初始连接时能够容忍的超时时间,最多几次心跳超时

line 10
syncLimit=5
同步超时时间,领导者和追随者之间同步通信超时的时间,超过5*2就会认为follower丢失,移出集群

line15
dataDir=/tmp/zookeeper
保存数据的目录,需要单独创建

line18
clientPort=2181

line15下添加
dataLogDir=/opt/zookeeper/logs

最后一行添加整个集群信息
server.1=192.168.233.10:3188:3288
server.2=192.168.233.20:3188:3288
server.3=192.168.233.30:3188:3288

server.1=192.168.233.10:3188:3288 server.2=192.168.233.20:3188:3288 server.3=192.168.233.30:3188:3288

1:每个zookeeper集群的初始myid。

192.168.233.10:服务器的IP地址

3188:领导者和追随者之间交换信息的端口(内部通信端口)

3288:一旦leader丢失响应,开启选举,3288就是用来进行选举时的服务器通信端口。

根据zoo.cfg里面的目录路径创建路径

输入myid

test1,2,3

编辑脚本

vim /etc/init.d/zookeeper
编辑脚本

#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/opt/zookeeper'
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

wq

chmod +x /etc/init.d/zookeeper

每台服务器都添加
chkconfig --add zookeeper



test1,2,3
service zookeeper start


service zookeeper status
查看谁是leader

消息队列KAFKA

为什么要引入消息队列(MQ),他是一个中间件。负责发消息。在高并发环境下,同步请求来不及处理。来不及处理的请求会形成阻塞。

比如数据库会进行行锁或者表锁。请求线程满了,超标了,会报错:too many connection。导致整个系统雪崩

消息队列的作用: 1.异步处理请求(核心)

允许用户把一个消息放入队列,但是不立即处理,等用户想处理的时候再处理

2.流量消减,应用解耦

耦合:在软件系统当中,修改一个组件需要修改其他组件,高度耦合

低度耦合:修改其中一个组件,对其他组件影响不大,无须修改所有

解耦:只要通信保证,其他的不影响整个集群,可以独立的扩展,修改,降低组件之间的依赖性。

依赖点就是接口约束,通过不同的端口,保证集群通信。

3.可恢复性:

系统当中的有一部分组件消失,不影响整个系统。也就是说在消息队列当中,即使有一个处理消息的进程失败,一旦恢复还可以重写加入到队列当中,继续处理消息。

4.缓冲:

可以控制和优化数据经过系统的时间和速度。解决生产消息和消费消息处理速度不一致的问题。

5.峰值的处理能力:

消息队列在峰值的情况下,能够顶住突发的访问压力。避免专门为了突发情况而对系统进行修改

消息队列的模式

点对点,一对一:消息的生产者发送消息到队列中,消费者从队列中提取消息,消费者提取完之后,队列中被提取的消息将会被移除。后续消费者不能再消费队列当中的消息。消息队列可以有多个消费者,但是一个消息,只能由一个消费者提取。

RABBITMQ

发布订阅模式:一对多,观察者模式。消费者提取数据之后队列当中的数据不会被清除。

生产者发布一个消息到主题。所有消费者都是通过主题获取消息。

主题:topic **

topic类似一个数据流管道,生产者把消息发布到主题。消费者从主题当中订阅数据。主题可以分区,每个分区都有自己的偏移量。

分区---partition**

每个主题都可以分成多个分区。每个分区是数据的有序子集,分区可以允许kafka进行水平扩展,以处理大量数据。

消息在分钟按照偏移量存储,消费者可以独立读取每个分区的数据

偏移量**

每个消息在分区当中唯一的标识。消费者可以通过偏移量来跟踪已读或者未读消息的位置。也可以提交这个偏移量来记录已处理的信息。

消费三种方式: 1.begin,从头开始,获取所有

2.实时获取,我只消费,后续产生的消息

3.指定偏移量消费,代码实现

生产者

生产者把数据发送kafka的主题当中,负责写入消息。

消费者

从主题当中读取数据,消费者可以是一个也可以是多个。每个消费者有一个唯一的消费者ID,Kafka通过消费者实现负载均衡和容错性。

经纪人---Broker

每个Kafka节点都有一个borker,每个负责一台Kafka服务器,id唯一,存储主题分区当中数据,处理生产和消费者的请求。

维护元数据(zookeeper)

zookeeper:zookeeper负责保存元数据,元数据就是topic的相关信息(发在哪台主机上,指定了多少分区,以及副本数,偏移量)

zookeeper自建一个主题:_consumer_offsets

3.0之后不依赖zookeeper的核心。元数据由Kafka节点自己管理。

Kafka的工作流程

生产者写入topic的数据是持久化的,默认7小时

至少一次语义:只要消费者进入,确保消息至少被消费一次

实验部署

test1,2,3
cd /opt
tar -xf kafka
mv kafka_2,13..   kafka

设置环境变量
vim /etc/profile
最后插入
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile

cd kafka
cd config/
ls

server.properties是主配置文件

server.properties是主配置文件

先备份

test1 2 3    每台主机配置有些许不同
vim server.properties

line 21  60  123

line 21
broker.id=1
//同时也是leader的id,三台主机,不重复即可

line 28
如果用broker进行修改,该行可以不改

line 42
num.network.thread=3
处理网络的线程数量,默认即可

line 46
num.io.thread=8
处理磁盘的io线程数量,这个值一定要比硬盘数大

line 50
socket.send.buffer.bytes=102400
发送套接字的缓存大小

line 54
socket.receive.buffer.bytes=102400
接受者的接受套接字缓冲区大小

line58
socket.request.max.bytes=104857600
请求套接字的缓冲区大小

line 65
log.dirs=/var/log/kafka

line 70
num.partitions=1
在此Kafka服务器上创建topic,默认分区数。如果指定了,这个配置无效了。

line75
num.recovery.thread.per.data.dir=1
用来恢复,回收,清理data下的数据的线程数量。Kafka默认不允许删除主题。

line110(103)
log.retention.hours=168
生产者发布的数据文件在主题当中保存的时间,单位-小时

line130(123)
zookeeper.connect=192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181
//指定zookeeper集群

wq
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

test1,2,3

设置Kafka启动脚本

#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/opt/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

wq

chmod +x /etc/init.d/kafka
chkconfig --add kafka
service kafka start

netstat -antp | grep 9092

test2--创建主题

kafka所有命令都在bin下,所以执行命令都得去bin目录下执行

cd /opt/kafka/bin/

kafka-topics.sh --create --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.60:2181 --replication-factor 2 --partitions 3 --topic test1


--replication-factor 2:创建的副本数,副本的作用就是冗余

创建主题成功

1.在Kafka的bin目录下,是所有kafka可执行命令文件

2.--zookeeper指定的是zookeeper的地址和端口,保存kafka的元数据

3.--replication-factor 2 定义每个分区的副本数

4.partitions 3 指定主题的分区数

 5.--topic test1 指定主题的名称

Partition:分区编号

Leader:每个分区都有一个领导者(Leader),领导者负责处理分区的读写操作。 在上述输出中,领导者的编号分别为 3、1、3。

Replicas:每个分区可以有多个副本(Replicas),用于提供冗余和容错性。 在上述输出中,Replica 3、1、2 分别对应不同的 Kafka broker。

Isr:ISR(In-Sync Replicas)表示当前与领导者保持同步的副本。 ISR 3、1分别表示与领导者同步的副本。

test1,2,3
做映射
20.0.0.10 test1
20.0.0.20 test2
20.0.0.60 test3

发布消息

bin目录下
test2
kafka-console-producer.sh --broker-list 20.0.0.10:9092,20.0.0.20:9092,20.0.0.60:9092 --topic test1

kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.60:9092 --topic test2  --from-beginning

test2

创建主题必须要创建分区,分区一定要给副本数

kafka-topics.sh --create --zookeeper 192.168.233.20:2181 --replication-factor 1 --partitions 1 --topic gq1


test3
kafka-topics.sh --create --zookeeper 192.168.233.20:2181 --replication-factor 1 --partitions 1 --topic gq2


test1
kafka-console-consumer.sh --bootstrap-server 192.168.233.20:9092 --topic gq1

kafka-console-consumer.sh --bootstrap-server 192.168.233.20:9092 --topic gq2

test2
发起
kafka-console-producer.sh --broker-list 192.168.233.20:9092 -topic gq1

修改分区数

kafka-topics.sh --zookeeper 192.168.233.20:2181 --alter --topic gq1 --partitions 3

test2
kafka-topics.sh --describe --zookeeper 192.168.233.20:2181 --alter --topic gq1 

kafka-topics.sh --delete --zookeeper 192.168.233.20:2181 --topic gq1

总结:

1.zookeeper:主要是分布式,观察者模式。统一各个服务器节点的数据。

在Kafka当中,他就是收集保存Kafka的元数据。

2.kafka消息队列,订阅发布模式

RABBIT MQ 轻量级

KAFKA 速度快,占用资源

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

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

相关文章

【EI会议征稿】第七届机械、电气与材料应用国际学术会议(MEMA 2024)

第七届机械、电气与材料应用国际学术会议(MEMA 2024) 2024年第七届机械、电气与材料应用国际学术会议 (MEMA 2024) 由沈阳理工大学主办,将于2024年2月23-25日在中国长沙举行。本会议将围绕“机械、电气与材料应用”的最新研究领域&#xff…

数据可视化工具APITable:实现强大的多维表格功能并随时随地远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

TiDB专题---1、TiDB简介和特性

什么是TiDB TiDB 是一个分布式 NewSQL 数据库,它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 TiDB 是 PingCAP 公司自主设计、研发…

Mendix UI页面布局以案说法

一、前言 试着回想最近一次与公司网站交互的情况,访问了多个页面,并且可能使用了某些功能。有可能基于这种互动,可以向某人介绍公司的一些主要功能。其中一些可能是更肤浅的东西,比如他们的标志是什么样子或他们的主要配色方案是…

【WebSocket】通信协议基于 node 的简单实践和心跳机制和断线重连的实现

前后端 WebSocket 连接 阮一峰大佬 WebSocket 技术博客 H5 中提供的 WebSocket 协议是基于 TCP 的全双工传输协议。它属于应用层协议,并复用 HTTP 的握手通道。它只需要一次握手就可以创建持久性的连接。 那么什么是全双工呢? 全双工是计算机网络中的…

Spring Cloud 原理(第一节)

一、百度百科 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spri…

力扣611题 有效三角形的个数 双指针算法

611. 有效三角形的个数 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输⼊: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使⽤第⼀个 2) 2,3,4 (使⽤第⼆个 2) 2,2,3 ⽰例 2: 输⼊: nums [4,2,3,4] 输出: 4 解…

我们需要什么样的HA

作为DBA,大家在运维数据库的时候都会遇到 数据库发生 Failover /Switchover 切换的场景。数据库发生切换导致业务连续性受损,少则分钟级,多则小时级别。(最近互联网的故障比较多)。 本文 基于 MySQL 数据库架构场景来分析我们在遇到数据库 HA 切换时是系…

Vue的Nuxt项目部署在服务器,pm2动态部署和npm run build静态部署

Nuxt项目的部署有两种方式,一种是静态部署,一种是动态部署 静态部署需要关闭项目的ssr功能,动态部署则不需关闭,所以怎么部署项目就看你用不用ssr功能了 。 1.静态部署 先说静态部署,很简单,只需要在nuxt…

【自动化测试】pytest 用例执行中print日志实时输出

author: jwensh date: 20231130 pycharm 中 pytest 用例执行中 print 日志 standout 实时命令行输出 使用场景 在进行 websocket 接口进行测试的时候,希望有一个 case 是一直执行并接受接口返回的数据 def on_message(ws, message):message json.loads(message)…

OSU(Optical Service Unit,光业务单元)简介

文章目录 应用场景和功能OSU关键技术基于PB的帧结构划分方式分组业务映射到OSU带宽无损调整机制 标准进展OSU构建电力系统全光底座,赋能新型电力系统 光传送网(OTN)具有大带宽、硬管道、多业务承载能力、电信级的OAM机制等技术优势&#xff0…

macOS本地调试k8s源码

目录 准备工作创建集群注意点1. kubeconfig未正常加载2. container runtime is not running3. The connection to the server 172.16.190.132:6443 was refused - did you specify the right host or port?4. 集群重置5.加入子节点 代码调试 准备工作 apple m1芯片 安装vmwa…

【JavaScript】3.4 JavaScript在现代前端开发中的应用

文章目录 1. 用户交互2. 动态内容3. 前端路由4. API 请求总结 JavaScript 是现代前端开发的核心。无论是交互效果,还是复杂的前端应用,JavaScript 都发挥着关键作用。在本章节中,我们将探讨 JavaScript 在现代前端开发中的应用,包…

Docker 镜像及其命令

文章目录 镜像Docker 镜像加载原理联合文件系统bootfs和rootfs镜像分层 镜像分层的优势容器层常用命令 镜像 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境&#xff…

外贸独立站建站详细操作流程一览,跨境电商卖家营销必看!

独立站是一个独立的网站,包括有独立的服务器,独立的网站程序以及网站域名。关于独立站 的优势已经说了很多,本文就不再细谈,想了解的小伙伴可以自行查找之前发布的文章观看。 今天就来说说搭建独立站的详细步骤都有哪些&#xff1…

word模板导出word文件

前期准备工作word模板 右键字段如果无编辑域 ctrlF9 一下&#xff0c;然后再右键 wps 直接 ctrlF9 会变成编辑域 pom.xml所需依赖 <dependencies> <!--word 依赖--> <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId…

R语言30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

深度学习(一):Pytorch之YOLOv8目标检测

1.YOLOv8 2.模型详解 2.1模型结构设计 和YOLOv5对比&#xff1a; 主要的模块&#xff1a; ConvSPPFBottleneckConcatUpsampleC2f Backbone ----->Neck------>head Backdone 1.第一个卷积层的 kernel 从 6x6 变成了 3x3 2. 所有的 C3 模块换成 C2f&#xff0c;可以发现…

AIGC实战——生成对抗网络(Generative Adversarial Network)

AIGC实战——生成对抗网络 0. 前言1. 生成对抗网络1.1 生成对抗网络核心思想1.2 深度卷积生成对抗网络 2. 数据集分析3. 构建深度卷积生成对抗网络3.1 判别器3.2 生成器3.3 DCGAN 模型训练 4. GAN 训练技巧4.1 判别器强于生成器4.2 生成器强于判别器4.3 信息量不足4.4 超参数 小…

机器人AGV小车避障传感器测距

一、A22超声波传感器 该模块是基于机器人自动控制应用而设计的超声波避障传感器&#xff0c;针对目前市场上对于超声波传感器模组盲区大、测量角度大、响应时间长、安装适配性差等问题而着重设计。 具备了盲区小、测量角度小、响应时间短、过滤同频干扰、体积小、安装适配性高…