使用KAFKA的数据消费方法、装置、终端设备及介质与流程

文档序号:27625360发布日期:2021-11-29 15:11阅读:118来源:国知局
使用KAFKA的数据消费方法、装置、终端设备及介质与流程
使用kafka的数据消费方法、装置、终端设备及介质
技术领域
1.本发明涉及金融科技(fintech)技术领域,尤其涉及一种使用kafka的数据消费方法、装置、终端设备以及计算机存储介质。


背景技术:

2.随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性以及稳定性等要求,也对技术提出了更高的要求。
3.目前,在大数据领域主流采用kafka(一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据)实时或准实时消费数据,主要是基于sparkstreaming(一个对实时数据流进行高通量、容错处理的流式处理系统)或者apache flink(一种开源流处理框架,其核心是用java和scala编写的分布式流数据流引擎)等大数据组件的实时流计算框架来实现。
4.然而,基于大数据组件的实时流计算框架不仅接入门槛比较高,而且还需要消耗机器成本和付诸大量人力资源来进行运维,从而导致采用kafka进行数据消费的成本高。


技术实现要素:

5.本发明的主要目的在于提供一种使用kafka的数据消费方法、装置、终端设备以及计算机存储介质,旨在解决现有使用kafka进行数据消费时,基于大数据组件的实时流计算框架导致数据消费成本高的技术问题。
6.为实现上述目的,本发明提供一种使用kafka的数据消费方法,所述使用kafka的数据消费方法应用于kafka消费端,所述使用kafka的数据消费方法包括以下步骤:
7.按照实例注册规则注册数据消费实例,其中,所述实例注册规则包括:单个kafka主题的单个partition对应一个数据消费实例的一个消费线程;
8.根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作;
9.保持负载均衡状态供所述数据消费实例进行数据消费。
10.此外,为实现上述目的,本发明还提供一种使用kafka的数据消费装置,所述使用kafka的数据消费装置应用于kafka消费端,所述使用kafka的数据消费装置包括:
11.实例注册模块,用于按照实例注册规则注册数据消费实例,其中,所述实例注册规则包括:单个kafka主题的单个partition对应一个数据消费实例的一个消费线程;
12.负载均衡模块,用于根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作;
13.数据消费模块,用于保持负载均衡状态供所述数据消费实例进行数据消费。
14.其中,本发明使用kafka的数据消费装置的各个功能模块在运行时实现如上所述的使用kafka的数据消费方法的步骤。
15.此外,为实现上述目的,本发明还提供一种终端设备,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的使用kafka的数据消费程序,所述使用kafka的数据消费程序被所述处理器执行时实现如上所述的使用kafka的数据消费方法的步骤。
16.此外,为实现上述目的,本发明还提供一种计算机存储介质,所述计算机存储介质上存储有使用kafka的数据消费程序,所述使用kafka的数据消费程序被处理器执行时实现如上所述的使用kafka的数据消费方法的步骤。
17.此外,为实现上述目的,本发明还提供计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上所述的使用kafka的数据消费方法的步骤。
18.本发明提供一种使用kafka的数据消费方法、装置、终端设备、计算机存储介质以及计算机程序产品,通过kafka消费端按照实例注册规则注册数据消费实例,其中,所述实例注册规则包括:单个kafka主题的单个partition对应一个数据消费实例的一个消费线程;根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作;保持负载均衡状态供所述数据消费实例进行数据消费。
19.本发明在使用kafka进行数据消费时,先通过kafka消费端按照单个kafka主题的单个partition只能对应一个数据消费实例一个消费线程的实例注册规则,在当前kafka消费端上注册数据消费实例,然后,kafka消费端即根据所注册的全部数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作,最后,kafka消费端在保持负载均衡状态供已经注册的全部数据消费实例通过对应的partition进行数据消费。
20.本发明相比于传统依赖大数据组件来采用kafka进行数据消费的方式,仅通过kafka消费端注册数据消费实例,并基于数据消费端各自的权重和对应的kafka主题的partition进行负载均衡操作,进而保持负载均衡状态来供注册的数据消费实例进行数据消费。如此,实现了使用kafka轻量级、高可用的数据消费方案,无需依赖sparkstreaming或者apache flink等大数据组件的实时流计算框架,从而降低了数据消费的成本。
附图说明
21.图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图;
22.图2为本发明使用kafka的数据消费方法一实施例的流程示意图;
23.图3为本发明使用kafka的数据消费装置一实施例的功能模块示意图。
24.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
25.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
26.参照图1,图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图。
27.本发明实施例终端设备可以是被配置作为供数据消费实例进行数据消费的kafka消费端的终端设备,该终端设备可以是服务器、智能手机、pc(personal computer,个人计
算机)、平板电脑、便携计算机等等。
28.如图1所示,该终端设备可以包括:处理器1001,例如cpu,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi

fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non

volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
29.本领域技术人员可以理解,图1中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
30.如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及使用kafka的数据消费程序。
31.在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的使用kafka的数据消费程序,并执行以下使用kafka的数据消费方法的各实施例。
32.基于上述硬件结构,提出本发明使用kafka的数据消费方法的各实施例。
33.需要说明的是,目前,在大数据领域主流采用kafka实时或准实时消费数据,主要是基于sparkstreaming或者apache flink等大数据组件的实时流计算框架来实现。
34.然而,基于大数据组件的实时流计算框架不仅接入门槛比较高,而且还需要消耗机器成本和付诸大量人力资源来进行运维,从而导致采用kafka进行数据消费的成本高。
35.针对上述现象,本发明提供一种使用kafka的数据消费方法。请参照图2,图2为本发明使用kafka的数据消费方法第一实施例的流程示意图,在本实施例中,该使用kafka的数据消费方法应用于上述被配置为kafka消费端的终端设备,该终端设备在数据消费实例与待消费数据之间担任一个消息中间件的角色。本发明使用kafka的数据消费方法包括:
36.步骤s10,按照实例注册规则注册数据消费实例,其中,所述实例注册规则包括:单个kafka主题的单个partition对应一个数据消费实例的一个消费线程;
37.被配置kafka消费端的终端设备按照单个kafka主题的单个partition只能对应一个数据消费实例的一个消费线程,而单个数据消费实例可以通过创建多个消费线程来同时对应多个partition的实例注册规则,在当前kafka消费端对应的注册中心注册数据消费实例。
38.需要说明的是,在本实施例中,partition为一种用于与数据消费实例相对接,从而为该数据消费实例提供待消费数据的数据传递接口。实例注册规则为预先设定好用于限定在kafka消费端上注册数据消费实例时,该数据消费实例各自与该kafka消费端上所配置的kafka主题的partition之间的关联关系,即,kafka消费端上的某一个kafka主题的单个partition,能且只能够对应一个数据消费实例的消费线程,而一个数据消费实例,则可以通过创建多个消费线程来同时对应多个partition,该多个partition可以是属于同一个kafka主题的,或者,该多个partition也可以是分别属于多个kafka主题的。
39.具体地,例如,被配置作为kafka消费端的终端设备通过获取该预先设定好的实例
注册规则,并按照该实例注册规则在当前kafka消费端对应的注册中心上注册一个或者多个数据消费实例。且终端设备所注册的一个数据消费实例,创建一个消费线程来对应当前kafka消费端上唯一一个kafka主题的一个partition用以获取待消费数据进行消费处理,或者,该一个数据消费实例,同时创建了多个消费线程来分别对应当前kafka消费端上一个kafka主题的全部多个partition(或者多个kafka主题的全部多个partition)用以获取待消费数据进行消费处理,还或者,终端设备所注册的多个数据消费实例,各自分别对应创建了一个或者多个消费线程来对对应当前kafka消费端上多个kafka主题的多个partition用以获取待消费数据进行消费处理。
40.需要说明的是,在本实施例中,基于kafka消费端上配置的某一个kafka主题的一个partition所提供的待消费数据不能同时或者异步的被两个数据消费实例进行消费处理造成重复,因此,须确保该某一个kafka主题的一个partition只能够对应一个数据消费实例。
41.具体地,例如,在本实施例中,被配置作为kafka消费端的终端设备通过一个分布式锁,来控制当前kafka消费端上所配置的单个kafka主题的单个partition只能被一个应用实例消费数据。而单个数据消费实例可以同时获取多个partition各自的分布式锁来进行数据消费。
42.进一步地,在一种可行的实施例中,当被配置作为kafka消费端的终端设备已经注册的某一个数据消费实例异常或者应该下线时,终端设备将释放该数据消费实例所抢到的对应一个或者多个partition的分布式锁,以供其它数据消费实例抢占来接管该一个或者多个partition的数据。
43.步骤s20,根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作;
44.步骤s30,保持负载均衡状态供所述数据消费实例进行数据消费。
45.被配置作为kafka消费端的终端设备在完成数据消费实例的注册过程之后,即根据当前上线的全部数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作,从而保证该全部数据消费实例各自均在负载均衡状态下针对各自对接的partition数据进行消费处理。
46.需要说明的是,在本实施例中,被配置作为kafka消费端的终端设备内置或者外接有一个注册中心,终端设备按照实例注册规则所注册的每一个数据消费实例,各自在启动的时候均需要向注册中心登记表示:该数据消费实例已启动,并可以开始消费kafka的数据,如此,该注册中心即向在当前时刻已经启动上线进行数据消费的其他各个数据消费实例下发通知,以告知该各个数据消费实例有新的实例上线并可以分担处理kafka的数据。此时,终端设备即开始根据当前启动上线的全部数据消费实例各自的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来针对该全部数据消费实例进行负载均衡操作。
47.进一步地,在一种可行的实施例中,上述步骤s20,可以包括:
48.步骤s201,检测当前上线的全部所述数据消费实例,并根据每一个所述数据消费实例各自的权重计算权重总值;
49.需要说明的是,在本实施例中数据消费实例的权重用于标识该数据消费实例对接
partition进行数据消费处理的性能,该权重越高则表明该数据消费实例进行数据消费处理的性能越高,即可以对接更多的partition进行数据消费处理。
50.被配置作为kafka消费端的终端设备在所注册的数据消费实例进行数据消费的过程当中,检测在当前时刻启动上线从而可以进行数据消费的全部数据消费实例,从而获取该全部数据消费实例中,每一个数据消费实例各自的权重来计算一个权重总值。
51.进一步地,在一种可行的实施例中,被配置作为kafka消费端的终端设备在注册数据消费实例时可以设定该数据消费实例的权重均相同,而基于所注册数据消费终端各自机器性能的差异,各数据消费终端各种的权重也可以是不同的。针对此,上述“根据每一个所述数据消费实例各自的权重计算权重总值”的步骤可以包括:
52.检测每一个所述数据消费实例各自的权重是否相同;
53.若是,则基于全部所述数据消费实例的个数乘以所述权重以计算得到所述权重总值;
54.若否,则基于全部所述数据消费实例各自的权重进行叠加以计算得到所述权重总值。
55.被配置作为kafka消费端的终端设备在获取得到在当前时刻启动上线以进行数据消费的全部数据消费实例各自的权重之后,终端设备进一步检测该各个权重的大小是否相同。从而,终端设备在检测到全部数据消费实例各自的权重均相同时,终端设备即基于所检测到的该全部数据消费实例的个数,来乘以该相同的权重以计算得到权重总值。或者,终端设备在检测到全部数据消费实例中,每一个数据消费实例各自的权重有任一个与其它权重不相同时,终端设备即基于所检测到的该全部数据消费实例各自的权重逐一进行叠加,以此来计算得到权重总值。
56.具体地,例如,假定被配置作为kafka消费端的终端设备在注册数据消费实例时设定该数据消费实例的权重均为o(o=1),则终端设备在通过注册中心拉取登记的总的数据消费实例(终端设备在每注册一个数据消费实例即在该注册中心登记该数据消费实例的相关信息)的个数为a时,终端设备即可计算得到权重总值为q=a*o。
57.或者,假定被配置作为kafka消费端的终端设备在检测到所注册的数据消费实例各自的权重o相互之间不相同时,终端设备即通过获取该a个数据消费实例各自的权重o,通过累加方式计算得到权重总值为
58.步骤s202,比对所述权重总值、所述数据消费实例对应的kafka主题的partition个数,和所述数据消费实例处理所述kafka主题的partition的线程数,得到数据比对结果;
59.步骤s203,根据所述数据比对结果进行负载均衡操作。
60.需要说明的是,在本实施例中,负载均衡操作为调整数据消费实例各自用于对接partition进行数据消费处理的线程,以令全部数据消费实例各自对接的partition与其进行数据消费处理的性能相匹配。
61.被配置作为kafka消费端的终端设备在计算得到当前时刻启动上线从而可进行数据消费的全部数据消费实例的权重总值之后,逐一将每一个数据消费实例对应一kafka主题的partition的个数除以该权重总值并取整,然后,将取整得到的值,与该数据消费实例当前用于对接该kafka主题的partition进行数据消费处理的线程的数量,进行大小比对得
到比对结果。从而,在该比对结果表示取整得到的值大于该线程的数量时,终端设备针对该数据消费实例当前用于对接partition进行数据消费处理的线程进行逐一暂停,直至该取整得到的值与该线程的数量相等,或者,在该比对结果表示取整得到的值小于该线程的数量时,则控制该数据消费实例继续创建新的线程来对接该kafka主题的partition进行数据消费处理,直至该取整得到的值与该线程的数量相等。
62.具体地,例如,假定被配置作为kafka消费端的终端设备所配置的某一个kafka主题的partition的个数为b,且当前一个数据消费实例所创建用于正在处理该kafka主题的partition数据的线程数为c。如此,终端设备在计算得到权重总值q之后,将b/q取整数的值e与c进行大小比对,若e>c,则终端设备开始暂停该数据消费实例所创建的处理该kafka主题的partition数据的线程,并在每次暂停一个线程之后需要在分布式锁中进行释放,且在本地记录的线程数c减1,如此挨个暂停直到c=e,而如果e<c,则终端设备指示该数据消费实例继续创建新的线程用以继续消费该kafka主题的partition数据,且在本地记录的线程数c加1,如此挨个增加直到c=e。
63.需要说明的是,在本实施例中,如果将b/q取整数的值e与c进行大小比对得到e=c则无需处理,此时已经是负载均衡状态。此外,在终端设备指示数据消费实例继续创建新的线程以继续消费kafka主题的partition数据时,该数据消费实例需要进一步利用创建的该新的线程去分布式锁中抢锁,抢到锁就继续消费,而没抢到锁则该新的线程将被销毁。
64.进一步地,在一种可行的实施例中,被配置作为kafka消费端的终端设备触发进行负载均衡操作的规则是:每次有新的数据消费实例上线、或者有原来上线的数据消费实例停止,还或者某些数据消费实例出现性能瓶颈时主动向注册中心修改权重。应当理解的是,基于实际应用的不同设计需要,在其它不同可行的实施方式当中,触发进行负载均衡操作的规则当然也还可以是不同于此处所列举的其它各规则,本发明使用kafka的数据消费方法,并不针对该触发进行负载均衡操作的规则的具体内容进行限定。
65.此外,被配置作为kafka消费端的终端设备在针对所配置的数据消费实例进行负载均衡操作的过程是持续的。上述步骤s203,可以包括:
66.步骤s2031,按照预设第一周期根据所述比对结果进行预设次数的负载均衡操作,并在每一次进行所述负载均衡操作之后检测是否达到负载均衡状态;
67.步骤s2032,若未达到,则重复进行所述负载均衡操作直到进行所述负载均衡操作的次数达到所述预设次数;
68.步骤s2033,若在进行预设次数的负载均衡操作之后检测未达到负载均衡状态,则按照预设第二周期进行所述负载均衡操作,其中,所述预设第二周期等于所述预设第一周期乘以所述预设次数。
69.具体地,例如,在本实施例中,假定预设第一周期为2分钟,预设次数为5次,则预设第二周期为2乘以5等于10分钟。则,被配置作为kafka消费端的终端设备在针对所配置的数据消费实例进行负载均衡操作的过程当中,在第一次将b/q取整数的值e与c进行大小比对得到e>c,从而终端设备暂停该数据消费实例所创建的其中一个线程之后(将c减1)之后,间隔2分钟再将e与c进行大小比对,若仍然是e>c,则继续暂停该数据消费实例所创建的其中一个线程,如此循环5次。
70.如果在经过5次循环之后,将e与c进行大小比对仍然得到e>c,则终端设备通过每
间隔10分钟定时进行的一次负载均衡,来判断一下是否均衡,并在判断到e>c时(由状态丢失或者是有新的kafka主题上线等特殊情况造成)终端设备即在当前所处的10分钟周期内,继续每间隔2分钟将e与c进行大小比对,以继续暂停该数据消费实例所创建的其中一个线程,如此再循环5次。
71.需要说明的是,在本实施例中,被配置作为kafka消费端的终端设备在任意一次循环过程中比对到e=c时,即停止继续循环进行负载均衡操作。
72.本发明实施例提供一种使用kafka的数据消费方法,通过被配置kafka消费端的终端设备按照单个kafka主题的单个partition只能对应一个数据消费实例,而单个数据消费实例可以同时对应者多个partition的实例注册规则,在当前kafka消费端上注册数据消费实例;被配置作为kafka消费端的终端设备在完成数据消费实例的注册过程之后,即根据在当前上线的全部数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作,从而保证该全部数据消费实例各自均在负载均衡状态下针对各自对接的partition数据进行消费处理。
73.本发明相比于传统依赖大数据组件来采用kafka进行数据消费的方式,仅通过kafka消费端注册数据消费实例,并基于数据消费端各自的权重和对应的kafka主题的partition进行负载均衡操作,进而保持负载均衡状态来供注册的数据消费实例进行数据消费。如此,实现了使用kafka轻量级、高可用的数据消费方案,无需依赖sparkstreaming或者apache flink等大数据组件的实时流计算框架,从而降低了数据消费的成本。
74.进一步地,基于上述第一实施例,提出本发明使用kafka的数据消费方法的第二实施例,本实施例与上述第一实施例之间的主要区别在于,本发明使用kafka的数据消费方法,还可以包括:
75.步骤s40,根据所述数据消费实例的数据消费状态修改所述数据消费实例的权重,并执行根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作的步骤。
76.需要说明的是,在本实施例中,数据消费实例的数据消费状态包括但不限于:cpu使用率、内存消耗情况、数据堆积情况以及消费线程状态。
77.被配置kafka消费端的终端设备在保持负载均衡状态供数据消费实例进行数据消费处理的过程当中,该数据消费实例各自可在本地收集数据消费状态上报给注册中心,注册中心在接收到该数据消费状态之后即指示各数据消费实例重新进行权重设置以修改权重,在此之后,终端设备进一步根据该各数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作,从而保证该各数据消费实例各自均在负载均衡状态下针对各自对接的partition数据进行消费处理。
78.具体地,例如,被配置kafka消费端的终端设备所注册的全部数据消费实例各自启动一个常驻线程,以通过常驻线程在该数据消费实例针对对接的partition数据进行消费处理过程中,监控该数据消费实例的cpu使用率、内存消耗情况、数据堆积情况以及消费线程状态等数据消费状态,并将监控得到的该数据消费状态上报至终端设备内置或者外接的注册中心,该注册中心在接收到该数据消费状态之后即将其下发到其它在当前进行数据消费处理的各个数据消费实例上,从而供各个数据消费实例根据机器负载情况进行各自权重的重新设置,各个数据消费实例将重新设置的权重在此上送到注册中心,以由注册中心下
发到每个数据消费实例再使用这组新的权重来对接partition数据进行消费处理。并且,每个数据消费实例在使用这组新的权重来对接partition数据进行消费处理的过程当中,终端设备将进一步执行上述步骤s20的操作以保证各个数据消费实例在负载均衡状态下进行数据消费处理。
79.需要说明的是,在本实施例中,被配置kafka消费端的终端设备在通过内置或者外接的注册中心指示各数据消费实例重新进行权重设置以修改权重时,数据消费实例若监控到cpu使用率在50%以下持续了1天,内存消耗情况也始终表示50%以下内存被占用持续1天,且,消费线程状态表示各个线程数据堆积为0以下持续1天,则该数据消费实例可调整权重翻一倍,即,o=o*2来重新进行权重设置;而如果数据消费实例监控到cpu使用率大于90%且持续了5min,或者内存消耗情况内存大于90%被占用持续30min,或者消费线程状态表示出现线程堆积数据超过5min,且数据堆积情况表示数据堆积量大于10000,则那么该数据消费实例可将权重减少一倍,即,o=o*1/2来重新进行权重设置。
80.在本实施例中,通过被配置kafka消费端的终端设备在保持负载均衡状态供数据消费实例进行数据消费处理的过程当中,该数据消费实例各自可在本地收集数据消费状态上报给注册中心,注册中心在接收到该数据消费状态之后即指示各数据消费实例重新进行权重设置以修改权重,在此之后,终端设备进一步根据该各数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作,从而保证该各数据消费实例各自均在负载均衡状态下针对各自对接的partition数据进行消费处理。
81.如此,本发明使用kafka的数据消费方法实现了根据数据消费实例的数据消费状态自动的进行权重调节以确保负载均衡的进行数据消费处理,确保了使用kafka进行数据消费的高可用性。
82.进一步地,基于上述第一实施例和第二实施例,提出本发明使用kafka的数据消费方法的第三实施例,本实施例与上述第一实施例和第二实施例之间的主要区别在于,在上述步骤s20,根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作之后,本发明使用kafka的数据消费方法还可以包括:
83.步骤s50,检测全部所述数据消费实例是否达到负载均衡状态;
84.步骤s60,若未达到,则针对所述kafka主题的partition和/或者所述数据消费实例进行对应的扩容操作,以使经过扩容后的全部数据消费实例达到所述负载均衡状态;
85.需要说明的是,在本实施例中,若进行多次负载均衡操作之后,仍然有数据消费实例存在性能瓶颈,则需要评估扩容。此外,如果发现有数据消费实例存在异常,终端设备更需要立即触发报警(如ims(ip multimedia subsystem,ip多媒体系统)告警)以通知运维和开发评估是否进行扩容。
86.被配置kafka消费端的终端设备在每一次根据在当前上线的全部数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作之后,均检测该全部数据消费实例是否达到了负载均衡状态,从而,终端设备在检测到多次进行载均衡操作之后该全部数据消费实例仍然没有达到负载均衡状态,则终端设备开始针对该kafka主题的partition和/或者用以进行数据消费处理的数据消费实例进行对应的扩容操作,以使得在经过扩容操作后的全部数据消费实例能够达到负载均衡状态进
行数据消费处理。
87.需要说明的是,在本实施例中,被配置kafka消费端的终端设备在针对kafka主题的partition进行快速扩容时,可以通过先扩展该kafka主题的partition,从而在partition增加之后,该kafka主题能够对应的消费线程也会增加,如此,再增加对应数量的数据消费实例即可提高终端设备整体的数据消费处理能力。或者,还可以通过拆分该kafka主题的某一个或者多partition,以此增加可对接的线程后同时新增对应数量的数据消费实例来接管增加的线程进行数据消费处理。
88.此外,还可以通过手动的将一些机器性能较高的数据消费实例的权重调高,以此令该数据消费实例接管更多的线程后降低出现性能瓶颈的数据消费实例的压力。
89.此外,,对于多个业务产品使用的kafka,还可以对量大的业务产品进行拆分,即,将该业务产品由原来配置的多个kafka主题拆到单独的kafka主题来提高整体性能。
90.在本实施例中,通过被配置kafka消费端的终端设备在每一次根据在当前上线的全部数据消费实例的权重,和各数据消费实例所对应的kafka消费端上某一kafka主题的partition,来进行负载均衡操作之后,均检测该全部数据消费实例是否达到了负载均衡状态,从而,终端设备在检测到多次进行载均衡操作之后该全部数据消费实例仍然没有达到负载均衡状态,则终端设备开始针对该kafka主题的partition和/或者用以进行数据消费处理的数据消费实例进行对应的扩容操作,以使得在经过扩容操作后的全部数据消费实例能够达到负载均衡状态进行数据消费处理,进一步提升了数据消费效率。
91.进一步地,基于上述第一实施例、第二实施例和第三实施例,提出本发明使用kafka的数据消费方法的第四实施例,本实施例与上述第一实施例、第二实施例和第三实施例之间的主要区别在于,本发明使用kafka的数据消费方法,还可以包括:
92.步骤s70,记录所述数据消费实例在所述负载均衡状态进行数据消费的已消费数据标识,并根据实际的数据消费需求针对所述已消费数据标识进行修改,以供所述数据消费实例按照修改后的已消费数据标识继续在所述负载均衡状态进行数据消费。
93.被配置kafka消费端的终端设备在保持负载均衡状态下供当前上线的各数据消费实例进行数据消费时,各数据消费实例在每一次数据消费处理成功之后,即在该终端设备所内置或者外接的注册中心记录上一已消费数据标识,然后,终端设备可根据实际的数据消费需求针对记录的该已消费数据标识进行修改,以供数据消费实例在下一次继续进行数据消费处理时,按照修改后的已消费数据标识继续在负载均衡状态进行数据消费。
94.需要说明的是,在本实施例中,实际的数据消费需求包括但不限于:丢失部分数据、重复处理部分数据、事务回滚、跳过部分数据不处理以及数据回溯(又称回放)。
95.具体的,例如,数据消费实例在获取到某一个partition对应的分布式锁之后,在当前上线的全部数据消费实例达到负载均衡状态下开始启动消费线程针对partition进行数据消费处理:每一次消费读取1m数据(当前时刻partition数据不够1m时,即读取当前有的全部partition数据),并针对读取到的数据进行处理、分发和落库等操作。在每一次数据消费处理成功之后,该数据消费实例将当前的消费数据达到的kafka的已消费数据标识:offset记录在注册中心,记录的格式为:“topic,partition,offset”,表示某个kafka主题的partition当前成功处理到了该offset处,而数据消费实例在处理数据失败时,则不会将对应的offset记录在注册中心,如此,等故障恢复时,该数据消费实例即可从该offset处继
续开始进行数据消费处理,以此保证了数据不丢失。
96.如果数据消费实例在处理的partition数据存在部分失败,部分成功时,终端设备即可根据获取到的实际的数据消费需求:丢失部分数据,来选择:登记offset到注册中心,从而令该数据消费实例丢失失败的部分数据不再进行处理,或者,根据实际的数据消费需求:重复处理部分数据,来选择:不登记offset到注册中心,以令该数据消费实例针对已经处理成功的部分数据重复进行处理,以及,根据实际的数据消费需求:事务回滚,来选择:进行事务回滚,以此令该数据消费实例针对已经处理成功的部分数据进行失误回滚,来确保数据的一致性。
97.终端设备在数据消费实例处理partition数据失败或者部分失败时,根据实际的数据消费需求:跳过部分数据不处理(由于某些数据兼任性问题,需要进行跳过,不处理),来针对已经在注册中心记录的offset进行修改,即,在注册中心找到对应的记录:“topic,partition,offset”,并将“offset”替换成为“offset+n”,以在注册中心更新记录:“topic,partition,offset”成为“topic,partition,offset+n”,如此,当前kafka主题的partition的数据即跳过了这n条数据不处理。
98.终端设备在数据消费实例处理partition数据失败或者部分失败时,根据实际的数据消费需求:数据回溯,针对某些重新处理的数据,在注册中心对该数据对应记录的offset进行修改,即,在注册中心找到该数据对应的记录:“topic,partition,offset”,并将“offset”替换成为“offset

