XMPP协议简介[转载]

article/2025/9/13 17:21:33

1. 简介

XMPP来源于Jabber开源社区,基于XML,提供准实时的传递消息、在线状态和请求/响应服务。XMPP使用客户/服务模式,服务器之间能够相互连接,建立在面向连接的协议上,通常是TCP。
下图概要描述了XMPP架构:


以黑色线条连接的方框是XMPP的客户端和服务器,要注意的是XMPP客户端之间不能相互连接,这是一个严格的客户/服务器模型。客户端2和服务器1通过网关接入异构消息网络,异构消息网络指没有应用XMPP协议的网络,比如MSN、SMTP等。XMPP协议的开放性使它很容易接入同构和异构网络,把数据孤岛串联为一个网络。
XMPP允许通过身份验证的多个资源(resource)并发接入一台服务器,这些源以XMPP地址中的资源号来标示自己,比如node@domain/home和node@domain/work。服务客户端的周知端口是5222,服务器相互连接的端口是5269。
由于历史原因,XMPP节点被称为Jabber Identifier(或JID),格式为node@domain/resource。JID可以是domain,表示这是一个网关,或者是提供服务的一个子节点。node通常代表访问服务器的实体,比如及时信使客户端。resource通常代表一个特定的会话、连接(一个设备或位置)、属于实体的对象(多人聊天室的一个参与者)
XMPP被设计为能够异步并能快速交换短文的协议,为此客户端和服务器之间存在两条XML流,用于异步通信,流传输的是XML文档。TCP是XMPP的默认承载协议,在客户端到服务器的通信模型下,需要一条TCP链路;在服务器到服务器的通信模式下,需要两条TCP链路以传输两个对端数据。
XMPP流以<stream>标记开始,以</stream>结束。XMPP流可以视为一个well-form的XML文档,每次传输的是文档的片段,而片段则是well-form的XML标签。
stream标记的属性如下:
to只能用于从客户端到服务器的XML流中。
from只能用于从服务器到客户端的XML流中。
id只能用于从接收实体到发送实体的XML流中,id必须唯一,用于标记会话。
xml:lang只能用于发起方,用于约定语言。如发起方没有携带xml:lang属性,接收方应使用默认语言。
version至少在“1.0”以上。
XMPP Core对应的是RFC3920,从中摘录一段代码以简要说明通信过程。(S代表服务器,C代表客户端)

 C: <?xml version='1.0'?> <stream:stream to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> ... encryption, authentication, and resource binding ... C: <message from='juliet@example.com' to='romeo@example.net' xml:lang='en'> C: <body>Art thou not Romeo, and a Montague?</body> C: </message> S: <message from='romeo@example.net' to='juliet@example.com' xml:lang='en'> S: <body>Neither, fair saint, if either thee dislike.</body> S: </message> C: </stream:stream> S: </stream:stream> 

 可以看到客户端和服务器双方都以<stream>标记开始会话,即双方都在传输一个完整的XML文档。以<stream>发起会话后,双方建立TLS安全链路,然后用SASL(稍后说明)认证对方身份,最后绑定资源并开始传输消息报文。  
 TLS是SSL的后继者,TLS1.0和SSL3.0非常相似。TLS建立在传输层上,通信双方先用不对称加密算法传输对称加密算法的密钥,然后用对称加密算法加密传输内容。

 1.1 TLS 
 (以下例子摘录自RFC3920) 


第1步: 客户端发起连接: 

 <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'> 

第2步: 服务器向客户端返回一个<stream>标记: 

 <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_123' from='example.com' version='1.0'>


第3步: 服务器向客户端发送STARTTLS扩展,并携带认证机制和流特性: 

<stream:features> <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'> <required/> </starttls> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>DIGEST-MD5</mechanism> <mechanism>PLAIN</mechanism> </mechanisms> 
</stream:features> 

第4步: 客户端发送STARTTLS给服务器: 

<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> 

第5步: 服务器提示客户端可以继续: 

  <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

第6步: 客户端和服务器尝试在已有的TCP链路上完成TLS握手过程。 
第7步: 如果TLS握手成功,客户端向服务器发起一个新流: 

  <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'  to='example.com' version='1.0'> 

第8步: 服务器以一个stream头响应,同时携带可能的流特性:    

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='c2s_234' version='1.0'>        		<stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>EXTERNAL</mechanism></mechanisms></stream:features>  

第9步: 客户端继续SASL握手(见后)。 

1.2 简单授权和安全传输层协议SASL(Simple Authentication and Security Layer protocol) 

(以下例子摘自RFC3920)
第1步: 客户端向服务器发起流请求:  

 <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

第2步: 服务器向客户端响应stream标记:  

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_234' from='example.com' version='1.0'>

第3步: 服务器向客户端提示可用的认证方法: 

   <stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features>

第4步: 客户端选择一种认证方法:  

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>

第5步: 服务器发送以BASE64编码的验证码给客户端:  

   <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==</challenge>

   验证码解码后如下:
   realm="somerealm",nonce="OA6MG9tEQGm2hh",\
   qop="auth",charset=utf-8,algorithm=md5-sess
第6步: 客户端发送以BASE64编码的响应码: 

  <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0iT0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAwMDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20iLHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNoYXJzZXQ9dXRmLTgK</response>

   解码后的响应码如下:

   username="somenode",realm="somerealm",\
   nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",\
   nc=00000001,qop=auth,digest-uri="xmpp/example.com",\
   response=d388dad90d4bbd760a152321f2143af7,charset=utf-8


第7步: 服务器发送另一个以BASE64编码的验证码给客户端: 

  <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=</challenge>

   解码后的验证码:
   rspauth=ea40f60335c427b5527b84dbabcdfffd

第8步: 客户端响应验证码: 

 <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

第9步: 服务器提示客户端认证通过:  

  <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

第10步: 客户端向服务器发起新连接: 

  <stream:stream xmlns='jabber:client'  xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

第11步: 服务器响应一个stream头,可能携带特性:  

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'>    		<stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></stream:features>

1.3 绑定资源

客户端连接成功后使用iq(Info Query)查询服务器资源。

 <iq type='set' id='bind_2'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <resource>someresource</resource> </bind> </iq> 

 服务器确认客户端要绑定的资源后,必须返回一个iq标签。

 <iq type='result' id='bind_2'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <jid>somenode@example.com/someresource</jid> </bind> </iq> 

1.4 XML短语(Stanzas)  

有三种短语——<message>(消息)、<presence>(在线状态)和<iq>(信息查询),三种短语都有共同属性,如下。

 

2. 基本语义  

 

2.1 Message语义 

message短语可视为一种推送机制——某个实体向另一个实体推送信息。所有message短语必须携带to属性,以标明接收者。服务器收到message短语后,或路由或投递给接收者。

 

2.2 Presence语义 

presence可被视为一个基本的广播或“发布-订阅”机制,多个实体接收他们订阅的关于某个实体的信息。

 

2.3 IQ语义 

Info/Query,或IQ,是一种”请求-响应“机制,与HTTP类似。IQ使一个实体能够向另一个实体发起请求,请求/响应报文以id属性标示。IQ交互通常以get/result和set/result模式执行。

 

3. 基于XMPP的即时信使扩展  


XMPP标准由XMPP Core(RFC3920)、XMPP IM(RFC3921)、XMPP CPIM(RFC3922)(映射XMPP到IETF的CPIM规范)、XMPP E2E(RFC3922)(端到端信号和对象加密)、XMPP URN(RFC4854)(基于XMPP扩展的Uniform Resource Name树)、XMPP ENUM(RFC4979)(在IANA注册的枚举服务)、XMPP URI(RFC5122)(对RFC4622的勘误)。本文只覆盖了XMPP Core和XMPP IM,其中XMPP IM由XMPP Core扩展而得。

 

3.1 Message语法 

type是message短语必要的属性,分类如下:
message包含<subject/>、<body/>和<thread/>子元素。

 

3.1.1 Subject  

<subject/>元素包含说明消息标题的可视字符。

 

3.1.2 Body  

<body/>元素包含消息文字内容的可视字符。

 

3.1.3 Thread  


