zookeeper集群(很少用)+kafka集群(常用)

一、zookeeper

zookeeper+kafka(2.7.0版本)

kafka(3.4.1版本)不依赖于zookeeper

1、定义:zookeeper开源,分布式架构,提供协调服务(Apache项目),基于观察者模式涉及的分布式服务管理架构。作用:存储和管理数据,分布式节点上的服务接受观察者的注册,一旦分布式节点上的数据发生变化,由zookeeper来负责通知分布式节点上的服务

2、特点:zookeeper分为领导者(leader)和追随者(follower)。只要有一般以上的集群存活,zookeeper集群就可以正常工作,适用于安装奇数台的服务器集群;全局数据一致,每个zookeeper节点都保存相同的数据

3、主要作用

(1)维护监控服务器的数据一致,每个zookeeper节点都保存相同的数据;

(2)数据更新的原子性,要么全成功,要么全失败;

(3)实时性,只要有变化,立刻同步

4、应用场景(记)

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

(2)统一配置管理(配置文件同步):假设kafka的配置文件被修改,可以快速同步到其他节点

(3)统一集群管理★★★:实时掌握所有节点的状态

(4)服务器动态上下线

(5)实现服务在均衡:将访问服务器的数据发送到访问最少的服务器,来处理客户端的请求

5、选举机制

以三台服务器为例:A B C

第一步:A先启动,发起第一次选举,投票给自己,只有1票,不满足半数,此时A是looking状态

第二步:B启动,再发起一次选举,A和B分别投自己一票,交换选票信息,A发现B的myid比自己大,A的这1票会转投给B,此时B2票,A1票,还是不满足半数,A和B都是looking状态

B可能成为leader,C直接成为follower,如果B没有成为leader,那么执行第三步

特殊情况:

①leader已存在,建立连接即可

②leader不存在,服务器ID大的胜出

服务器ID:zookeeper集群中的机器都有一个ID,和myid保持一致

③epoch大,直接胜出

epoch:每个leader任期的代号,如果没有leader代号,大家的逻辑地位相同,但是每投完一次之后,数据递增

④epoch相同,事务ID大的胜出

事务ID:用来标识服务器的每一次变更,每变更一次,事务ID变化一次

第三步:C启动,若C的myid最大,A和B都会把票投给C,此时A—0票,B—0票,C—3票,C的状态变为leader,A和B变为follower

只有leader确定,后续的服务器都是追随者,无论myid大小

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

①初始化的情况下产生选举

②服务器之间和leader丢失连接状态

二、消息队列kafka(重要)

1、为什么要引入消息队列(MQ)?

kafka是一个中间件,负责发消息。在高并发环境下,同步请求来不及处理,会形成阻塞。比如,数据库会形成表锁或行锁。请求线程超标,会出现错误too many connection,整个系统崩溃(系统雪崩)

客户端————kafka————服务端

2、消息队列的作用

(1)异步处理请求(留一个延迟时间)

(2)流量削峰

(3)应用解耦

4可恢复性

5缓冲机制

(6)峰值处理能力

(7)异步通信★★★

2、消息队列的模式

(1)点对点模式(一对一模式)

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

(2)发布和订阅模式(一对多、观察者模式)

生产者发布一个消息到主题(topic)中,所有消费者都是通过主题获取消息,消费者提取数据后,队列中的消息不会被移除

主题:topic,类似于一个数据流管道,生产者把消息发布到主题,消费者从主题中订阅数据(获取数据),每个主题可以分成多个分区,每个分区有自己的偏移量。kafka默认不允许删除主题(可以理解成微信群)

分区:partition,每个主题可以分成多个分区,每个分区是数据有序子集,分区可以允许kafka进行水平拓展,以处理大量数据,消息在分区中按照偏移量存储,消费者可以独立读取每个分区的数据【人为创建】(可以理解成备份)

偏移量:是每个消息在分区中的唯一标识,消费者通过偏移量来跟踪、获取、已读、未读消息的位置;也可以通过提交偏移量记录已处理的信息——指示消费者到底要获取哪个位置的数据(可以理解成微信群中的聊天时间)

分区数量越多,存储数据越多,处理并发能力越强

获取消息的两种方式:

①begin:从头开始获取所有【常用】

②实时获取,只消费后续产生的消息【常用】

③指定偏移量消费【代码实现】

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

消费者:consumer,从主题中读取数据,消费者是一个或多个,每个消费者都有一个唯一的消费者组ID,kafka通过消费者实现负载均衡和容错

