CN112882839A - 基于kafka的消息处理方法及装置 - Google Patents
基于kafka的消息处理方法及装置 Download PDFInfo
- Publication number
- CN112882839A CN112882839A CN201911201785.8A CN201911201785A CN112882839A CN 112882839 A CN112882839 A CN 112882839A CN 201911201785 A CN201911201785 A CN 201911201785A CN 112882839 A CN112882839 A CN 112882839A
- Authority
- CN
- China
- Prior art keywords
- offset
- kafka
- information
- file
- offset information
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims description 21
- 238000012545 processing Methods 0.000 claims abstract description 42
- 238000000034 method Methods 0.000 claims abstract description 40
- 238000005192 partition Methods 0.000 claims description 51
- 238000004590 computer program Methods 0.000 claims description 13
- 230000015654 memory Effects 0.000 claims description 11
- 230000002159 abnormal effect Effects 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 17
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/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 Transfer Between Computers (AREA)
Abstract
本发明实施例提供一种基于kafka的消息处理方法及装置,包括:从客户端本地的偏移量文件中读取偏移量集合;判断偏移量集合中的偏移量信息是否有效,若否,则更新偏移量集合中的偏移量信息并利用更新后的偏移量信息对kafka消息进行处理同时将最新的偏移量信息写入至所述偏移量文件中。本实施例将读取kafka的偏移量文件存储到客户端中从而使得offset的更新安全且简易,异常控制方便。本实施例将kafka与其他存储介质松耦合,避免了第三方连接与连接导致的延迟,提升了数据读写效率。本实施例还对偏移量信息的有效性进行了判断,当偏移量信息无效时会对其进行更新,因此会避免出现数据重复读取或数据丢失的情况。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于kafka的消息处理方法及装置。
背景技术
卡夫卡(kafka)系统是一种具有高吞吐量的分布式发送订阅消息系统。该kafka系统可存储多类消息,每类消息称为一个话题(topic),每个topic具有多个分区,每个topic的所有分区分担存储属于该topic的消息。
kafka集群用于部署kafka系统,kafka集群具有多个存储节点;该存储节点可以是服务器或者其它具有计算能力的设备;例如kafka集群中的多个存储节点可以是跨数据中心。kafka系统中的每个topic可以部署在kafka集群中的一个或多个存储节点上;如果topic是存储在多个存储节点上,则该topic具有的多个分区可以分布式地部署在该多个存储节点上;如果topic是存储在一个存储节点上,则该topic具有的多个分区均部署在该个存储节点上。相关技术中,当客户端请求向kafka集群存储消息时,该客户端可以指定用于存储消息的topic和分区。
目前在基于kafka进行消息处理时,存在以下几种处理方式:
现有技术1:kafka提供了自动提交offset偏移量的设置,通过该方法consumer端在读取到消息后立即更新offset,保证数据不会重复消费。
现有技术2:新版kafka提供了一种手动提交offset偏移量到_consumer_offsets这个topic中,用户在处理完数据后再控制偏移量的提交。
现有技术3:将offset偏移量信息提交到zookeeper中存储,在consumer处理完消息后建立与zookeeper的连接更新offset信息。
上面介绍的三种现有技术中存在如下问题:
现有技术1:该方法存在数据丢失的情况,如consumer在读取到数据后立即更新offset后未来得及处理消息,下次重新工作时无法读取之前未处理的消息导致数据丢失。另外,即使客户端安全终止任务,也会存在偏移量更新为最新offset的问题。
现有技术2:该方法存在数据重复的情况,当客户端安全终止任务后,最后一次offset并没有提交到topic中,导致下次任务数据重复读取。
现有技术3:该方法将offset与kafka松耦合,存储在zookeeper中。然而zookeeper并不适合大规模数据并发读写,尤其是写效率不高。kafka允许多个ConsumerGroup并行读写数据,如果offset全部在zookeeper中管理会影响zookeeper性能,进而影响kafka的leader选举、集群同步等功能。
上述三种方案没有充分考虑zookeeper等外部存储器的稳定性、客户端任务异常终止等情况带来的数据有效性问题,导致数据重复消费、数据丢失等难以忍受的问题。
发明内容
针对现有技术中的问题,本发明实施例提供一种基于kafka的消息处理方法及装置。
具体地,本发明实施例提供了以下技术方案:
第一方面,本发明实施例提供了一种基于kafka的消息处理方法,包括:
从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
当所述偏移量集合中的偏移量信息无效时,更新所述偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
进一步地,所述基于kafka的消息处理方法,还包括:判断偏移量集合中的偏移量信息是否有效;
其中,所述判断偏移量集合中的偏移量信息是否有效,具体包括:
确定话题的最小可用偏移量集合;
确定话题的最大可用偏移量集合;
根据最小可用偏移量集合和最大可用偏移量集合判断偏移量集合中的偏移量信息是否有效。
进一步地,所述确定话题的最小可用偏移量集合,具体包括:
采用getEarliestLeaderOffsets确定话题的最小可用偏移量集合;
相应地,所述确定话题的最大可用偏移量集合,具体包括:
采用getLatestLeaderOffsets确定话题的最大可用偏移量集合。
进一步地,所述更新偏移量集合中的偏移量信息,具体包括:
若偏移量集合A中存在任一分区的偏移量offset满足offset_(M,par)>offset_(A,par),则将满足条件的offset更新为集合M中对应分区的offset;若偏移量集合A中存在任一分区的偏移量offset满足offset_(A,par)>offset_(N,par),则将满足条件的offset更新为集合N中对应分区的offset,其中,M表示最小可用偏移量集合,N表示最大可用偏移量集合,par表示分区。
进一步地,所述基于kafka的消息处理方法,还包括:
当所述偏移量集合中的偏移量信息有效时,直接利用所述offset集合中的偏移量信息对消息进行处理,同时将最新偏移量写入至偏移量文件。
进一步地,在从客户端本地的偏移量文件中读取偏移量集合之前,所述方法还包括:
判断客户端本地是否存在偏移量文件,若存在,则从客户端本地的偏移量文件中读取偏移量集合;若不存在,则利用当前可用的最小偏移量读取数据。
进一步地,所述基于kafka的消息处理方法,还包括:
循环检测客户端的任务状态,并在检测到客户端当前的任务状态为正常终止任务时,将已读取的批次队列数据全部处理完毕;其中,客户端的任务状态能够通过写入的方式改变。
第二方面,本发明实施例提供了一种基于kafka的消息处理装置,包括:
读取模块,用于从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
处理模块,用于在所述偏移量集合中的偏移量信息无效时,更新偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述基于kafka的消息处理方法的步骤。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述基于kafka的消息处理方法的步骤。
由上面技术方案可知,本发明实施例提供的基于kafka的消息处理方法及装置,从客户端本地的偏移量文件中读取偏移量集合,并在偏移量集合中的偏移量信息无效时更新偏移量集合中的偏移量信息,以及利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。由此可见,本发明实施例在任务过程中手动提交更新偏移量,不存在与zookeeper和redis等外部介质的连接交互,本发明实施例将读取kafka的偏移量文件存储到客户端中,从而使得offset的更新安全且简易,异常控制方便。此外,本发明实施例将kafka与其他存储介质松耦合,避免了第三方连接与连接导致的延迟,进一步提升了数据读写效率。此外,本发明实施例还对偏移量集合中的偏移量信息的有效性进行了判断,当偏移量信息无效时会对其进行更新,因此会避免出现数据重复读取或数据丢失的情况。
此外,需要说明的是,在本发明的其他实施例中,考虑了在实施过程中客户端正常终止的问题,保证了任务的安全停止。具体地,在本发明的其他实施例中,通过循环检测客户端的任务状态的方式来识别正常终止任务,进而对于正常终止任务,将已读取的批次队列数据全部处理,从而保证已读取的批次队列数据全部处理完毕。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的基于kafka的消息处理方法的流程图;
图2为本发明一实施例提供的基于kafka的消息处理装置的结构示意图;
图3为本发明一实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
正如背景技术部分所述,现有技术中给出的方案没有充分考虑zookeeper等外部存储器的稳定性、客户端任务异常终止等情况带来的数据有效性问题,导致数据重复消费、数据丢失等难以忍受的问题。针对该问题,本申请实施例提出了一种新的技术方案,本实施例考虑了kafka集群性能和数据读写效率,假设zookeeper等外部介质不可靠或存在延迟,每个ConsumerGroup在本地系统中维护offset信息,KafkaCluster提供维护信息,在不影响读取效率的情况下趋向于Exactly Once保障(数据不重复不丢失)。下面将通过具体实施例对本发明提供的基于kafka的消息处理方法给予详细的说明。
图1示出了本发明实施例提供的基于kafka的消息处理方法的流程图。如图1所示,本发明实施例提供的基于kafka的消息处理方法包括如下步骤:
步骤101:从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
步骤102:当所述偏移量集合中的偏移量信息无效时,更新所述偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
在本实施例中,需要说明的是,所述客户端指运行程序所在的机器,如SparkStreaming提交机器。
在本实施例中,在客户端本地设置了偏移量文件用于存储偏移量信息。例如,偏移量文件为gtoffset文件,其文件存储路径类似于...groupid/topicname/gtoffset,gtoffset文件包括groupid消费topic所有分区的offset信息。
在本实施例中,由于将读取kafka的偏移量文件存储到客户端本地中,因此在任务过程中进行偏移量读取和更新时,不需要与zookeeper和redis等外部介质的连接交互,因此,本实施例使得offset信息的读取、更新安全且简易,异常控制也较为方便。此外,由于将offset信息更新到客户端本地文件,因此无需与zookeeper和redis等建立外部连接,因此可以保证更新效率。
在本实施例中,在使用偏移量信息对消息进行处理之前,先对偏移量集合中的偏移量信息的有效性进行判断,当偏移量信息因各种原因出现无效情况(例如,偏移量越界)时,会对偏移量信息进行调整更新,并利用更新户的偏移量对消息进行处理,因此本实施例可以避免出现因偏移量信息无效而导致的数据重复读取或数据丢失的情况发生。
在本实施例中,判断偏移量集合中的偏移量信息是否有效可以通过判断偏移量集合中的偏移量信息是否越界进行判断。其中,偏移量越界包括低越界和高越界。低越界指的是gtoffset记录的偏移量信息小于Kafka目前可用的offset最小值,高越界指的是gtoffset记录的偏移量信息超过Kafka目前最新的offset值。
在本实施例中,需要说明的是,在基于kafka进行消息处理时,可以判断客户端是否存在gtoffset文件,若不存在,说明groupid是第一次消费topic,那么按照auto.offset.reset=earliest从当前可用的最小offset读取数据;如果存在,说明groupid已经消费过Topic,读取得到offset集合A。
在本实施例中,在进行偏移量是否越界的判断时,可以使用KafkaCluster构建Kafka集群连接,然后进行偏移量越界判断。
例如,使用getEarliestLeaderOffsets得到Topic的最小可用offset集合M,使用getLatestLeaderOffsets得到Topic的最大可用offset集合N。如果A中所有分区的offset都满足offset_(M,par)≤offset_(A,par)≤offset_(N,par)那么说明A有效,A不需要更新;如果A中存在分区的offset满足offset_(M,par)>offset_(A,par),即A中有的分区offset比最小值都小,低越界,那么将这些offset更新为M中对应分区的offset;同样道理,如果A中存在分区的offset满足offset_(A,par)>offset_(N,par),即A中有的分区offset比最大值都大,高越界,那么将这些offset更新为N中对应分区的offset。其中,par表示分区。
在本实施例中,需要说明的是,在解决偏移量越界的问题后,使用更新后的集合A拉取Kafka中的数据进行处理,处理成功后将最新offset信息写入到gtoffset文件中。
在本实施例中,需要说明的是,本实施例是以一台客户端机器为例进行的介绍(如以spark任务提交,提交为client模式),实际上不局限于此,可以进行服务扩展(如spark任务提交为cluster方式,但是需要考虑driver的gtoffset文件共享访问问题)。
由上面技术方案可知,本发明实施例提供的基于kafka的消息处理方法,从客户端本地的偏移量文件中读取偏移量集合,并在偏移量集合中的偏移量信息无效时更新偏移量集合中的偏移量信息,以及利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。由此可见,本发明实施例在任务过程中手动提交更新偏移量,不存在与zookeeper和redis等外部介质的连接交互,本发明实施例将读取kafka的偏移量文件存储到客户端中,从而使得offset的更新安全且简易,异常控制方便。此外,本发明实施例将kafka与其他存储介质松耦合,避免了第三方连接与连接导致的延迟,进一步提升了数据读写效率。此外,本发明实施例还对偏移量集合中的偏移量信息的有效性进行了判断,当偏移量信息无效时会对其进行更新,因此会避免出现数据重复读取或数据丢失的情况。
基于上述实施例的内容,在本实施例中,所述判断偏移量集合中的偏移量信息是否有效,具体包括:
确定话题的最小可用偏移量集合;
确定话题的最大可用偏移量集合;
根据最小可用偏移量集合和最大可用偏移量集合判断偏移量集合中的偏移量信息是否有效。
在本实施例中,在判断偏移量集合中的偏移量信息是否有效可以通过判断偏移量集合中的偏移量信息是否越界进行判断。在本实施例中,在进行偏移量是否越界的判断时,可以使用KafkaCluster构建Kafka集群连接,然后进行偏移量越界判断。其中,偏移量越界包括低越界和高越界。低越界指的是gtoffset记录的偏移量信息小于Kafka目前可用的offset最小值,高越界指的是gtoffset记录的偏移量信息超过Kafka目前最新的offset值。
在本实施例中,可以根据偏移量集合中的偏移量信息是否位于最小可用偏移量集合和最大可用偏移量集合之间,进而判断偏移量集合中的偏移量信息是否有效。当偏移量集合中的偏移量信息位于最小可用偏移量集合和最大可用偏移量集合之间时,说明偏移量集合中的偏移量信息未越界,进而判断偏移量集合中的偏移量信息有效;当偏移量集合中的偏移量信息没有位于最小可用偏移量集合和最大可用偏移量集合之间时,说明偏移量集合中的偏移量信息越界,因此判断偏移量集合中的偏移量信息无效。
在本实施例中,可以采用getEarliestLeaderOffsets的方式确定话题的最小可用偏移量集合。同理,可以采用getLatestLeaderOffsets确定话题的最大可用偏移量集合。采用这种方式确定最小和最大可用偏移量集合,简单方便,易于处理。
在本实施例中,假设使用getEarliestLeaderOffsets得到Topic的最小可用offset集合M,使用getLatestLeaderOffsets得到Topic的最大可用offset集合N。如果偏移量集合A中所有分区的offset都满足offset_(M,par)≤offset_(A,par)≤offset_(N,par)那么说明A有效,A不需要更新;如果A中存在分区的offset满足offset_(M,par)>offset_(A,par),即A中有的分区offset比最小值都小,低越界,那么将这些offset更新为M中对应分区的offset;同样道理,如果A中存在分区的offset满足offset_(A,par>offset_(N,par),即A中有的分区offset比最大值都大,高越界,那么将这些offset更新为N中对应分区的offset。其中,par表示分区。
基于上述实施例的内容,在本实施例中,所述确定话题的最小可用偏移量集合,具体包括:
采用getEarliestLeaderOffsets确定话题的最小可用偏移量集合;
相应地,所述确定话题的最大可用偏移量集合,具体包括:
采用getLatestLeaderOffsets确定话题的最大可用偏移量集合。
在本实施例中,正如上面所述,采用getEarliestLeaderOffsets和getLatestLeaderOffsets确定最小和最大可用偏移量集合,简单方便,易于处理。
基于上述实施例的内容,在本实施例中,所述更新偏移量集合中的偏移量信息,具体包括:
若偏移量集合A中存在任一分区的偏移量offset满足offset_(M,par)>offset_(A,par),则将满足条件的offset更新为集合M中对应分区的offset;若偏移量集合A中存在任一分区的偏移量offset满足offset_(A,par)>offset_(N,par),则将满足条件的offset更新为集合N中对应分区的offset,其中,M表示最小可用偏移量集合,N表示最大可用偏移量集合,par表示分区。
在本实施例中,如果A中存在分区的offset满足offset_(M,par)>
offset_(A,par),即A中有的分区offset比最小值都小,低越界,那么将这些offset更新为M中对应分区的offset;同样道理,如果A中存在分区的offset满足offset_(A,par)>offset_(N,par),即A中有的分区offset比最大值都大,高越界,那么将这些offset更新为N中对应分区的offset。由此可知,更新后的offset保证了offset的有效性,因此,可以利用更新后的offset对消息进行处理。
基于上述实施例的内容,在本实施例中,所述基于kafka的消息处理方法,还包括:
若判断所述偏移量集合中的偏移量信息有效,则直接利用所述offset集合中的偏移量信息对消息进行处理,同时将最新偏移量写入至偏移量文件。
在本实施例中,当判断所述偏移量集合中的偏移量信息有效时,无需对其进行更新,而是可以直接利用所述offset集合中的偏移量信息对消息进行处理,同时将最新偏移量写入至偏移量文件。
基于上述实施例的内容,在本实施例中,在从客户端本地的偏移量文件中读取偏移量集合之前,所述方法还包括:
判断客户端本地是否存在偏移量文件,若存在,则从客户端本地的偏移量文件中读取偏移量集合;若不存在,则利用当前可用的最小偏移量读取数据。
在本实施例中,需要说明的是,在基于kafka进行消息处理时,可以判断客户端本地是否存在gtoffset文件,若不存在,说明groupid是第一次消费topic,那么按照auto.offset.reset=earliest从当前可用的最小offset读取数据;如果存在,说明groupid已经消费过Topic,此时,从客户端本地的偏移量文件中读取偏移量集合。
基于上述实施例的内容,在本实施例中,所述基于kafka的消息处理方法,还包括:
循环检测客户端的任务状态,并在检测到客户端当前的任务状态为正常终止任务时,将已读取的批次队列数据全部处理完毕;其中,客户端的任务状态能够通过写入的方式改变。
在本实施例中,在客户端设置了任务状态文件jodstatus,该任务状态文件用于表征任务状态,例如,1表示正在运行,0表示未运行或已终止,2表示需要终止任务等。
在本实施例中,考虑了在实施过程中客户端正常终止的问题,保证了任务的安全停止。例如,当需要安全终止任务时,在jodstatus中写入2(如采用sparkstreaming读取kafka,可用ssc.stop,保证已读取的批次数据队列正常处理结束)。
需要说明的是,在本实施例中,考虑了在实施过程中客户端正常终止的问题,保证了任务的安全停止。具体地,在本发明的其他实施例中,通过循环检测客户端的任务状态的方式来识别正常终止任务,进而对于正常终止任务,将已读取的批次队列数据全部处理,从而保证已读取的批次队列数据全部处理完毕。
图2示出了本发明实施例提供的基于kafka的消息处理装置的结构示意图。如图2所示,本发明实施例提供的基于kafka的消息处理装置包括:读取模块21和处理模块22,其中:
读取模块21,用于从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
处理模块22,用于在所述偏移量集合中的偏移量信息无效时,更新偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
由于本发明实施例提供的基于kafka的消息处理装置,可以用于执行上述实施例所述的基于kafka的消息处理方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图3,所述电子设备具体包括如下内容:处理器301、存储器302、通信接口303和通信总线304;
其中,所述处理器301、存储器302、通信接口303通过所述通信总线304完成相互间的通信;
所述处理器301用于调用所述存储器302中的计算机程序,所述处理器执行所述计算机程序时实现上述基于kafka的消息处理方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;当所述偏移量集合中的偏移量信息无效时,更新偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
基于相同的发明构思,本发明又一实施例提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述基于kafka的消息处理方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;当所述偏移量集合中的偏移量信息无效时,更新偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的基于kafka的消息处理方法。
此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
此外,在本发明中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于kafka的消息处理方法,其特征在于,包括:
从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
当所述偏移量集合中的偏移量信息无效时,更新所述偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
2.根据权利要求1所述的基于kafka的消息处理方法,其特征在于,还包括:判断偏移量集合中的偏移量信息是否有效;
其中,所述判断偏移量集合中的偏移量信息是否有效,具体包括:
确定话题的最小可用偏移量集合;
确定话题的最大可用偏移量集合;
根据最小可用偏移量集合和最大可用偏移量集合判断偏移量集合中的偏移量信息是否有效。
3.根据权利要求2所述的基于kafka的消息处理方法,其特征在于,所述确定话题的最小可用偏移量集合,具体包括:
采用getEarliestLeaderOffsets确定话题的最小可用偏移量集合;
相应地,所述确定话题的最大可用偏移量集合,具体包括:
采用getLatestLeaderOffsets确定话题的最大可用偏移量集合。
4.根据权利要求3所述的基于kafka的消息处理方法,其特征在于,所述更新偏移量集合中的偏移量信息,具体包括:
若偏移量集合A中存在任一分区的偏移量offset满足offset_(M,par)>offset_(A,par),则将满足条件的offset更新为集合M中对应分区的offset;若偏移量集合A中存在任一分区的偏移量offset满足offset_(A,par)>offset_(N,par),则将满足条件的offset更新为集合N中对应分区的offset,其中,M表示最小可用偏移量集合,N表示最大可用偏移量集合,par表示分区。
5.根据权利要求1所述的基于kafka的消息处理方法,其特征在于,还包括:
当所述偏移量集合中的偏移量信息有效时,直接利用所述offset集合中的偏移量信息对消息进行处理,同时将最新偏移量写入至偏移量文件。
6.根据权利要求1所述的基于kafka的消息处理方法,其特征在于,在从客户端本地的偏移量文件中读取偏移量集合之前,所述方法还包括:
判断客户端本地是否存在偏移量文件,若存在,则从客户端本地的偏移量文件中读取偏移量集合;若不存在,则利用当前可用的最小偏移量读取数据。
7.根据权利要求1~6任一项所述的基于kafka的消息处理方法,其特征在于,还包括:
循环检测客户端的任务状态,并在检测到客户端当前的任务状态为正常终止任务时,将已读取的批次队列数据全部处理完毕;其中,客户端的任务状态能够通过写入的方式改变。
8.一种基于kafka的消息处理装置,其特征在于,包括:
读取模块,用于从客户端本地的偏移量文件中读取偏移量集合;其中,所述偏移量文件用于存储groupid消费话题所有分区的偏移量信息;
处理模块,用于在所述偏移量集合中的偏移量信息无效时,更新偏移量集合中的偏移量信息,并利用更新后的偏移量信息对kafka消息进行处理,同时将最新的偏移量信息写入至所述偏移量文件中。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述基于kafka的消息处理方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述基于kafka的消息处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911201785.8A CN112882839A (zh) | 2019-11-29 | 2019-11-29 | 基于kafka的消息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911201785.8A CN112882839A (zh) | 2019-11-29 | 2019-11-29 | 基于kafka的消息处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112882839A true CN112882839A (zh) | 2021-06-01 |
Family
ID=76038592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911201785.8A Pending CN112882839A (zh) | 2019-11-29 | 2019-11-29 | 基于kafka的消息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112882839A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113765926A (zh) * | 2021-09-08 | 2021-12-07 | 百果园技术(新加坡)有限公司 | 一种消息重建方法及系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095589A (zh) * | 2016-06-30 | 2016-11-09 | 浪潮软件集团有限公司 | 一种分配分区的方法、装置及系统 |
CN107423145A (zh) * | 2017-07-11 | 2017-12-01 | 北京潘达互娱科技有限公司 | 一种避免消息丢失的方法与装置 |
CN108108126A (zh) * | 2017-12-15 | 2018-06-01 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及设备 |
CN108509529A (zh) * | 2018-03-14 | 2018-09-07 | 武汉斗鱼网络科技有限公司 | 数据分页排序方法、装置及可读存储介质 |
CN109582470A (zh) * | 2017-09-28 | 2019-04-05 | 北京国双科技有限公司 | 一种数据处理方法及数据处理装置 |
CN109656725A (zh) * | 2018-11-09 | 2019-04-19 | 北京字节跳动网络技术有限公司 | 消息消费者切换方法、装置、存储介质及电子设备 |
CN109766198A (zh) * | 2018-12-28 | 2019-05-17 | 深圳前海微众银行股份有限公司 | 流式处理方法、装置、设备及计算机可读存储介质 |
CN109815027A (zh) * | 2018-12-27 | 2019-05-28 | 四川驹马科技有限公司 | 一种基于Storm-Kafka实现数据顺序处理的方法及其系统 |
US20190163773A1 (en) * | 2017-11-30 | 2019-05-30 | Futurewei Technologies, Inc. | Redistributing table data in a database cluster |
US20190310890A1 (en) * | 2018-04-06 | 2019-10-10 | Capital One Services, Llc | Dynamic micro-services related job assignment |
-
2019
- 2019-11-29 CN CN201911201785.8A patent/CN112882839A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095589A (zh) * | 2016-06-30 | 2016-11-09 | 浪潮软件集团有限公司 | 一种分配分区的方法、装置及系统 |
CN107423145A (zh) * | 2017-07-11 | 2017-12-01 | 北京潘达互娱科技有限公司 | 一种避免消息丢失的方法与装置 |
CN109582470A (zh) * | 2017-09-28 | 2019-04-05 | 北京国双科技有限公司 | 一种数据处理方法及数据处理装置 |
US20190163773A1 (en) * | 2017-11-30 | 2019-05-30 | Futurewei Technologies, Inc. | Redistributing table data in a database cluster |
CN108108126A (zh) * | 2017-12-15 | 2018-06-01 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及设备 |
CN108509529A (zh) * | 2018-03-14 | 2018-09-07 | 武汉斗鱼网络科技有限公司 | 数据分页排序方法、装置及可读存储介质 |
US20190310890A1 (en) * | 2018-04-06 | 2019-10-10 | Capital One Services, Llc | Dynamic micro-services related job assignment |
CN109656725A (zh) * | 2018-11-09 | 2019-04-19 | 北京字节跳动网络技术有限公司 | 消息消费者切换方法、装置、存储介质及电子设备 |
CN109815027A (zh) * | 2018-12-27 | 2019-05-28 | 四川驹马科技有限公司 | 一种基于Storm-Kafka实现数据顺序处理的方法及其系统 |
CN109766198A (zh) * | 2018-12-28 | 2019-05-17 | 深圳前海微众银行股份有限公司 | 流式处理方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
高宗宝: ""Spark平台中Kafka偏移量的读取管理与设计"" * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113765926A (zh) * | 2021-09-08 | 2021-12-07 | 百果园技术(新加坡)有限公司 | 一种消息重建方法及系统 |
CN113765926B (zh) * | 2021-09-08 | 2023-06-13 | 百果园技术(新加坡)有限公司 | 一种消息重建方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102281739B1 (ko) | 리소스 스케줄링 방법, 스케줄링 서버, 클라우드 컴퓨팅 시스템, 및 저장 매체 | |
US10417062B2 (en) | Method and apparatus of unloading out of memory processing flow to user space | |
CN110941502B (zh) | 消息处理方法、装置、存储介质及设备 | |
CN106960054B (zh) | 数据文件的存取方法及装置 | |
CN112148798A (zh) | 应用于分布式系统的数据处理方法及装置 | |
US11947947B2 (en) | Automatic probabilistic upgrade of tenant devices | |
CN111913793A (zh) | 分布式任务调度方法、装置、节点设备和系统 | |
CN112882839A (zh) | 基于kafka的消息处理方法及装置 | |
CN112507187B (zh) | 索引变更方法及装置 | |
CN111953569B (zh) | 状态信息上报方法、装置、设备及介质 | |
CN111049913B (zh) | 数据文件的传输方法及装置、存储介质、电子设备 | |
CN111666045A (zh) | 基于Git系统的数据处理方法、系统、设备及存储介质 | |
US10073657B2 (en) | Data processing apparatus, data processing method, and computer program product, and entry processing apparatus | |
CN113132241B (zh) | Acl模板动态配置方法及装置 | |
CN114253870A (zh) | 一种更新l2p表的方法、系统、设备以及介质 | |
CN113626164A (zh) | 一种监控平台作业调度方法、装置、终端及存储介质 | |
CN107562527B (zh) | 一种rtos上的smp的实时任务调度方法 | |
CN107209882B (zh) | 对于处在管理之下的设备的多阶段撤销注册 | |
WO2022156099A1 (zh) | 主机升级方法、装置、电子设备和存储介质 | |
CN111274042A (zh) | 一种fpga异构加速系统及其同步调度方法和相关设备 | |
CN113486040B (zh) | 数据存储方法、装置、设备及介质 | |
CN114629783B (zh) | 状态监控方法、系统、设备及计算机可读存储介质 | |
CN117312327B (zh) | 一种数据存储方法、装置、设备及计算机可读存储介质 | |
CN117290074B (zh) | 一种车型配置中的进程设置方法、装置、设备及介质 | |
CN109542601B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210601 |