<thread/>元素用于跟踪会话线索,包含标示线索的不可视字符。
chat。一对一聊天。
error。发送上一条消息所致错误。
groupchat。多人聊天(类似IRC)。
headline。该消息可能由提供投递或广播内容(新闻、体育、市场信息、RSS源等)的自动服务发出。
normal。这是一条与一对一或群聊无关的消息,发送者希望接收者能够回复该消息。
to属性表述接收者的JID。
from属性表述发送者的JID。
可选id属性,用于内部跟踪短语,比如用于<iq>短语。
type属性表述消息上下文(或用途)的详细信息。
当短语承载用于阅读的信息时,xml:lang表述语言类型,如果xml:lang不存在则应用stream的语言设定。

 

 3.2 Presence语法  

 

 <presence>用于表述一个实体的网络状态(在线及子状态,离线),并将该实体状态广播给其它实体。<presence>也用于协商和管理其他实体的网络状态。  
 <presence>的type属性可选,客户端发送一个没有type属性的<presence>到服务器仅表示在线,可以通信。如果<presence>包括type属性,则表述:1)不在;2)请求订阅其它实体的网络状态;3)查询其他实体的网络状态;4)错误。  
 type取值范围如下:  
 
不可用(unavailable)。
订阅。
退订。
已退订。表示先前订阅被拒绝(或取消)。
探测。请求另一个实体的状态,只能由服务器发出。
错误。

 

 3.2.1 Show  

 

 <show>包含不可视字符以表述一个实体(或资源)的可用状态。<show>取值如下:  
 
away。
chat。
dnd (Do Not Disturb)。
xa (eXtended Away)。

 

 3.2.2 Status  


 <status>一般配合<show>使用,包含可视字符详细说明实体的网络状态。  

 

 3.2.3 Priority  

 <priority>包含不可视字符以说明资源的优先级。  

 

 3.3 IQ语法  

 XMPP IM规范对IQ做了两个扩展——好友管理和块通信(Blocking Communication)。  

 

 3.4 会话  

 大多数IM和在线状态应用构建在XMPP的客户端/服务器架构上,需要与服务器建立会话以传输消息和状态。支持会话的服务器在完成流认证后,向客户端发送<session>标签。 

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'> 			<stream:features> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </stream:features>  

 客户端绑定资源完毕后,向服务器发起<iq>请求,要求创建会话。  
 
第1步: 客户端向服务器发起会话请求: 

<iq to='example.com' type='set' id='sess_1'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq> 

第2步: 服务器提示客户端会话已建立:

 <iq from='example.com' type='result' id='sess_1'/>   

 

3.5 联系人管理(Roster Management)

 
联系人列表通过<iq>标签获取。
 

3.5.1 获得当前联系人

 
第1步: 客户端向服务器发起查询请求:


 <iq from='juliet@example.com/balcony' type='get' id='roster_1'> <query xmlns='jabber:iq:roster'/> </iq>  


第2步:服务器返回列表  

<iq to='juliet@example.com/balcony' type='result' id='roster_1'> <query xmlns='jabber:iq:roster'> <item jid='romeo@example.net' name='Romeo' subscription='both'> <group>Friends</group> </item> <item jid='mercutio@example.org' name='Mercutio' subscription='from'> <group>Friends</group> </item> <item jid='benvolio@example.org' name='Benvolio' subscription='both'> <group>Friends</group> </item> </query> 
</iq>  

3.5.2 增加联系人

<iq from='juliet@example.com/balcony' type='set' id='roster_2'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com' name='Nurse'> <group>Servants</group> </item> </query> 
</iq>   


服务器收到请求后,首先更新本地存储资料,然后向关联实体发出<iq>设置指令,使所有实体处于同步状态。


更新与删除请求与增加类似,下面分别是更新和删除例子。

<iq from='juliet@example.com/chamber' type='set' id='roster_3'> <query xmlns='jabber:iq:roster'> <item jid='romeo@example.net' name='Romeo' subscription='both'> <group>Friends</group> <group>Lovers</group> </item> </query> 
</iq>   
<iq from='juliet@example.com/balcony' type='set' id='roster_4'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com' subscription='remove'/> </query> 
</iq> 


  

3.6 关注(Subscribe)

 

 用“关注”可能比“订阅”更能精确表述Subscribe概念。在XMPP中,联系人和好友的区别在于是否关注。被关注联系人的状态能够同步过来,反之亦然。  
以下例子展示如何增加一个联系人:  

 


第1步: 客户端发起一个新增联系人请求:  

<iq type='set' id='set1'> <query xmlns='jabber:iq:roster'> <item jid='contact@example.org' name='MyContact'> <group>MyBuddies</group> </item> </query> 
</iq>   


第2步: 服务器返回操作结果:


 <iq type='result' id='set1'/>   


第3步: 客户端发起关注请求:


 <presence to='contact@example.org' type='subscribe'/>  


第4步: 服务器向被关注实体服务器发出关注指令:


 <presence from='user@example.com' to='contact@example.org' type='subscribe'/>   


第5步: 被关注实体服务器发送关注请求给被关注实体,被关注实体返回确认指令:

 <iq type='set' id='set2'> <query xmlns='jabber:iq:roster'> <item jid='user@example.com' name='SomeUser'> <group>SomeGroup</group> </item> </query> </iq> <presence to='user@example.com' type='subscribed'/>  

第6步: 用户服务器返回结果给关注发起者:
 <presence from='contact@example.org' to='user@example.com' type='subscribed'/> 

 

附XMPP资料网址:http://hi.baidu.com/new/zknehycmrobrtvd


http://chatgpt.dhexx.cn/article/PkLYV7X9.shtml

相关文章

XMPP协议解析

XMPP国际标准的协议 可扩展的消息和展示的协议&#xff0c;是一种基础的开放式实时通信协议。可扩展新&#xff0c;强可读性。相比Email的发展史&#xff0c;163和qq邮箱之间的通信。为了兼容&#xff0c;符合同一种标准。即实现不同邮箱之间的通信。国内腾讯一家独大&#xf…

xmpp协议(即时通信协议规范)

转载自 https://www.cnblogs.com/jiyuqi/p/5085932.html 相关背景 IM&#xff08;Instant Messaging&#xff09;正在被广泛使用&#xff0c;特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用。为了解决即时通信的标准问题&#xff0c;IETF&#xff08;互联网…

XMPP协议的原理介绍

XMPP&#xff08;可扩展消息处理现场协议&#xff09;是基于可扩展标记语言&#xff08;XML&#xff09;的协议&#xff0c;它用于即时消息&#xff08;IM&#xff09;以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人…

XMPP协议详解

原文链接&#xff1a;http://www.jianshu.com/p/a94749385755 xmpp协议详解一&#xff1a;xmpp基本概念 作者 riverli 关注 2015.07.30 14:22* 字数 3204 阅读 6104 评论 1 喜欢 17 概述 XMPP是一个开放式的XML协议&#xff0c;设计用于准实时消息和出席信息以及请求&#xff0…

物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)

目录 1、HTTP和websocket 2、XMPP 3、COAP 4、MQTT协议 5、DDS 对于物联网&#xff0c;最重要的是在互联网中设备与设备的通讯&#xff0c;现在物联网在internet通信中比较常见的通讯协议包括&#xff1a;HTTP、websocket、XMPP、COAP、MQTT 1、HTTP和websocket 在互联网…

XMPP基本概念

概述 XMPP是一个开放式的XML协议&#xff0c;设计用于准实时消息和出席信息以及请求&#xff0d;响应服务。 通用的架构 通常采用客户端服务器架构进行实现&#xff0c;其中客户端通过TCP方式使用XMPP访问服务器&#xff0c;服务器之间也采用TCP方式进行通信。 xmpp通用架构…

kafka的isr机制

Data Replication Kafka 的 Data Replication 需要解决如下问题&#xff1a; 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Replica 已经收到该消息 怎样处理某个 Replica 不工作的情况 怎样处理 Failed Replica 恢复回来的情况 Propagate 消息 通过zook…

kafka-04数据同步原理ISR、ACK、LEO、HW

1. 分区策略 分区的原因 &#xff08;1&#xff09;方便在集群中扩展&#xff0c;每个 Partition 可以通过调整以适应它所在的机器&#xff0c;而一个 topic 又可以有多个 Partition 组成&#xff0c;因此整个集群就可以适应任意大小的数据了&#xff1b; &#xff08;2&#…

Cisco ISR4221 路由器密码重置方法

【Cisco路由器重置】Cisco ISR4221 路由器密码重置方法 使用usb-console线连接路由器&#xff0c;使用secureCRT连接 记得使用串口serial模式&#xff0c;Port如果没有自动识别&#xff0c;可能是你没有安装FT232R USB UART驱动。教程&#xff1a;https://www.cnblogs.com/iBo…

KafKa - 分区副本ISR选举机制