3、kafka的工作流程

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

三、zookeeper+kafka实验

实验目的:监控所有服务器上的数据一致

实验条件:

主机名

IP地址

组件

硬件条件

(最少)

test1

20.0.0.10

zookeeper+kafka(2.7.0版本)

2核4G

test2

20.0.0.20

zookeeper+kafka(2.7.0版本)

2核4G

test3

20.0.0.30

zookeeper+kafka(2.7.0版本)

2核4G

实验步骤:

1、部署zookeeper【所有服务器】

(1)升级java环境

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

(2)解zookeeper安装包,改名

(3)修改zookeeper配置文件

1,2,3表示每个zookeeper集群的初始myid【自定义】

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

3288表示一旦leader丢失响应,重新开启选举的端口(选举端口—互相通知选票信息的端口)

(4)创建目录【已在配置文件中自定义】

(5)给集群中的每台服务器分配myid

test1

test2

test3

(6)启动脚本【所有服务器】

1)创建脚本文件

2)赋权脚本文件

chmod +x /etc/init.d/zookeeper

3)添加到系统服务中,让系统识别

chkconfig --add zookeeper

4)依次启动zookeeper,查看leader和follower状态

启动service zookeeper start

查看service zookeeper status

①第一次先启动test1

②第二次启动test2

此时再次查看test1的状态,选举完成后test1自动变为follower

③第三次启动test3

选举完成,2票大于1票,即便test3启动,leader也不会改变

2、部署kafka【所有服务器】

(1)升级java环境

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

(2)解kafka压缩包

(3)声明kafka环境变量

添加

export KAFKA_HOME=/opt/kafka

export PATH=$PATH:$KAFKA_HOME/bin

(4)修改kafka的配置文件

test1

test2

test3

(5)创建kafka的启动脚本【所有服务器】

①赋权脚本chmod +x /etc/init.d/kafka

②添加系统命令,让系统识别chkconfig --add kafka

③启动kafka

kafka的默认端口号9092

(6)主机映射

【注意:在kafka的bin目录下创建,bin是kafka所有可执行命令文件】

(7)创建主题topic

【在任意一台服务器上创建主题即可,所有服务器都可使用这个主题】

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

①查看所有主题topic详情

②查看指定主题topic详情

(8)发布消息

test1发布

(9)消费(订阅)

test2消费

①实时同步

②begin同步

test3也能同步获取消息

(10)不同主机订阅不同主题

①test3创建主题mmm

test3创建主题nnn

②test2在mmm主题上发布消息

test1订阅主题mmm

③test2在nnn主题上发布消息

test1订阅mmm

结论:主题之间互相隔离

(11)修改分区数

(12)删除主题【kafka机制默认不能删除主题】

(13)查看内部保存的元数据信息

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

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

相关文章

“通识+产业”大模型,“Alaya元识”的赋能路径

2023年11月,国家工业信息安全发展研究中心、工信部电子知识产权中心发布的《中国AI大模型创新和专利技术分析报告》显示,我国大模型专利申请总数已突破4万余件,大模型相关领域的创新日益活跃。 相对于“能做诗会画画”的针对to C市场的大模型…

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(三)

文章目录 第六章 通过认证帧定时实现VulCAN的非once同步6.1 问题陈述6.2 方法概述6.3 动机和缺点6.3.1 认证帧定时隐蔽通信6.3.2 VulCAN的梵蒂冈后端Nonce同步的应用 6.4 设计与实现6.4.1发送方6.4.2 接收方6.4.3 设计参数配置6.4.4 实现 6.5 安全注意事项6.5.1 系统模型6.5.2攻…

Python (十五) 面向对象之多继承问题

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

【AI数字人-论文】Wav2lip论文解读

文章目录 Wav2lip前言Lip-sync Expert DiscriminatorGeneratorvisual quality discriminator生成器总损失函数 论文 Wav2lip 前言 Wav2Lip 是第一个通用说话者的模型,可生成与真实同步视频相匹配的口型同步精度的视频,它的核心架构概括为“通过向训练有…

CLIPTokenizer.from_pretrained本地加载

以"openai/clip-vit-large-patch14"为例,原代码为: self.tokenizer CLIPTokenizer.from_pretrained(“openai/clip-vit-large-patch14”) self.transformer CLIPTextModel.from_pretrained(“openai/clip-vit-large-patch14”) 但我连不到外…

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

一、CNN简介 1. 神经网络基础 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。 输出层(Output layer),讯息在神经元链接中传输、分析、权…

VUE2中使用阿里云播放器AliPlayer

简述 基于 Vue 的播放器单页应用, 利用 web 播放器 sdk 进行视频点播,包含播放列表、字幕、多语言、自适应码率,皮肤自定义等功能 Web播放器文档 已知问题 vue中使用截图,不太好使【已自行优化】无键盘快捷键,无法通过空格暂停…

DCGAN 使用指南:将卷积神经网络和对抗网络结合,适用于生成小尺寸的图像

DCGAN 使用指南:将卷积神经网络和对抗网络结合 网络结构细节设计 论文地址:https://arxiv.org/abs/1511.06434 项目代码:https://github.com/tensorlayer/DCGAN.git DCGAN 适用于生成小尺寸的图像,并且具有简单易用的优势 Styl…

“2024上海智博会、2024北京智博会”双展联动,3月上海,6月北京

“2024上海智博会、2024北京智博会”双展联动,将分别于3月和6月在上海和北京举办。这两个展会旨在充分展示智慧城市、人工智能、物联网、大数据、软件等新兴行业的最新产品和技术。 作为中国最具影响力和创新力的智能科技展会,上海智博会和北京智博会吸引…

bclinux aarch64 ceph 14.2.10 云主机 性能对比FastCFS vdbench

部署参考 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph 14.2.10 aarch64 非集群内 客户端 挂载块设备-CSDN博客 FastCFS vdbench数据参考 bclinux aarch64 openeuler 20.03 …

Java LeetCode篇-深入了解关于单链表的经典解法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 移除链表元素 1.1 使用双指针方法 2.0 反转链表 2.1 递归法 2.2 头插法 3.0 链表中倒数第 k 个节点 3.1 递归法 3.2 快慢指针 4.0 合并两个有序链表 4.1 递归法 …

【每日一题】1670. 设计前中后队列-2023.11.28

题目: 1670. 设计前中后队列 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类: FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面…

如何通过“闻香”给葡萄酒分类?

有句话叫做“闻香识女人”,葡萄酒也如同美女,千娇百媚风情万种,所以通过“闻香”也可以给葡萄酒进行分类。 那么,云仓酒庄的品牌雷盛红酒分享葡萄酒都有哪些不同的香呢? 云仓酒庄是云仓酒庄的结合,也就是在…

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…

vivado产生报告阅读分析21

其他命令选项 • -of_objects <suggestion objects> &#xff1a; 启用特定建议的报告。在此模式下运行时 &#xff0c; report_qor_suggestions 不会生成新建议。此命令可快速执行 &#xff0c; 读取 RQS 文件后 &#xff0c; 此命令可用于查看其中包 含的建议。其…

流程控制翻转学习

&#x1f4d1;前言 本文主要是【Python】——Python流程控制翻转学习的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

OSHI-操作系统和硬件信息库

文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包&#xff08;package&#xff09;1.4 涉及的核心类 二、操作系统信息&#xff1a;OperatingSystem2.1 总揽2.2 文件系统信息&#xff1a;FileSystem2.3 网络参数信息&#xff1a;NetworkParams2.4 进程信息&am…

Docker,从入门到精通

1、DockerFile 介绍 dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。 具体步骤&#xff1a; 1、编写一个 dockerfile 文件 2、docker build 构造一个镜像 3、docker run 运行镜像 4、docker push 发布镜像 DockerFile 构建过程 1、每个保留关键字都必须是大…

WSDM 2024 | LLMs辅助基于内容的推荐系统增强BPR训练数据

本文提出了一种简单而有效的基于LLMs的图数据增强策略&#xff0c;称为LLMRec&#xff0c;以增强基于内容的推荐系统。LLMRec包含三种数据增强策略和两种去噪策略。数据增强策略包括从文本自然语言的角度挖掘潜在的协同信号, 构建用户画像(LLM-based), 并强化item side informa…

Adobe Illustrator绘图解决卡顿问题

最近在用AI做矢量图&#xff0c;但是遇到了一个很难搞的问题&#xff0c;当我们需要分辨率较高的图片的时候&#xff0c;Python用Matplotlib生成的pdf时dpi参数会设置为600及以上&#xff0c;但是样子的话就造成了pdf文件过大以及AI卡顿&#xff0c;比如&#xff0c;下午生成的…