CN112256433A - 基于Kafka集群的分区迁移方法和装置 - Google Patents
基于Kafka集群的分区迁移方法和装置 Download PDFInfo
- Publication number
- CN112256433A CN112256433A CN202011192159.XA CN202011192159A CN112256433A CN 112256433 A CN112256433 A CN 112256433A CN 202011192159 A CN202011192159 A CN 202011192159A CN 112256433 A CN112256433 A CN 112256433A
- Authority
- CN
- China
- Prior art keywords
- partition
- disk
- node server
- migration
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种基于Kafka集群的分区迁移方法,该方法包括:检测是否存在新的节点服务器加入至Kafka集群;获取各个节点服务器中包含的磁盘与分区的对应关系及各个磁盘中包含的所有分区的消息写入速率;遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从第一磁盘中选择预设的主题下的一个分区执行第一分区迁移操作;在执行第一分区迁移操作后,判断述第一节点服务器是否满足第一分区策略;若第一节点服务不满足所述第一分区策略,则重复执行上述步骤,直至第一节点服务器满足所述第一分区策略为止。本申请可以提高数据分发的吞吐效率。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种基于Kafka集群的分区迁移方法、装置、计算机设备及计算机可读存储介质。
背景技术
kafka是一个分布式,分区的,多副本的,多订阅者的消息发布订阅***(分布式MQ***),可以用于搜索日志,监控日志,访问日志等。Kafka架构在缓存数据时一般会通过多个节点服务器组成一个Kafka集群,并且以分区(partition)为存储单元进行数据缓存的。在现有技术中,随着数据流量的增大,一般会通过增加节点服务器的方式实现扩容。然而,发明人发现,现有的Kafka集群通过增加节点服务器的方式实现扩容,在刚增加节点服务器时,由于新增的节点服务器不存在分区,导致无法及时通过新增的节点服务器来进行数据缓存,进而会降低数据分发的吞吐效率。
发明内容
本申请实施例的目的是提供一种基于Kafka集群的分区迁移方法、***、计算机设备及计算机可读存储介质,可以用于解决新增的节点服务器不存在分区,导致无法及时进行数据缓存,影响数据分发的吞吐效率的问题。
本申请实施例的一个方面提供了一种基于Kafka集群的分区迁移方法,所述Kafka集群包括多个节点服务器,每一个节点服务器包括多个磁盘,所述方法包括:
定时检测是否存在新的节点服务器加入至所述Kafka集群;
若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;
遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;
在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;
若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止;
其中,所述第一分区迁移操作包括:
根据所述对应关系确定候选的第二节点服务器;
从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略;
将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
可选地,所述从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘包括:
从所述第二节点服务器的磁盘中选择预设数量的消息写入速率小的磁盘作为待迁移磁盘;
按照磁盘IO使用率从小到大的顺序判断将从所述第一磁盘中选择出的分区迁移至所述待迁移磁盘后,所述待迁移磁盘是否满足所述第三分区策略;
若所述待迁移磁盘满足所述第三分区策略,则将所述待迁移磁盘作为第一目标迁移磁盘。
可选地,当所有的第一节点服务都满足所述第一分区策略时,所述基于Kafka集群的分区迁移方法还包括:
遍历所有的磁盘,并在遍历过程中找到不满足所述第二分区策略的第二磁盘时,从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作;
在执行所述第二分区迁移操作后,判断所述第二磁盘是否满足所述第二分区策略;
若所述第二磁盘不满足所述第二分区策略,则返回执行从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作的步骤,直至所述第二磁盘满足所述第二分区策略为止;
其中,所述第二分区迁移操作包括:
从所述第二磁盘对应的节点服务器的磁盘中选择满足预设条件的磁盘作为第二目标迁移磁盘,其中,所述预设条件为在在完成分区迁移后,所述第二目标迁移磁盘满足所述第三分区策略;
将从所述第二磁盘中选择出的分区迁移至所述第二目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
可选地,当所有的磁盘都满足所述第二分区策略时,所述基于Kafka集群的分区迁移方法还包括:
遍历所有的磁盘,并在遍历过程中找到不满足所述第三分区策略的第三磁盘时,从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作;
在执行所述第三分区迁移操作后,判断所述第三磁盘是否满足所述第三分区策略;
若所述第三磁盘不满足所述第三分区策略,则返回执行从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作的步骤,直至所述第三磁盘满足所述第三分区策略为止;
其中,所述第三分区迁移操作包括:
从所述第三磁盘对应的节点服务器或者其他节点服务器中找到满足搬迁条件的磁盘作为第三目标迁移磁盘,其中,所述搬迁条件为完成分区迁移后,所述第三磁盘对应的节点服务器满足所述第一分区策略,所述第三磁盘满足所述第二分区策略,且所述第三目标迁移磁盘对应的节点服务器满足所述第一分区策略、所述第三目标迁移磁盘满足所述第二分区策略与所述第三分区策略;
将从所述第三磁盘中选择出的分区迁移至所述第三目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
可选地,所述基于Kafka集群的分区迁移方法还包括:
计算所述主题Topic下的所有分区在历史时间段内的平均峰值消息写入速率;
若所述平均峰值消息写入速率大于预设阈值时,则对所述主题Topic进行分区扩容操作。
可选地,所述基于Kafka集群的分区迁移方法还包括:
在接收到节点服务器发生故障的指令或接收到节点服务器下线的指令时,按照所述第一分区策略、所述第二分区策略与所述第三分区策略将所述发生故障或下线的节点服务器中的所有分区迁移至其他节点服务器和其他磁盘中,其中,所述其他节点服务器为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器,所述其他磁盘为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器的磁盘;
在完成所述发生故障或下线的节点服务器中的所有分区的迁移后,将所述发生故障或下线的节点服务器关闭。
可选地,所述基于Kafka集群的分区迁移方法还包括:
在接收到节点服务器的重启指令时,修改所述重启指令对应的节点服务器中包含的首领副本在分区列表中的位置信息,以使所述首领副本变为跟随者副本,其他跟随者副本变为新的首领副本;
对所述新的首领副本的消息写入速率进行限流处理;
在完成限流处理后,将所述重启指令对应的节点服务器进行重启。
本申请实施例的再一个方面提供了一种基于Kafka集群的分区迁移装置,所述Kafka集群包括多个节点服务器,每一个节点服务器包括多个磁盘,其特征在于,所述装置包括:
检测模块,用于定时检测是否存在新的节点服务器加入至所述Kafka集群;
获取模块,用于若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;
遍历模块,用于遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;
判断模块,用于在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;
返回模块,用于若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止;
其中,所述第一分区迁移操作包括:
根据所述对应关系确定候选的第二节点服务器;
从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略;
将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
本申请实施例的再一个方面提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,上述处理器执行上述计算机程序时用于实现如上任一项所述的基于Kafka集群的分区迁移方法的步骤。
本申请实施例的又一个方面提供了一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时用于实现如上任一项所述的基于Kafka集群的分区迁移方法的步骤。
本申请实施例提供的基于Kafka集群的分区迁移方法、***、计算机设备及计算机可读存储介质,通过定时检测是否存在新的节点服务器加入至所述Kafka集群;若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止。本实施例中,通过在发现新的节点服务器加入至集群中时,重新对集群中的所有节点服务器中的分区进行分配,以便可以及时使用新增的节点服务器来进行数据缓存,从而提高数据分发的吞吐效率。
附图说明
图1示意性示出了基于Kafka集群的分区迁移***的***架构图;
图2示意性示出了根据本申请一实施例的基于Kafka集群的分区迁移方法的流程图;
图3为意性示出了根据本申请一实施例的第一分区迁移操作的流程图;
图4示意性示出了从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘的步骤细化流程图;
图5示意性示出了根据本申请另一实施例的基于Kafka集群的分区迁移方法的流程图;
图6示意性示出了根据本申请另一实施例的基于Kafka集群的分区迁移方法的流程图;
图7示意性示出了根据本申请另一实施例的基于Kafka集群的分区迁移方法的流程图;
图8示意性示出了根据本申请另一实施例的基于Kafka集群的分区迁移方法的流程图;
图9示意性示出了根据本申请另一实施例的基于Kafka集群的分区迁移方法的流程图;
图10示意性示出了根据本申请实施例的基于Kafka集群的分区迁移装置的框图;以及
图11示意性示出了根据本申请实施例的适于实现基于Kafka集群的分区迁移方法的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请实施例的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
图1示意性示出了本申请的基于Kafka集群的分区迁移方法的运行环境图,其可以具有如下组合部分:
客户端30,为运行在服务器中的应用程序,用于将数据源1中的消息发送到Kafka集群。所述基于Kafka集群的分区迁移方法,可以以代码形式作为该客户端30的一部分或插件。可知,本实施例所述的消息延时处理方法的执行主体为运行所述客户端30的设备。
Kafka集群31,用于存储消息。
其他服务器集群32,为与Kafka集群31不同的集群,可以为Kafka集群31的备用集群。
集群管理组件,如Kafka guradian,可以收集服务器集群的运行信息等。
分布式服务协调组件,如Zookeeper,用于分布式架构的消息传递等业务。
图2示意性示出了根据本申请实施例一的基于Kafka集群的分区迁移方法的流程图。下面以计算机设备20为执行主体进行示例性描述。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。如图2所示,该基于Kafka集群的分区迁移方法可以包括步骤S20~步骤S24,其中:
步骤S20,定时检测是否存在新的节点服务器加入至所述Kafka集群。
具体地,可以通过一个定时任务来定时去检测Kafka集群中是否有新的节点服务器加入进来。若检测到有新的节点服务器加入进来,则需要对各个主题Topic下的所有分区进行重新分配节点服务器和磁盘。
步骤S21,若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率。
具体地,Kafka集群包括多个节点服务器,每个节点服务器中包含有多个磁盘。每一个节点服务器称为一个broker,每一个broker都有一个不重复的编号,比如broker-0、broker-1等。在每个broker上都可以创建多个主题(Topic),其中,每条发布到kafka集群的消息都有一个主题,这个主题就叫做Topic。每个Topic下具有一个或者多个partition(分区),分区的作用是做负载,用于提高kafka的吞吐量。同一个Topic下的不同的分区的数据是不重复的,partition(分区)的表现形式就是一个一个的文件夹。每一个partition(分区)都有多个副本,分为首领副本(Leader)和跟随者副本(Follower)。当首领副本(Leader)故障的时候会选择一个跟随者副本(Follower)上位,成为Leader。
需要说明的是,本申请实施例中的分区可以指首领副本(Leader),也可以指跟随者副本(Follower),即首领副本和跟随者副本都属于一个分区。
在一实施方式中,可以在Kafka集群中的每一个节点服务器部署Agent,通过部署的Agent获取各个节点服务器包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率,并将获取到信息上报给计算机设备20。
其中,Agent为一个用于采集数据的独立进程。
其中,所述磁盘与分区的对应关系用于指明各个节点服务器中的磁盘包含有哪些分区,比如,磁盘1包括Topic A的两个分区与Topic B的三个分区,磁盘2包括Topic C的两个分区与Topic D的三个分区。
所述消息写入速率可以为生产者将消息写入至磁盘中存储的首领副本(Leader)的速度,也可以指将首领副本(Leader)中的消息同步至跟随者副本(Follower)的速度,比如,消息写入速率为4M/s。
在另一实施方式中,也可以在Kafka集群中的每一个节点服务器进行埋点,通过埋点的方式获取各个节点服务器包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率,并将获取到信息上报给计算机设备20。
步骤S22,遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作。
具体地,计算机设备20可以通过遍历所有节点服务器的方式来依次判断每一个节点服务器是否不满足第一分区策略,若判断出该节点服务器不满足第一分区策略,则将该节点服务器作为第一节点服务器,并从该第一节点服务器中选择出一个不满足第二分区策略的磁盘,并将该磁盘作为第一磁盘,之后从该第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作,其中,该选择出的分区可以为该主题Topic下的任意一个分区,也可以为指定的分区,在本实施例中不作限定。在本实施例中,若判断出当前节点服务器满足第一分区策略,则会继续判断下一个节点服务器是否不满足第一分区策略。
其中,所述第一分区策略针对的是同一个Topic(比如Topic A、Topic B等)下的所有分区的分配策略,具体指的是所述Kafka集群中预设的Topic下包含的所有分区需要均匀分配在每一个节点服务器中。需要说明的是,本实施例中的均匀分配可以指绝对的均匀分配,也可以指相对的均匀分配。其中,绝对的均匀分配指的是所有节点服务器中分配的分区数量相同;相对的均匀分配指的是各个节点服务器中分配的分区数量的差值的最大值为1。可以理解的是,当所有的分区可以绝对的均匀分配在各个节点服务器时,所述第一分区策略指的是将所有分区绝对的均匀分配在每一个节点服务器中;当所有的分区不可以绝对的均匀分配在各个节点服务器时,则所述第一分区策略指的是将所有分区相对的均匀的分配在每一个节点服务器中。
示例性的,假设Kafka集群中的包含5个节点服务器,以及在集群中创建的Topic A包含有20个分区,则所述第一分区策略指的是在每一个节点服务器中都分配该Topic A下的4个分区。又比如,Kafka集群中的包含5个节点服务器,以及在集群中创建的Topic A包含有22个分区,则所述第一分区策略指的是在3个节点服务器中分配该Topic A下的4个分区,以及在2个节点服务器中分配该Topic A下的5个分区。
其中,所述第二分区策略指的是节点服务器中包含的预设的Topic下的所有分区需要均匀分配在该节点服务器的所有磁盘中。同理,本实施例中的均匀分配可以指绝对的均匀分配,也可以指相对的均匀分配。
需要说明的是,在本实施例中,不满足预设的第一分区策略的第一节点服务器指的是该节点服务器中包含的预设的Topic下的分区数量大于需要均匀分配的数量,比如,根据第一分区策略确定每一个节点服务器中需要分配Topic A下的5个分区,而在实际中,该节点服务器中包含的Topic A下的分区数量为7个,则可以判定该节点服务器不满足预设的第一分区策略。
同理,在本实施例中,不满足预设的第二分区策略的第一磁盘指的是该第一节点服务器中包含的预设的Topic下的分区数量大于需要均匀分配的数量,比如,根据第二分区策略确定第一节点服务器中的每一个磁盘需要分配Topic A下的2个分区,而在实际中,该第一磁盘中包含的Topic A下的分区数量为3个,则可以判定该第一磁盘不满足预设的第二分区策略。
可以理解的是,在本实施例中,预设的Topic可以指Kafka集群中的任意一个Topic。
在本实施例中,参照图3,所述第一分区迁移操作包括:
步骤S30,根据所述对应关系确定候选的第二节点服务器。
具体地,由于所述对应关系是用于指明各个节点服务器中的磁盘包含有哪些分区,因此,通过该对应关系可以得出Kafka集群中共有多少个节点服务器,每一个节点服务器有哪些磁盘,以及每一个磁盘中有哪些分区,之后,可以根据这些信息计算出各个节点服务器在满足第一分区策略时应该均匀分配多少个预设Topic下的分区,假设每一个节点服务器应该均匀分配N个分区,则在根据所述对应关系发现存在分配的分区数量小于N的节点服务器时,即可以将这些分区数量小于N的节点服务器作为候选的第二节点服务器,或者可以将这些分区数量小于N的节点服务器中的分区数量最小的节点服务器作为所述第二节点服务器,在本实施例中不作限定。
步骤S31,从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略。
具体地,所述第三分区策略指的是Kafka集群中的每一个磁盘中的消息写入速率(ByteIn)小于Kafka集群中的所有磁盘的消息写入速率的平均值(avg ByteIn)与预设系数a的乘积,即,ByteIn<(avg ByteIn*a)。其中,每一个磁盘的消息写入速率为该磁盘中的包含的所有分区的消息写入速率之和,比如,该磁盘中有分区1、分区2与分区3,则该磁盘的消息写入速率ByteIn=分区1的消息写入速率+分区2的消息写入速率+消息3的分区消息速率。所述预设系数a为预先设定的值,比如,所述预设系数a=1.3,则所述第三分区策略为ByteIn<(avg ByteIn*1.3)。
本实施例中,在发现第二节点服务器的磁盘中存在将该第一磁盘中选择出的分区迁移至该磁盘后,该磁盘仍然满足第三分区策略,即该磁盘的消息写入速率ByteIn<(avgByteIn*a),则可以将这样的磁盘作为第一目标迁移磁盘。
需要说明的是,当发现存在多个满足预设条件的磁盘时,可以从中选择一个磁盘来作为所述第一目标磁盘,具体选择哪个磁盘作为所述第一目标磁盘可以根据预设设定的选择规则来确定,比如,选择最小消息写入速率的磁盘作为所述第一目标磁盘,又比如,选择最小磁盘IO使用率的磁盘作为所述第一目标磁盘。
需要说明的是,上述实施例中的第一分区策略、第二分区策略以及所述第三分区策略与现有的分区策略是不同的,现有的分区策略一般是通过机架感知与轮询的方式实现对同一个Topic下的所有分区的分配。
在一示例性的实施方式中,参照图4,所述从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘包括:
步骤S40,从所述第二节点服务器的磁盘中选择预设数量的消息写入速率小的磁盘作为待迁移磁盘。
具体地,所述预设数量为预先设定的数量,比如,所述预设数量为5个。所述消息写入速率小的磁盘指的是这些选择出的磁盘的消息写入速率小于其他未选出的磁盘的消息写入速率。在具体进行选择时,可以先从所述第二节点服务器中选择消息写入速率最小的磁盘,然后选择从所述第二节点服务器中选择消息写入速率次小的磁盘,以此类推,直到选择出预设数量的磁盘。
可以理解的是,在选择待迁移的磁盘过程中,由于Kafka集群规定不能将相同的多个分区存储至一块磁盘中,因此,若发现选择出的磁盘存在与从所述第一磁盘中选择出的分区相同的分区,则会放弃选择该磁盘,然后继续选择下一个磁盘。
步骤S41,按照磁盘IO使用率从小到大的顺序判断将从所述第一磁盘中选择出的分区迁移至所述待迁移磁盘后,所述待迁移磁盘是否满足所述第三分区策略。
步骤S42,若所述待迁移磁盘满足所述第三分区策略,则将所述待迁移磁盘作为第一目标迁移磁盘。
具体地,在选出预设数量的待迁移磁盘之后,可以获取这些待迁移磁盘的IO使用率,然后按照磁盘IO使用率从小到大的顺序进行排列,之后可以按照这个排列顺序依次判断每一个待迁移磁盘是否满足所述第三分区策略。
其中,磁盘IO使用率指的是I/O请求所用的时间占总时间的百分比,用于表示磁盘等的繁忙程度。
在判断过程中,若发现当前的待迁移磁盘满足所述第三分区策略,则可以将该待迁移磁盘作为第一目标迁移磁盘,并将而无需再对其他待迁移磁盘进行判断。
本实施例中通过根据IO使用率来选择满足第三分区策略的磁盘,可以使得Kafka集群中的所有磁盘的IO使用率不会差距太大,从而可以避免一些磁盘的IO使用率太大,而影响数据分发的吞吐效率。
步骤S32,将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中。
步骤S33,更新各个节点服务器中包含的磁盘与分区的对应关系。
具体地,当将第一磁盘中选择出的分区进行迁移之后,由于该第一磁盘与所述第一目标迁移磁盘中包含的分区已经发生变化,因此,在完成分区迁移后,需要更新各个节点服务器中包含的磁盘与分区的对应关系。
步骤S23,在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略。
步骤S24,若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止。
具体地,在执行完第一分区迁移操作后,需要判断所述第一节点服务器是否仍不满足所述第一分区策略,以确定是否还需要对所述第一分区节点服务器继续执行所述第一分区迁移操作,当所述第一节点服务器仍不满足所述第一分区策略时,则会返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,以便可以再次对所述第一节点服务器执行所述第一分区迁移操作,直至所述第一节点服务器满足所述第一分区策略为止。
在本实施例中,当所述第一节点服务器满足所述第一分区策略时,则可以继续对下一个节点服务器进行判断,以确定该节点服务器是否不满足所述第一分区策略,并在判断出不满足时,则可以按照上述方式对该节点服务器中的分区进行迁移。
本实施例中,通过定时检测是否存在新的节点服务器加入至所述Kafka集群;若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止。本实施例中,通过在发现新的节点服务器加入至集群中时,重新对集群中的所有节点服务器中的分区进行分配,以便可以及时使用新增的节点服务器来进行数据缓存,从而提高数据分发的吞吐效率。
在一示例性的实施方式中,当所有的节点服务器都满足第一分区策略时,可能仍会存在某些节点服务器的一些磁盘中有很多的分区,而一些磁盘中却没有分区,或者分区数量较少,因此,在这种情况下,为了提高数据分发的吞吐效率,可以进一步对具有较多分区的磁盘进行分区迁移操作。示例性的,参照图5,在本实施例中,基于Kafka集群的分区迁移方法还包括:
步骤S50,遍历所有的磁盘,并在遍历过程中找到不满足所述第二分区策略的第二磁盘时,从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作。
具体地,计算机设备20可以通过遍历所有磁盘方式来依次判断每一个磁盘是否不满足第二分区策略,若判断出该磁盘不满足第二分区策略,则将该磁盘作为第二磁盘,之后从该第二磁盘中选择预设的主题Topic下的一个分区执行第二分区迁移操作,其中,该选择出的分区可以为该主题Topic下的任意一个分区,也可以为指定的分区,在本实施例中不作限定。在本实施例中,若判断出当前磁盘满足第二分区策略,则会继续判断下一个磁盘是否不满足第二分区策略。
在本实施中,所述第二分区迁移操作包括:从所述第二磁盘对应的节点服务器的磁盘中选择满足预设条件的磁盘作为第二目标迁移磁盘,其中,所述预设条件为在在完成分区迁移后,所述第二目标迁移磁盘满足所述第三分区策略;将从所述第二磁盘中选择出的分区迁移至所述第二目标迁移磁盘中;更新各个节点服务器中包含的磁盘与分区的对应关系。
需要说明的是,本实施例中从所述第二磁盘对应的节点服务器的磁盘中选择出第二目标迁移磁盘的具体实现方式可以和上述实施例中从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘的方式相同,在本实施例中不再赘述。
步骤S51,在执行所述第二分区迁移操作后,判断所述第二磁盘是否满足所述第二分区策略。
步骤S52,若所述第二磁盘不满足所述第二分区策略,则返回执行从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作的步骤,直至所述第二磁盘满足所述第二分区策略为止。
具体地,在执行完第二分区迁移操作后,需要判断所述第二磁盘是否仍不满足所述第二分区策略,以确定是否还需要对所述第二磁盘继续执行所述第二分区迁移操作,当所述第二磁盘仍不满足所述第二分区策略时,则会返回执行从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作的步骤,直至所述第二磁盘满足所述第二分区策略为止。
在本实施例中,当所述第二磁盘满足所述第二分区策略时,则可以继续对下一个磁盘进行判断,以确定该磁盘是否不满足所述第二分区策略,并在判断出不满足时,则可以按照上述方式对该磁盘中的分区进行迁移。
本实施例中,通过在发现节点服务器中的磁盘分配的分区不符合预设的第二分区策略时,将该磁盘中的分区搬迁至该节点服务器的其他磁盘中,这样,由于各个磁盘中分配的分区均匀,就不会出现某些磁盘的IO使用率较高的情况,从而可以提高数据分发的吞吐效率。
在一示例性的实施方式中,当所有的节点服务器都满足第一分区策略时,且所有的磁盘都满足第二分区策略,随着流量的增长,可能会存在某些磁盘不满足第三分区策略,因此,在这种情况下,为了进一步提高数据分发的吞吐效率,可以对这些不满足第三分区策略的磁盘进行分区迁移操作。示例性的,参照图6,在本实施例中,基于Kafka集群的分区迁移方法还包括:
步骤S60,遍历所有的磁盘,并在遍历过程中找到不满足所述第三分区策略的第三磁盘时,从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作。
步骤S62,在执行所述第三分区迁移操作后,判断所述第三磁盘是否满足所述第三分区策略;
步骤S62,若所述第三磁盘不满足所述第三分区策略,则返回执行从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作的步骤,直至所述第三磁盘满足所述第三分区策略为止。
具体地,计算机设备20可以通过遍历所有磁盘方式来依次判断每一个磁盘是否不满足第三分区策略,若判断出该磁盘不满足第三分区策略,则将该磁盘作为第三磁盘,之后从该第三磁盘中选择预设的主题Topic下的一个消息写入速率最大的分区执行第三分区迁移操作。在本实施例中,若判断出当前磁盘满足第三分区策略,则会继续判断下一个磁盘是否不满足第三分区策略。
在本实施例中,所述第三分区迁移操作包括:从所述第三磁盘对应的节点服务器或者其他节点服务器中找到满足搬迁条件的磁盘作为第三目标迁移磁盘,其中,所述搬迁条件为完成分区迁移后,所述第三磁盘对应的节点服务器满足所述第一分区策略,所述第三磁盘满足所述第二分区策略,且所述第三目标迁移磁盘对应的节点服务器满足所述第一分区策略、所述第三目标迁移磁盘满足所述第二分区策略与所述第三分区策略;将从所述第三磁盘中选择出的分区迁移至所述第三目标迁移磁盘中。
具体地,当找到符合搬迁条件的第三磁盘时,即可以对所述消息写入速率最大的分区进行搬迁;当找不到符合搬迁条件的第三磁盘时,表明Kafka集群整体负载已经比较高了,可以进行报警提示。
本实施例中,通过在发现不符合预设的第三分区策略的磁盘时,将该磁盘中的分区搬迁至该节点服务器的其他磁盘或其他节点服务器的磁盘,这样,就不会让某些磁盘的IO使用率较高的情况,从而可以提高数据分发的吞吐效率。
在一示例性的实施方式中,所述基于Kafka集群的分区迁移方法还包括:
在创建新的主题Topic的分区后,按照所述第一分区策略与所述第二分区策略将创建好的分区分配至节点服务器和磁盘中。
具体地,当创建好新的主题Topic的分区后,会将这些新创建好的分区均匀分配在各个节点服务器中,以及均匀分配在各个节点服务器的磁盘中。
在一示例性的实施方式中,参照图7,在本实施例中,基于Kafka集群的分区迁移方法还包括:
步骤S70,计算所述主题Topic下的所有分区在历史时间段内的平均峰值消息写入速率。
具体地,所述历史时间段为预先设定的时间段,比如,所述历史时间段为历史7天。所述平均峰值消息写入速率可以为所述主题Topic下的所有分区在7天内的峰值消息写入速率的平均值m,也可以为所述主题Topic下的所有分区在7天内的峰值消息写入速率的中位数n。
示例性的,假设所有分区的在历史时间段内的峰值消息写入速率依次为4M/s、4.6M/s、3.4M/s、5M/s,则可以将平均值m=4M/s+4.6M/s+3.4M/s+5M/s=4.25M/s作为所述平均峰值消息写入速率,也可以将中位数n=(4M/s+4.6M/s)/2=4.3M/s作为所述平均峰值消息写入速率。
步骤S71,若所述平均峰值消息写入速率大于预设阈值时,则对所述主题Topic进行分区扩容操作。
具体地,所述预设阈值为预先设定的值,该值可以根据实际情况进行设定,比如,所述预设阈值为4M/s。
在本实施例中,当发现平均峰值消息写入速率大于预设阈值时,则可以对主题Topic进行分区扩容操作,即增加主题Topic下的分区的数量,具体增加的分区的数量可以通过如下公式进行确定:
增加的分区数量=(平均峰值消息写入速率*该主题Topic下已经存在的分区数量/预设阈值)-该主题Topic下已经存在的分区数量,可以理解的是,当计算得到的值不是整数时,对该值的整数部分加一作为增加的分区数量。
在完成分区的扩容操作之后,可以按照所述第一分区策略、所述第二分区策略与所述第三分区策略将新增的分区分配至节点服务器和磁盘中。
在另一实施方式中,若所述平均峰值消息写入速率小于所述预设阈值,且在当前时刻所述主题Topic下的所有分区的平均消息写入速率大于所述预设阈值以及在当前时刻之后的预设时长内所述主题Topic下的所有分区的平均消息写入速率仍大于所述预设阈值,则对所述主题Topic进行分区扩容操作。
具体地,所述平均消息写入速率为所有分区在当前时刻的消息写入速率的平均值,比如,所有分区的在当前时刻的写入速率依次为4M/s、4.6M/s、3.4M/s、5M/s,则所述平均消息写入速率=4M/s+4.6M/s+3.4M/s+5M/s=4.25M/s。
所述预设时长为预先设定的,比如,所述预设时长为5分钟。
在本实施例中,当历史时间段内的所述平均峰值消息写入速率小于所述预设阈值,但此时又监测到当前时刻的流量突然激增时,此时为了避免是因为抖动导致(比如重启)当前时刻的流量激增,可以继续对当前时刻之后的预设时长内所述主题Topic下的所有分区的平均消息写入速率minTPByteIn进行计算,并在计算发现在这预设时长之后所述主题Topic下的所有分区的平均消息写入速率仍大于所述预设阈值,则可以对所述主题Topic进行分区扩容操作,即增加主题Topic下的分区的数量,具体增加的分区的数量可以通过如下公式进行确定:
增加的分区数量=(minTPByteIn*该主题Topic下已经存在的分区数量/预设阈值)-该主题Topic下已经存在的分区数量,可以理解的是,当计算得到的值不是整数时,对该值的整数部分加一作为增加的分区数量。
在完成分区的扩容操作之后,可以按照所述第一分区策略、所述第二分区策略与所述第三分区策略将新增的分区分配至节点服务器和磁盘中。
本实施例中,当该主题Topic下的流量发生较大的增长时,可以对主题Topic进行分区扩容,从而可以避免该Topic下的分区的消息写入速率较大,影响其他主题Topic下的流量写入至对应的分区中。
在一示例性的实施方式中,参照图8,所述基于Kafka集群的分区迁移方法还包括:
步骤S80,在接收到节点服务器发生故障的指令或接收到节点服务器下线的指令时,按照所述第一分区策略、所述第二分区策略与所述第三分区策略将所述发生故障或下线的节点服务器中的所有分区迁移至其他节点服务器和其他磁盘中,其中,所述其他节点服务器为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器,所述其他磁盘为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器的磁盘。
步骤S81,在完成所述发生故障或下线的节点服务器中的所有分区的迁移后,将所述发生故障或下线的节点服务器关闭。
本实施例中,在接收到节点服务器出现故障或者节点服务器下线(将该节点服务器从Kafka集群中删除)的指令时,为了节省能耗,可以按照所述第一分区策略、所述第二分区策略与所述第三分区策略将该节点服务器中的所有Topic下的分区迁移至其他节点服务器和其他磁盘中。在完成所有分区的迁移之后,即可以将所述发生故障或下线的节点服务器关闭。
需要说明的是,按照所述第一分区策略、所述第二分区策略与所述第三分区策略对分区进行迁移时,还是以Topic为单位进行迁移的,即依次对该节点服务器中的各个Topic下的分区进行迁移,在按照所述第一分区策略、所述第二分区策略与所述第三分区策略完成一个类别的Topic下的所有分区的迁移之后,再按照所述第一分区策略、所述第二分区策略与所述第三分区策略对其他类别的Topic下的所有分区进行迁移。
在一示例性的实施方式中,参照图9,所述基于Kafka集群的分区迁移方法还包括:
步骤S90,在接收到节点服务器的重启指令时,修改所述重启指令对应的节点服务器中包含的首领副本在分区列表中的位置信息,以使所述首领副本变为跟随者副本,其他跟随者副本变为新的首领副本。
具体地,所述分区列表为ISR(IN-SYNC Replication)列表,该列表中维护了与leader(首领副本)信息一致的follower(跟随者副本)的信息,当leader挂掉的时候就从这个ISR中选举。其中,ISR列表存放在zookeeper的Topic信息中,由kafka动态维护。
在ISR列表中,位于ISR列表最前面的分区为首领副本,位于ISR列表后面的分区为跟随者副本,因此,可以通过将首领副本的位置放置在ISR列表最后面或者不是放置在最前面的方式来实现将首领副本变为跟随者副本,其他跟随者副本变为新的首领副本。
步骤S91,对所述新的首领副本的消息写入速率进行限流处理。
具体地,所述限流处理为将新的首领副本的消息写入速率配置为原先的首领副本的消息写入速率的N倍,所述N为预先设定的值,比如,N=1.5。
步骤S92,在完成限流处理后,将所述重启指令对应的节点服务器进行重启。
具体地,在完成限流操作后,即可以对节点服务器进行重启。
在一实施方式中,当该节点服务器重启后,若该节点服务器中的所有的分区在同步上leader中的数据后,可以将该节点服务器中之前的leader进行迁回,即将follower重新变为leader。
本实施例中,通过在接收到重启指令时,将该节点服务器中之前的leader迁走,从而不会因为重启导致数据写入失败。
图10示出了本申请基于Kafka集群的分区迁移装置的框图,该基于Kafka集群的分区迁移装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。如图10所示,所述基于Kafka集群的分区迁移装置100可以包括以下组成部分:
检测模块101,用于定时检测是否存在新的节点服务器加入至所述Kafka集群。
获取模块102,用于若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;
遍历模块103,用于遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;
判断模块104,用于在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;
返回模块105,用于若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止;
其中,所述遍历模块103,还用于根据所述对应关系确定候选的第二节点服务器;从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略;将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中;更新各个节点服务器中包含的磁盘与分区的对应关系。
在一示例性的实施方式中,遍历模块103,还用于从所述第二节点服务器的磁盘中选择预设数量的消息写入速率小的磁盘作为待迁移磁盘;按照磁盘IO使用率从小到大的顺序判断将从所述第一磁盘中选择出的分区迁移至所述待迁移磁盘后,所述待迁移磁盘是否满足所述第三分区策略;若所述待迁移磁盘满足所述第三分区策略,则将所述待迁移磁盘作为第一目标迁移磁盘。
在一示例性的实施方式中,当所有的第一节点服务都满足所述第一分区策略时,遍历模块103,还用于遍历所有的磁盘,并在遍历过程中找到不满足所述第二分区策略的第二磁盘时,从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作。
判断模块104,还用于在执行所述第二分区迁移操作后,判断所述第二磁盘是否满足所述第二分区策略。
返回模块105,还用于若所述第二磁盘不满足所述第二分区策略,则返回执行从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作的步骤,直至所述第二磁盘满足所述第二分区策略为止;
其中,所述遍历模块103,还用于从所述第二磁盘对应的节点服务器的磁盘中选择满足预设条件的磁盘作为第二目标迁移磁盘,其中,所述预设条件为在在完成分区迁移后,所述第二目标迁移磁盘满足所述第三分区策略;将从所述第二磁盘中选择出的分区迁移至所述第二目标迁移磁盘中;更新各个节点服务器中包含的磁盘与分区的对应关系。
在一示例性的实施方式中,当所有的磁盘都满足所述第二分区策略时,遍历模块103,还用于遍历所有的磁盘,并在遍历过程中找到不满足所述第三分区策略的第三磁盘时,从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作;
判断模块104,还用于在执行所述第三分区迁移操作后,判断所述第三磁盘是否满足所述第三分区策略;
返回模块105,还用于若所述第三磁盘不满足所述第三分区策略,则返回执行从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作的步骤,直至所述第三磁盘满足所述第三分区策略为止;
其中,遍历模块103,还用于从所述第三磁盘对应的节点服务器或者其他节点服务器中找到满足搬迁条件的磁盘作为第三目标迁移磁盘,其中,所述搬迁条件为完成分区迁移后,所述第三磁盘对应的节点服务器满足所述第一分区策略,所述第三磁盘满足所述第二分区策略,且所述第三目标迁移磁盘对应的节点服务器满足所述第一分区策略、所述第三目标迁移磁盘满足所述第二分区策略与所述第三分区策略;
将从所述第三磁盘中选择出的分区迁移至所述第三目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
在一示例性的实施方式中,基于Kafka集群的分区迁移装置100还可以包括接收模块及关闭模块。
所述接收模块,用于在接收到节点服务器发生故障的指令或接收到节点服务器下线的指令时,按照所述第一分区策略、所述第二分区策略与所述第三分区策略将所述发生故障或下线的节点服务器中的所有分区迁移至其他节点服务器和其他磁盘中,其中,所述其他节点服务器为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器,所述其他磁盘为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器的磁盘。
关闭模块,用于在完成所述发生故障或下线的节点服务器中的所有分区的迁移后,将所述发生故障或下线的节点服务器关闭。
在一示例性的实施方式中,基于Kafka集群的分区迁移装置100还可以包括修改模块、限流模块,重启模块。
所述修改模块,用于在接收到节点服务器的重启指令时,修改所述重启指令对应的节点服务器中包含的首领副本在分区列表中的位置信息,以使所述首领副本变为跟随者副本,其他跟随者副本变为新的首领副本。
所述限流模块,用于对所述新的首领副本的消息写入速率进行限流处理。
所述重启模块,用于在完成限流处理后,将所述重启指令对应的节点服务器进行重启。
图11示意性示出了根据本申请实施例的适于实现基于Kafka集群的分区迁移方法的计算机设备的硬件架构示意图。本实施例中,计算机设备20是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是网关等数据转发设备。如图11所示,计算机设备20至少包括但不限于:可通过***总线相互通信连接存储器21、处理器22、网络接口23。其中:
存储器21至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储模块,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(FlashCard)等。当然,存储器21还可以既包括计算机设备20的内部存储模块也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备20的操作***和各类应用软件,例如基于Kafka集群的分区迁移方法的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作,例如执行与计算机设备20进行数据交互或者通信相关的控制和处理等。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据。
网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在计算机设备20与其他计算机设备之间建立通信连接。例如,网络接口23用于通过网络将计算机设备20与外部终端相连,在计算机设备20与外部终端之间的建立基于Kafka集群的分区迁移通道和通信连接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯***(Global System of Mobile communication,简称为GSM)、宽带码分多址(WidebandCode Division Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图11仅示出了具有部件21-23的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器21中的基于Kafka集群的分区迁移方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的基于Kafka集群的分区迁移方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作***和各类应用软件,例如实施例中的基于Kafka集群的分区迁移方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于Kafka集群的分区迁移方法,所述Kafka集群包括多个节点服务器,每一个节点服务器包括多个磁盘,其特征在于,所述方法包括:
定时检测是否存在新的节点服务器加入至所述Kafka集群;
若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;
遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;
在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;
若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止;
其中,所述第一分区迁移操作包括:
根据所述对应关系确定候选的第二节点服务器;
从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略;
将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
2.根据权利要求1所述的基于Kafka集群的分区迁移方法,其特征在于,所述从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘包括:
从所述第二节点服务器的磁盘中选择预设数量的消息写入速率小的磁盘作为待迁移磁盘;
按照磁盘IO使用率从小到大的顺序判断将从所述第一磁盘中选择出的分区迁移至所述待迁移磁盘后,所述待迁移磁盘是否满足所述第三分区策略;
若所述待迁移磁盘满足所述第三分区策略,则将所述待迁移磁盘作为第一目标迁移磁盘。
3.根据权利要求1所述的基于Kafka集群的分区迁移方法,其特征在于,当所有的第一节点服务都满足所述第一分区策略时,所述基于Kafka集群的分区迁移方法还包括:
遍历所有的磁盘,并在遍历过程中找到不满足所述第二分区策略的第二磁盘时,从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作;
在执行所述第二分区迁移操作后,判断所述第二磁盘是否满足所述第二分区策略;
若所述第二磁盘不满足所述第二分区策略,则返回执行从所述第二磁盘中选择所述主题Topic下的一个分区执行第二分区迁移操作的步骤,直至所述第二磁盘满足所述第二分区策略为止;
其中,所述第二分区迁移操作包括:
从所述第二磁盘对应的节点服务器的磁盘中选择满足预设条件的磁盘作为第二目标迁移磁盘,其中,所述预设条件为在在完成分区迁移后,所述第二目标迁移磁盘满足所述第三分区策略;
将从所述第二磁盘中选择出的分区迁移至所述第二目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
4.根据权利要求3所述的基于Kafka集群的分区迁移方法,其特征在于,当所有的磁盘都满足所述第二分区策略时,所述基于Kafka集群的分区迁移方法还包括:
遍历所有的磁盘,并在遍历过程中找到不满足所述第三分区策略的第三磁盘时,从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作;
在执行所述第三分区迁移操作后,判断所述第三磁盘是否满足所述第三分区策略;
若所述第三磁盘不满足所述第三分区策略,则返回执行从所述第三磁盘中选择所述主题Topic下的消息写入速率最大的分区执行第三分区迁移操作的步骤,直至所述第三磁盘满足所述第三分区策略为止;
其中,所述第三分区迁移操作包括:
从所述第三磁盘对应的节点服务器或者其他节点服务器中找到满足搬迁条件的磁盘作为第三目标迁移磁盘,其中,所述搬迁条件为完成分区迁移后,所述第三磁盘对应的节点服务器满足所述第一分区策略,所述第三磁盘满足所述第二分区策略,且所述第三目标迁移磁盘对应的节点服务器满足所述第一分区策略、所述第三目标迁移磁盘满足所述第二分区策略与所述第三分区策略;
将从所述第三磁盘中选择出的分区迁移至所述第三目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
5.根据权利要求1至4任一项所述的基于Kafka集群的分区迁移方法,其特征在于,所述基于Kafka集群的分区迁移方法还包括:
计算所述主题Topic下的所有分区在历史时间段内的平均峰值消息写入速率;
若所述平均峰值消息写入速率大于预设阈值时,则对所述主题Topic进行分区扩容操作。
6.根据权利要求1至4任一项所述的基于Kafka集群的分区迁移方法,其特征在于,所述基于Kafka集群的分区迁移方法还包括:
在接收到节点服务器发生故障的指令或接收到节点服务器下线的指令时,按照所述第一分区策略、所述第二分区策略与所述第三分区策略将所述发生故障或下线的节点服务器中的所有分区迁移至其他节点服务器和其他磁盘中,其中,所述其他节点服务器为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器,所述其他磁盘为所述Kafka集群中除所述发生故障或下线的节点服务器之外的节点服务器的磁盘;
在完成所述发生故障或下线的节点服务器中的所有分区的迁移后,将所述发生故障或下线的节点服务器关闭。
7.根据权利要求1至4任一项所述的基于Kafka集群的分区迁移方法,其特征在于,所述基于Kafka集群的分区迁移方法还包括:
在接收到节点服务器的重启指令时,修改所述重启指令对应的节点服务器中包含的首领副本在分区列表中的位置信息,以使所述首领副本变为跟随者副本,其他跟随者副本变为新的首领副本;
对所述新的首领副本的消息写入速率进行限流处理;
在完成限流处理后,将所述重启指令对应的节点服务器进行重启。
8.一种基于Kafka集群的分区迁移装置,所述Kafka集群包括多个节点服务器,每一个节点服务器包括多个磁盘,其特征在于,所述装置包括:
检测模块,用于定时检测是否存在新的节点服务器加入至所述Kafka集群;
获取模块,用于若检测到存在新的节点服务器加入至所述Kafka集群,则获取各个节点服务器中包含的磁盘与分区的对应关系以及获取各个磁盘中包含的所有分区的消息写入速率;
遍历模块,用于遍历所有的节点服务器,并在遍历过程中找到不满足预设的第一分区策略的第一节点服务器时,从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作;
判断模块,用于在执行所述第一分区迁移操作后,判断所述第一节点服务器是否满足所述第一分区策略;
返回模块,用于若所述第一节点服务不满足所述第一分区策略,则返回执行从所述第一节点服务器中选择不满足预设的第二分区策略的第一磁盘,并从所述第一磁盘中选择预设的主题Topic下的一个分区执行第一分区迁移操作的步骤,直至所述第一节点服务器满足所述第一分区策略为止;
其中,所述第一分区迁移操作包括:
根据所述对应关系确定候选的第二节点服务器;
从所述第二节点服务器的磁盘中选择满足预设条件的磁盘作为第一目标迁移磁盘,其中,所述预设条件为在完成分区迁移后,所述第一目标迁移磁盘满足预设的第三分区策略;
将从所述第一磁盘中选择出的分区迁移至所述第一目标迁移磁盘中;
更新各个节点服务器中包含的磁盘与分区的对应关系。
9.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时用于实现权利要求1至7任一项所述基于Kafka集群的分区迁移方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时用于实现权利要求1至7任一项所述基于Kafka集群的分区迁移方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011192159.XA CN112256433B (zh) | 2020-10-30 | 2020-10-30 | 基于Kafka集群的分区迁移方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011192159.XA CN112256433B (zh) | 2020-10-30 | 2020-10-30 | 基于Kafka集群的分区迁移方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256433A true CN112256433A (zh) | 2021-01-22 |
CN112256433B CN112256433B (zh) | 2022-04-05 |
Family
ID=74268653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011192159.XA Active CN112256433B (zh) | 2020-10-30 | 2020-10-30 | 基于Kafka集群的分区迁移方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256433B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
CN113438281A (zh) * | 2021-06-05 | 2021-09-24 | 济南浪潮数据技术有限公司 | 一种分布式消息队列的存储方法、装置、设备及可读介质 |
CN115543222A (zh) * | 2022-11-30 | 2022-12-30 | 苏州浪潮智能科技有限公司 | 一种存储优化方法、***、设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103229487A (zh) * | 2012-12-27 | 2013-07-31 | 华为技术有限公司 | 分布式存储***中的分区平衡方法、装置及服务器 |
CN109408489A (zh) * | 2018-09-20 | 2019-03-01 | 中国联合网络通信集团有限公司 | 数据稽核方法及*** |
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
CN111580959A (zh) * | 2020-04-26 | 2020-08-25 | Oppo(重庆)智能科技有限公司 | 一种数据写入方法、数据写入装置、服务器及存储介质 |
US10761813B1 (en) * | 2018-10-01 | 2020-09-01 | Splunk Inc. | Assisted visual programming for iterative publish-subscribe message processing system |
CN111694518A (zh) * | 2020-05-29 | 2020-09-22 | 苏州浪潮智能科技有限公司 | 一种集群扩容或缩容后数据自动迁移的方法、装置、设备 |
-
2020
- 2020-10-30 CN CN202011192159.XA patent/CN112256433B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103229487A (zh) * | 2012-12-27 | 2013-07-31 | 华为技术有限公司 | 分布式存储***中的分区平衡方法、装置及服务器 |
CN109408489A (zh) * | 2018-09-20 | 2019-03-01 | 中国联合网络通信集团有限公司 | 数据稽核方法及*** |
US10761813B1 (en) * | 2018-10-01 | 2020-09-01 | Splunk Inc. | Assisted visual programming for iterative publish-subscribe message processing system |
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
CN111580959A (zh) * | 2020-04-26 | 2020-08-25 | Oppo(重庆)智能科技有限公司 | 一种数据写入方法、数据写入装置、服务器及存储介质 |
CN111694518A (zh) * | 2020-05-29 | 2020-09-22 | 苏州浪潮智能科技有限公司 | 一种集群扩容或缩容后数据自动迁移的方法、装置、设备 |
Non-Patent Citations (2)
Title |
---|
北国风光8765: "Kafka集群扩容、分区重新分配、SparkStreaming自适应上游kafka topic partition数目变化", 《CSDN,HTTP://BLOG.CSDN.NET/QQ_22473611/ARTICLE/DETAILS/105121882》 * |
徐玉景: "基于Kafka的全链路流数据处理平台的设计与实现", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
CN113438281A (zh) * | 2021-06-05 | 2021-09-24 | 济南浪潮数据技术有限公司 | 一种分布式消息队列的存储方法、装置、设备及可读介质 |
CN113438281B (zh) * | 2021-06-05 | 2023-02-28 | 济南浪潮数据技术有限公司 | 一种分布式消息队列的存储方法、装置、设备及可读介质 |
CN115543222A (zh) * | 2022-11-30 | 2022-12-30 | 苏州浪潮智能科技有限公司 | 一种存储优化方法、***、设备及可读存储介质 |
CN115543222B (zh) * | 2022-11-30 | 2023-03-10 | 苏州浪潮智能科技有限公司 | 一种存储优化方法、***、设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112256433B (zh) | 2022-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112256433B (zh) | 基于Kafka集群的分区迁移方法和装置 | |
CN107943421B (zh) | 一种基于分布式存储***的分区划分方法及装置 | |
US11455193B2 (en) | Method for deploying virtual machines in cloud computing systems based on predicted lifetime | |
US10242022B1 (en) | Systems and methods for managing delayed allocation on clustered file systems | |
CN108780386B (zh) | 一种数据存储的方法、装置和*** | |
EP3577561B1 (en) | Resource management for virtual machines in cloud computing systems | |
CN110427284B (zh) | 数据处理方法、分布式***、计算机***和介质 | |
CN112269661B (zh) | 基于Kafka集群的分区迁移方法和装置 | |
CN111309644B (zh) | 一种内存分配方法、装置和计算机可读存储介质 | |
CN107870802B (zh) | 一种虚拟机迁移方法和装置 | |
CN105069152B (zh) | 数据处理方法及装置 | |
CN111552701B (zh) | 确定分布式集群中数据一致性的方法及分布式数据*** | |
CN111966289A (zh) | 基于Kafka集群的分区优化方法和*** | |
CN110377664B (zh) | 数据同步方法、装置、服务器及存储介质 | |
CN111198845B (zh) | 一种数据迁移方法、可读存储介质及计算设备 | |
CN111291062B (zh) | 数据同步写入方法、装置、计算机设备及存储介质 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN107943615B (zh) | 基于分布式集群的数据处理方法与*** | |
CN115167992A (zh) | 任务处理方法、***、装置、服务器、介质及程序产品 | |
CN112631994A (zh) | 数据迁移方法及*** | |
CN110825732A (zh) | 数据查询方法、装置、计算机设备和可读存储介质 | |
CN103685359B (zh) | 数据处理方法及装置 | |
CN106991121B (zh) | 超融合数据存储方法及*** | |
CN115033551A (zh) | 一种数据库迁移方法、装置、电子设备及存储介质 | |
CN113051143A (zh) | 服务负载均衡服务器的探测方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |