5.4.6 再平衡超时与会话超时


5.4.6 再平衡超时与会话超时

消费组成员[Cl][Cl,C2](CI,C2](Cl:Pl,C2:P2][Cl][CI][Cl:{Pl,P2}]当消费组状态是“准备再平衡”,协调者会创建一个“延迟的加入组”对象。这个对象表示协调者在处理消费者的“加入组请求”时,由于还没有收集完整“重新发送加入组请求”的消费者,所以还不能返回“加入组响应”给发送了“加入组请求”的消费者。当消费组中的所有消费者都发送(或重新发送)了“加入组请求”,“延迟的加入组”对象就可以完成,协调者这时才会返回“加入组响应”给所有的消费者。

协调者等待“延迟操作”完成有一个时间限制,它会选择消费组巾所有消费者会话超时时间的最大值,作为“再平衡操作的超时时间”,也叫作“延迟操作的超时时间”。如果是第一个消费者加入组,再平衡操作的时间等于第一个消费者的会话超时时间。但因为目前消费组中只有第一个消费者,所以协调者刚刚创建的延迟操作可以马上完成。当第二个消费者加入组后,再平衡操作的时间会选择两个消费者的会话超时时间最大值。比如第一个消费者的会话超时时间是10秒,第二个消费者的会话超时时间是5秒,再平衡操作的超时时间等于10秒,延迟的加入操作会最多等待10秒,等待第一个消费者在这段时间内可以重新发送“加入组请求”。

为延迟操作设置超时时间是为了防止延迟操作一直无法完成。假设原有的消费者迟迟没有重新发送“加入组请求”,协调者就无法确定何时才可以返回“加入组响应”给已经发送了“加入组请求”的消费者。从创建延迟操作,经过了“再平衡操作超时时间”之后,延迟操作会被强制完成。在完成延迟操作时,协调者会找出那些没有在规定时间内重新发送“加入组请求”的消费者,将它们从消费组中移除摊。相关代码如下:

在这里插入图片描述

在完成“延迟的加入组”对象中,协调者会返回“加入组响应”给消费组中的所有消费者。这也是在onCo叩leteJoi.n()方在中,要事先移除掉超时消费者的原因。在发送“加入组响应”时,消费组中的所有消费者一定都在“再平衡操作超时时间”内及时发送了“加入组请求”。协调者返回“加入组响应”给每个消费者后,都会立即完成本次“延迟的心跳”,并调度下一次
“延迟的心跳”。“延迟的心跳”和“延迟的加入组”概念上相同,前者因为是消费者级别,超时时间是消费者自己的会话超时时间;后者因为是消费组级别,超时时间是所有消费者的最大会话超时时间。相关代码如下:
在这里插入图片描述

如图5-23所示,在消费组的一次再平衡操作过程中,服务端的协调者只有一个延迟的加入对象(DelayedJoi.n),并且它会为每个消费者保存一个延迟的心跳对象(DelayedHeartbeat),用来监控消费者是否及时地发送心跳,具体步骤如下。

(1)消费者发送“加入组请求”时会指定会话的超时时间(简称“会话时间”)。
(2)协调者不能立即返回“加入组响应”给消费者,创建一个消费组级别的“延迟加入”。
(3)“延迟加入”可以完成,协调者返回“加入组响应”给消费组中的每个消费者。
(4)协调者为每个消费者都创建一个“延迟心跳”,并监控每个消费者是否存活。

在这里插入图片描述

协调者在处理完消费者的“加入组请求”后,会返回“加入组响应”给消费者。消费者收到“加入组响应”后,就应该在会话时间内及时发送“同步组请求”给协调者;杏则,协调者就会认为消费者出现了故障。协调者在处理“同步组请求”时,有多个地方调用了“完成若调度下一次心跳”方法。

(1)状态为“等待同步”,在设置成员元数据的回调方法后调用。
(2)状态为“稳定”,在发送“同步组响应”给消费者后调用。
(3)状态为“等待同步”,收到主消费者的“同步组请求”,给每个消费者发送“同步组响应”后调用。

第三处的用法和协调者处理“加入组请求”时,给每个消费者发送“加入组H向应”后调用“完成并调度下一次心跳”方法类似。它们都针对所有消费者,而不是单个消费者。但前面两个用法,只针对一个消费者。相关代码如下:

在这里插入图片描述

协调者创建完“延迟操作”对象后,一个很重要的步骤是:当“延迟操作”相关的外部事件发生时,就需要通过延迟缓存尝试完成延迟的操作。对于“延迟的加入组”,外部事件是消费者发送了“加入组请求”;对于“延迟的心跳”,外部事件则是协调者和消费者之间有网络通信。不管是协调者处理消费者发送的请求,还是协调者发送响应给消费者,协调者都会完成本次延迟的心跳,并开始调度下一次延迟的心跳。如图5-24所示,协调者完成“延迟加入”操作的时间是10:00:00,它为每个消费者创建的“延迟心跳”,会根据当前时间和消费者的会话超时时间,设置下一次“延迟心跳”的截止时间(deadli.ne)。

在这里插入图片描述

如图5-25所示,消费者在收到“加入组响应”后,会发送“同步组请求”给协调者。协调者依次处理每个消费者的“同步组请求”,会先完成延迟缓存中已有的“延迟心跳”,然后创建新的“延迟心跳”。这里假设协调者最后才处理主消费者的“同步组请求”。如果普通消费者发送“同步组请求”比主消费者还要晚,它也会先完成已有的“延迟心跳”,并创建新的“延迟心跳”。但协调者在调用PropagateAssi.gnment()方法时,就不会为这样的普通消费者再次调用“完成并调度下一次心跳”。
在这里插入图片描述

如图5-26所示,协调者在返回“同步组响应”给每个消费者后,会为每个消费者都调用一次“完成并调度下一次心跳”。注意:协调者收到主消费者的时间是10:00:38,但返回“同步组响应”的时间是10:00:40,在这段时间内,协调者会将“同步组请求”的“消费组分配结果”保存到内部主题。
在这里插入图片描述

“延迟加入”完成时,协调者发送“加入组响应”给所有的消费者。下面分析“延迟的心跳”在完成时的动作。

CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《深入解析SQL Server 2008》的随书源代码 对应的书籍资料见: 深入解析SQL Server 2008(微软SQL Server开发团队必读之作) 基本信息 原书名: Microsoft SQL Server 2008 Internals 原出版社: Microsoft Press 作者: (美)Kalen Delaney    Paul S. Randal    Kimberly L. Tripp    Conor Cunningham    Adam Machanic 译者: 陈宝国 李光杰 薛赛男 出版社:人民邮电出版社 ISBN:9787115230799 上架时间:2010-7-16 出版日期:2010 年7月 开本:16开 页码:548 版次:1-1 编辑推荐    由知识丰富的资深专家和数位具有多年产品使用经验的讲师联手打造    深层次展示核心引擎的功能及其工作原理、深度揭示SQL Server的内部工作原理    书中大量截图,帮助新用户以及中级用户快速学习使用产品 内容简介    本书全面探讨了sql server 2008的内部工作原理。全书共分为11章,首先在第1章中详细介绍了sql server 2008的架构和配置,然后在接下来的10个章节中深入探讨了sql server 2008数据存储和查询处理等各个方面的内部机制,包括:数据库和数据库文件、表、索引、跟踪、日志记录和恢复、特殊存储、查询优化、计划缓存和重新编译、事务和并发、dbcc等。本书还有一个网站,上面有本书额外的第12章“查询执行”、本书的所有代码及其他工具和脚本。    本书由知识丰富的资深专家和数位具有多年产品使用经验的讲师联手打造,是一本关于sql server工作原理的权威参考指南,不管您是数据库开发人员、架构师,还是数据库管理员,都可以从阅读本书中获益。    深层次展示核心引擎的功能及其工作原理    借助著名内部专家小组的指导,深入探究核心sql server引擎,并把这些知识运用在实际工作中、无论您是数据库开发人员、架构师,还是管理员,都能获得利用关键架构变更所需的深层知识,并挖掘产品的全部潜力。    深度揭示sql server的内部工作原理:    当sql server编译、扩展、压缩和移动数据库时,内部在进行什么操作    如何使用事件跟踪——从触发器到扩展事件引擎    为什么合适的索引能大大减少查询执行时间    如何用新的存储能力超越正常的行数限制    查询优化器是如何运行的    为有问题的查询计划排除故障的多种技术    何时强制sql server重用或创建新的缓存查询计划    运行dbcc时,sqlserver在内部检查什么    处理多个并发用户时,如何在5个隔离级别和2个并发模型中做出选择 作译者   Kalen Delanev自1993年起就是微软SQL Server的MVP,她为全世界的客户提供高级SQL Server培训、她是《SQL Server Magazine》的特约编辑和专栏作家,也是几本读者推崇的书籍的作者,包括《Inside Microsoft SQL Server 2005:The Storage Engine》和《Inside Microson SQL Server 2005:Query Tuning and Optimization》。   Paul S.Randal微软MVP、培训师和TechNet Magazine的特约编辑。Kimberly L.Tripp是微软MVP、培训师和《SQL Server Magazine》的特约编辑。   Conor Cunninqham微软SQL Server Core Engine团队的首席架构师.   Adam Machanic MCITP、微软MVP、讲师,几本SQL Server书籍的合著者.   Ben Nevarez从6.45版本开始使用SQL Server,是高级数据库管理员. 目录 封面 -20 封底 -19 扉页 -18 版权 -17 内容提要 -16 序 -14 前言 -13 致谢 -11 关于作者 -8 目录 -6 第1章 SQL Server 2008架构和配置 1 1.1 SQL Server版本 1 1.2 SQL Server元数据 2 1.2.1 兼容性视图 2 1.2.2 目录视图 3 1.2.3 其他元数据 4 1.3 SQL Server引擎组件 6 1.3.1 观察引擎行为 7
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页