n”,以在注册中心更新记录:“topic,partition,offset”成为“topic,partition,offset

n”,这样kafka主题的partition的数据即跳过了这n条数据重新进行消费处理(回溯的n的最大长度是当前kafka消费毒端上面缓存的该kafka主题的partition的数据量。
99.进一步地,在一种可行的实施例中,被配置kafka消费端的终端设备可以从注册中心获取所记录的任意数据消费实例当前消费到的offset值,并且基于终端设备最新记录的数据消费实例在处理的offset值,计算该两个offset值之间的差值,就可确定该数据消费实例当前处理的kafka主题的partition的数据堆积情况,如此,每个kafka主题都可以计算出对应的数据堆积情况,并根据该数据乎堆积情况计算出当前数据消费实例当前用于处理数据的线程的健康状况,进而可以根据不同策略进行对应的数据处理方式。
100.此外,数据消费实例当前处理的kafka主题的partition的数据堆积情况还可以用于配置不同的生产告警等级,用以通知运维及时介入处理。例如,数据堆积情况为堆积量小于或者等于5000时,对应输出ims告警通知数据消费实例的数据处理速度较慢,而数据堆积情况为堆积量小于或者等于10000时,对应输出ims告警通知数据消费实例需调整权重,以及数据堆积情况为堆积量小于或者等于20000时,对应输出ims告警通知数据消费实例异常需运维及时介入处理。
101.在本实施例中,通过被配置kafka消费端的终端设备在保持负载均衡状态下供当前上线的各数据消费实例进行数据消费时,各数据消费实例在每一次数据消费处理成功之后,即在该终端设备所内置或者外接的注册中心记录上一已消费数据标识,然后,终端设备可根据实际的数据消费需求针对记录的该已消费数据标识进行修改,以供数据消费实例在下一次继续进行数据消费处理时,按照修改后的已消费数据标识继续在负载均衡状态进行数据消费。实现了可灵活控制消费的offset来达成数据跳过消费、回溯消费的功能,进一步
提升了使用kafka进行数据消费的高可用性。
102.进一步地,本发明还提供一种使用kafka的数据消费装置,该使用kafka的数据消费系统应用于kafka消费端。请参照图3,图3为本发明使用kafka的数据消费装置一实施例的功能模块示意图。如图3所示,本发明使用kafka的数据消费装置包括:
103.实例注册模块10,用于按照实例注册规则注册数据消费实例,其中,所述实例注册规则包括:单个kafka主题的单个partition对应一个数据消费实例的一个消费线程;
104.负载均衡模块20,用于根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作;
105.数据消费模块30,用于保持负载均衡状态供所述数据消费实例进行数据消费。
106.进一步地,负载均衡模块20,包括:
107.检测单元,用于检测当前上线的全部所述数据消费实例,并根据每一个所述数据消费实例各自的权重计算权重总值;
108.比对单元,用于比对所述权重总值、所述数据消费实例对应的kafka主题的partition个数,和所述数据消费实例处理所述kafka主题的partition的线程数,得到数据比对结果;
109.均衡负载单元,用于根据所述数据比对结果进行负载均衡操作。
110.进一步地,均衡负载单元,包括:
111.第一均衡子单元,用于按照预设第一周期根据所述比对结果进行预设次数的负载均衡操作,并在每一次进行所述负载均衡操作之后检测是否达到负载均衡状态;
112.第二均衡子单元,用于重复进行所述负载均衡操作直到进行所述负载均衡操作的次数达到所述预设次数;
113.第三均衡子单元,用于若在进行预设次数的负载均衡操作之后检测未达到负载均衡状态,则按照预设第二周期进行所述负载均衡操作,其中,所述预设第二周期等于所述预设第一周期乘以所述预设次数。
114.进一步地,检测单元,还用于检测每一个所述数据消费实例各自的权重是否相同;以及,若是,则基于全部所述数据消费实例的个数乘以所述权重以计算得到所述权重总值;若否,则基于全部所述数据消费实例各自的权重进行叠加以计算得到所述权重总值。
115.进一步地,本发明使用kafka的数据消费装置的负载均衡模块20,还用于根据所述数据消费实例的数据消费状态修改所述数据消费实例的权重,并执行根据所述数据消费实例的权重和所述数据消费实例对应的kafka主题的partition进行负载均衡操作的步骤。
116.进一步地,本发明使用kafka的数据消费装置,还包括:
117.扩容模块,用于检测全部所述数据消费实例是否达到负载均衡状态;以及,若未达到,则针对所述kafka主题的partition和/或者所述数据消费实例进行对应的扩容操作,以使经过扩容后的全部数据消费实例达到所述负载均衡状态。
118.进一步地,本发明使用kafka的数据消费装置,还包括:
119.记录模块,用于记录所述数据消费实例在所述负载均衡状态进行数据消费的已消费数据标识,并根据实际的数据消费需求针对所述已消费数据标识进行修改,以供所述数据消费实例按照修改后的已消费数据标识继续在所述负载均衡状态进行数据消费。
120.其中,上述使用kafka的数据消费装置中各个模块的功能实现与上述使用kafka的
数据消费方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
121.本发明还提供一种计算机存储介质,该计算机存储介质上存储有使用kafka的数据消费程序,所述使用kafka的数据消费程序被处理器执行时实现如以上任一项实施例所述的使用kafka的数据消费方法的步骤。
122.本发明计算机存储介质的具体实施例与上述使用kafka的数据消费方法各实施例基本相同,在此不作赘述。
123.本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上任一项实施例所述的使用kafka的数据消费方法的步骤。
124.本发明计算机程序产品的具体实施例与上述使用kafka的数据消费方法各实施例基本相同,在此不作赘述。
125.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1