一种针对Kafka积压队列追赶的方法、系统及介质与流程

文档序号:28265759发布日期:2021-12-31 18:23阅读:109来源:国知局
一种针对Kafka积压队列追赶的方法、系统及介质与流程
一种针对kafka积压队列追赶的方法、系统及介质
技术领域
1.本发明涉及数据处理技术领域,特别指一种针对kafka积压队列追赶的方法、系统及介质。


背景技术:

2.现有对消息队列消息进行追赶的方式是主要是通过运维人员利用消息队列中间件现有的运维平台或者api手动指定消费起始位置来实现。目前针对积压队列追赶的方式都为人工进行监控与调整发现,无法达到系统根据流量自适应调节自动追赶与停止追赶,存在效率比较低下等问题。且现有的kafka消费是采用的单主题组内单消费者消费模式,一旦消费者消费能力跟不上生产者生产数据能力,则相关的主题分区就会产生积压数据,从而导致数据时效性得不到保障。


技术实现要素:

3.本发明要解决的技术问题,在于提供一种针对kafka积压队列追赶的方法、系统及介质,实现追赶者灵活自动化设置,提高数据处理效率和数据时效性。
4.第一方面,本发明提供了一种针对kafka积压队列追赶的方法,所述方法包括:
5.步骤s10、启动消费者,并添加至消费者列表,传入一个标志参数以确定该消费者是否为追赶者,如果为追赶者,则从最新的消费偏移量处开始消费并记录该偏移量,否则,消费者按照步骤s20的正常消费流程消费数据;
6.步骤s20、启动正常消费流程,消费者开始循环从kafka拉取数据,在拉取数据时,计算当前消费者偏移量和消息队列最大偏移量之间的差值,若所述差值大于一阈值,则将该消费者设置为延迟状态,若消费者已经消费到追赶者启动时的偏移量并且消费者状态为延迟状态时,则将消费者设置为延迟恢复状态;若所述差值小于或等于所述阈值,则返回步骤s20继续执行;
7.步骤s30、定时扫描消费者列表,若发现消费者的状态为延迟状态,则启动一个针对同一队列的新消费者作为追赶者进行消费,并将所述消费者与其对应的追赶者存储在映射里;
8.步骤s40、定时扫描消费者与追赶者的映射,若发现消费者的状态为延迟恢复状态,则获取追赶者的消息队列分区当前消费偏移量,关闭追赶者,将追赶者的当前消费偏移量设置给消费者,所述消费者从所述追赶者消费的位置继续消费,并将消费者设置为正常状态。
9.进一步的,所述标志参数为一个布尔参数,取true时代表其为追赶者,反之为消费者。
10.进一步的,所述最新的消费偏移量指的是当前消息队列最新数据的绝对值位置。
11.进一步的,所述步骤s20中,在消费者开始循环从kafka拉取数据时,首先判断消息队列数据生产者生产速度增速是否大于消息队列消费者增速,若是,再进一步计算当前消
费者偏移量和消息队列最大偏移量之间的差值,否则,不计算所述差值。
12.第二方面,本发明提供了一种针对kafka积压队列追赶的系统,所述系统包括:
13.系统启动模块,用于启动消费者,并添加至消费者列表,传入一个标志参数以确定该消费者是否为追赶者,如果为追赶者,则从最新的消费偏移量处开始消费并记录该偏移量,否则,消费者按照步骤s20的正常消费流程消费数据;
14.正常消费模块,用于启动正常消费流程,消费者开始循环从kafka拉取数据,在拉取数据时,计算当前消费者偏移量和消息队列最大偏移量之间的差值,若所述差值大于一阈值,则将该消费者设置为延迟状态,若消费者已经消费到追赶者启动时的偏移量并且消费者状态为延迟状态时,则将消费者设置为延迟恢复状态;若所述差值小于或等于所述阈值,则返回正常消费模块继续执行;
15.追赶者添加模块,用于定时扫描消费者列表,若发现消费者的状态为延迟状态,则启动一个针对同一队列的新消费者作为追赶者进行消费,并将所述消费者与其对应的追赶者存储在映射里;以及
16.延迟恢复模块,用于定时扫描消费者与追赶者的映射,若发现消费者的状态为延迟恢复状态,则获取追赶者的消息队列分区当前消费偏移量,关闭追赶者,将追赶者的当前消费偏移量设置给消费者,所述消费者从所述追赶者消费的位置继续消费,并将消费者设置为正常状态。
17.进一步的,所述标志参数为一个布尔参数,取true时代表其为追赶者,反之为消费者。
18.进一步的,所述最新的消费偏移量指的是当前消息队列最新数据的绝对值位置。
19.进一步的,所述正常消费模块中,在消费者开始循环从kafka拉取数据时,首先判断消息队列数据生产者生产速度增速是否大于消息队列消费者增速,若是,再进一步计算当前消费者偏移量和消息队列最大偏移量之间的差值,否则,不计算所述差值。
20.第三方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述的方法。
21.本发明的优点在于:自动化设置追赶者对积压队列进行消费,并设置自动停止机制,减少人工手动操作,提高数据处理时效性;可根据系统负载自定义阈值,灵活性更高。
附图说明
22.下面参照附图结合实施例对本发明作进一步的说明。
23.图1是本发明一种针对kafka积压队列追赶的方法的流程图。
24.图2是本发明一种针对kafka积压队列追赶的系统框图。
25.图3为本发明介质的结构示意图。
26.图4为本发明消费者正常状态下的消费结构示意图。
27.图5为本发明消费者延迟状态下的消费结构示意图。
28.图6为本发明消费者已经消费到追赶者启动的位置时的结构示意图。
29.图7为本发明消费者从延迟恢复状态转为正常状态时的消费示意图。
30.图8为本发明系统启动与消费者正常消费的执行流程图。
31.图9为本发明定时扫描消费者延迟状态的流程示意图。
32.图10为本发明定时扫描映射的流程示意图。
具体实施方式
33.实施例一
34.请参照图1、图4至图10所示,本发明提供了一种针对kafka积压队列追赶的方法,所述方法包括:
35.步骤s10、启动消费者c1,并添加至消费者列表,消费消息队列q1的数据,传入一个标志参数以确定该消费者是否为追赶者,如果为追赶者,则从最新的消费偏移量处开始消费并记录该偏移量,否则,消费者按照步骤s20的正常消费流程消费数据;
36.步骤s20、启动正常消费流程,消费者开始循环从kafka拉取数据,在拉取数据时,计算当前消费者偏移量和消息队列最大偏移量之间的差值(即对二者位置进行做差,取其绝对值,得到一个延迟大小,即为该差值),若所述差值大于一阈值(可根据需要进行调整),则将该消费者设置为延迟状态,若消费者已经消费到追赶者启动时的偏移量并且消费者状态为延迟状态时,则将消费者设置为延迟恢复状态;若所述差值小于或等于所述阈值,则返回步骤s20继续执行;
37.步骤s30、定时扫描消费者列表,若发现消费者的状态为延迟状态,则启动一个针对同一队列的新消费者作为追赶者进行消费,通过传递一个布尔参数p1=true,标志追赶者为追赶者c2,此时追赶者c2会从消息队列最新偏移量开始消费,即消费最新数据,消费者则继续按照原有流程进行消费,并将消费者引用作为key,对应的追赶者作为value,存储在映射里;
38.步骤s40、定时扫描消费者与追赶者的映射,若发现消费者的状态为延迟恢复状态,则获取追赶者c2的消息队列分区当前消费偏移量,关闭追赶者,将追赶者的当前消费偏移量设置给消费者c1,所述消费者c1从所述追赶者消费的位置继续消费,并将消费者设置为正常状态。
39.较佳的,所述标志参数为一个布尔参数,取true时代表其为追赶者,反之为消费者。
40.较佳的,所述最新的消费偏移量指的是当前消息队列最新数据的绝对值位置。
41.较佳的,所述步骤s20中,在消费者开始循环从kafka拉取数据时,首先判断消息队列数据生产者生产速度增速是否大于消息队列消费者增速,若是,再进一步计算当前消费者偏移量和消息队列最大偏移量之间的差值,否则,不计算所述差值。
42.基于同一发明构思,本技术还提供了与实施例一中的方法对应的装置,详见实施例二。
43.实施例二
44.请参照图2、图4至图10所示,本发明提供了一种针对kafka积压队列追赶的系统,所述系统包括:
45.系统启动模块,用于启动消费者c1,并添加至消费者列表,消费消息队列q1的数据,传入一个标志参数以确定该消费者是否为追赶者,如果为追赶者,则从最新的消费偏移量处开始消费并记录该偏移量,否则,消费者按照步骤s20的正常消费流程消费数据;
46.正常消费模块,用于启动正常消费流程,消费者开始循环从kafka拉取数据,在拉
取数据时,计算当前消费者偏移量和消息队列最大偏移量之间的差值(即对二者位置进行做差,取其绝对值,得到一个延迟大小,即为该差值),若所述差值大于一阈值(可根据需要进行调整),则将该消费者设置为延迟状态,若消费者已经消费到追赶者启动时的偏移量并且消费者状态为延迟状态时,则将消费者设置为延迟恢复状态;若所述差值小于或等于所述阈值,则返回正常消费模块继续执行;
47.追赶者添加模块,用于定时扫描消费者列表,若发现消费者的状态为延迟状态,则启动一个针对同一队列的新消费者作为追赶者进行消费,通过传递一个布尔参数p1=true,标志追赶者为追赶者c2,此时追赶者c2会从消息队列最新偏移量开始消费,即消费最新数据,消费者则继续按照原有流程进行消费,并将消费者引用作为key,对应的追赶者作为value,存储在映射里;以及
48.延迟恢复模块,用于定时扫描消费者与追赶者的映射,若发现消费者的状态为延迟恢复状态,则获取追赶者c2的消息队列分区当前消费偏移量,关闭追赶者,将追赶者的当前消费偏移量设置给消费者c1,所述消费者c1从所述追赶者消费的位置继续消费,并将消费者设置为正常状态。
49.较佳的,所述标志参数为一个布尔参数,取true时代表其为追赶者,反之为消费者。
50.较佳的,所述最新的消费偏移量指的是当前消息队列最新数据的绝对值位置。
51.较佳的,所述正常消费模块中,在消费者开始循环从kafka拉取数据时,首先判断消息队列数据生产者生产速度增速是否大于消息队列消费者增速,若是,再进一步计算当前消费者偏移量和消息队列最大偏移量之间的差值,否则,不计算所述差值。
52.由于本发明实施例二所介绍的装置,为实施本发明实施例一的方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
53.基于同一发明构思,本技术提供了实施例一对应的存储介质,详见实施例三。
54.实施例三
55.本实施例提供一种计算机可读存储介质,如图3所示,其上存储有计算机程序,该计算机程序被处理器执行时,可以实现实施例一中任一实施方式。
56.本技术实施例中提供的技术方案,至少具有如下技术效果或优点:对积压队列设置新增消费追赶者,使得追赶者从最新偏移量处拉取消息,消费者也同时继续拉取队列中的消息,实现自动化追赶,加快积压的队列的消费,同时设置自动恢复机制,缓解数据冲突,提高系统整体的处理效率,提高数据时效性。
57.虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1