一、KafKa分区副本ISR选举机制 kafka 中每一个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的&#xff0c;每个分区配置有多若干个副本。 所谓的副本&#xff0c;本质上就是一个只能追加写消息的提交日志&#xff0c;根据kafka副本机制的定义&#xff…

Kafka 设计原理——副本与ISR设计

目录 副本与ISR设计Follower副本同步ISR设计 副本与ISR设计 一个Kafka分区本质就是一个备份日志&#xff0c;即利用多份相同的备份共同提供冗余机制来保持系统高可用性。 这些备份在Kafka中被称为副本(replica)。Kafka把分区的所有副本均匀地分配到所有broker上。 并从这些副本…

ISR吞吐性能问题

ISR大致可以分几类&#xff1a; Cisco 860、880、890 ISR1800 (fixed)、1800 (modular)、2800、3800 Series ISR1900、2900、3800、3900 Series ISR4K 每一代的设备&#xff0c;设备的性能肯定都不一样&#xff0c;本摘要&#xff0c;将主要记录ISR的吞吐性能问题。 1、下图主要…

生产故障|Kafka ISR频繁伸缩缩引发性能急剧下降原因分析

本文是笔者双十一系列第二弹&#xff0c;源于一个双十一期间一个让笔者猝不及防的生产故障&#xff0c;本文将详细剖析Kafka的副本机制&#xff0c;以及ISR频繁变更(扩张与伸缩)为什么会导致集群不可用。 1、Kafka副本机制 Kafka数据组织方式是topic-parition的结构&#xff…

关于kafka中ISR、AR、HW、LEO、LSO、LW的含义详解

kafka中的ISR、AR又代表什么&#xff1f;ISR伸缩又是什么&#xff1f; ​ 分区中的所有副本统称为AR&#xff08;Assigned Repllicas&#xff09;。所有与leader副本保持一定程度同步的副本&#xff08;包括Leader&#xff09;组成ISR&#xff08;In-Sync Replicas&#xf…

c4isr系统有无服务器,什么是C4ISR系统?

C4ISR是指挥、控制、通信、计算机、情报、侦察与监视系统的英文简称&#xff0c;是美国各军兵种作战系统的大脑和神经。其主要功能是把作战系统各部分连接起来&#xff0c;构成一个灵活、机动、可靠、无缝的网络&#xff0c;确保各参战部队能依靠网络进行以网络为中心的现代化战…

Next.js性能优化之ISR渲染入门和原理探索

前言 术语说明&#xff1a; SSR —— 服务端渲染SSG —— 静态生成ISR —— 增量静态化Date Fetch 函数 —— 本文特指服务端数据获取的几种函数 getStaticProps 、 getServerSideProps 、 getInitialProps 、 getStaticPaths 。 Next.js 中最突出的莫过于它的渲染模式&…

Kafka之分区副本与ISR

概念 什么是副本 Kafka的Topic分区本质是一个用于存储Topic下的消息的日志&#xff0c;但是只存一份日志会因为机器损坏或其他原因导致消息丢失不可恢复&#xff0c; 因此需要多个相同的日志作为备份&#xff0c;提高系统可用性&#xff0c;这些备份在kafka中被称为副本(rep…

Kafka的ISR收缩机制

ISR什么时候收缩ISR什么时候扩展ISR的传播机制Broker宕机之后怎么ISR的收缩&#xff1f; Kafka在启动的时候,会启动一个副本管理器ReplicaManager,这个副本管理器会启动几个定时任务。 ISR过期定时任务isr-expiration,每隔replica.lag.time.max.ms/2毫秒就执行一次。ISR变更的…

Kafka ISR

ISR&#xff08;in-sync replica&#xff09; 就是 Kafka 为某个分区维护的一组同步集合&#xff0c;即每个分区都有自己的一个 ISR 集合&#xff0c;处于 ISR 集合中的副本&#xff0c;意味着 follower 副本与 leader 副本保持同步状态&#xff0c;只有处于 ISR 集合中的副本才…

kafka中的ISR、AR又代表什么?ISR伸缩又是什么?

kafka中的ISR、AR又代表什么&#xff1f;ISR伸缩又是什么&#xff1f; ​ 分区中的所有副本统称为AR&#xff08;Assigned Repllicas&#xff09;。所有与leader副本保持一定程度同步的副本&#xff08;包括Leader&#xff09;组成ISR&#xff08;In-Sync Replicas&#xff09…