CN110377486B - 基于kafka实现稳定的高吞吐量的异步任务处理方法 - Google Patents
基于kafka实现稳定的高吞吐量的异步任务处理方法 Download PDFInfo
- Publication number
- CN110377486B CN110377486B CN201910613837.6A CN201910613837A CN110377486B CN 110377486 B CN110377486 B CN 110377486B CN 201910613837 A CN201910613837 A CN 201910613837A CN 110377486 B CN110377486 B CN 110377486B
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- tasks
- kafka
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于kafka实现稳定的高吞吐量的异步任务处理方法。采用基于kafka的异步任务模式,对于异步任务的处理机制,采用管理线程来监控工作线程的各种活动情况并结合定时任务来按照监控间隔时间的频率输出异步任务的执行情况,提供对于超时任务处理机制和异常任务处理机制,增加监控任务消费情况,统计任务执行时间、任务完成详细情况,可通过统计情况来优化调整参数,此统计信息会写入日志,用户可以通过日志来分析性能。本发明能够大大降低系统于业务系统的耦合性。
Description
技术领域
本发明涉及一种基于 kafka 实现稳定的高吞吐量的异步任务处理方法。
背景技术
传统的异步任务技术主要是根据任务类型进行分类插入到任务记录表中或者相关队列中,通过任务记录表中或者相关队列的时间让空闲的线程去执行此异步任务。一种应用级异步调度任务(专利号:201010217283.7)系统实现的流程大体和传统的异步任务技术类似,此技术通过数据服务装置来存放异步任务的相关信息和结果信息,通过一个管理线程来检测工作线程和异步任务队列,并通过此管理线程来对超时任务进行终止,并更新其状态。
现有技术模式中在实现上比较烦琐,既要实现任务类型分类,又要维护任务记录表,还要保证数据的持久化性,并且高并发下很难支撑对应的需求。仅能够适用于并发较低的业务场景,不足以满足绝大部分业务需求。异步任务执行的过程中不透明,当异步任务执行过程中遭遇异常、错误或者超时等情况没有有效的处理机制。这种模式与业务系统耦合性较大。
本发明通过采用基于kafka的异步任务模式,对于传统意义上繁琐的任务类型,数据持久化等实现过程,通过kafka的主题(topic)来确定任务类型,其模式自带数据持久化,不需要开发者去保证数据的持久化过程。对于高吞吐量、高并发的场景下,开发者通过配置每次从kafka中获取消息数量,在过滤模块或者业务模块能承受的访问内,将任务进行处理。防止吞吐量过大的情况下,模块崩溃或者响应慢的情况而引发各种问题。由于消息交于kafka处理,kafka将消息存放于磁盘上,当服务器宕机或者重启时,并不会影响消息的丢失。当系统的一部分组件失效了,也不影响整个系统,当组件重新恢复后,加入到消息对了仍然可以在系统恢复后被处理,大大的保证了消息安全性。对于异步任务的处理机制,本发明采用管理线程来监控工作线程的各种活动情况并结合定时任务来定时输出异步任务的执行情况,提供对于超时任务处理机制和异常任务处理机制,增加监控任务消费情况,统计任务执行时间(最大、最小、平均执行时间等),任务完成详细情况(成功、失败、异常、错误、超时),可通过统计情况来优化调整参数,此统计信息会写入日志,用户可以通过日志来分析性能。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束,此机制能够大大降低系统于业务系统的耦合性。
发明内容
本发明的目的在于提供一种基于 kafka 实现稳定的高吞吐量的异步任务处理方法,能够大大降低系统于业务系统的耦合性。
为实现上述目的,本发明的技术方案是:一种基于 kafka 实现稳定的高吞吐量的异步任务处理方法,包括如下步骤,
步骤S1、根据kafka的配置信息,初始化消费者相关参数,包括最大获取任务数量、主题信息、线程个数、监控间隔时间、超时时间;
步骤S2、根据参数信息创建一个线程池对象以及消费者对象,并且根据配置的主题信息按照“topic + KafkaServiceImpl”的名称去spring容器里寻找对应的消费者;
步骤S3、将管理线程数加入到监控任务中,通过定时任务按照监控间隔时间的频率去输出监控的相关信息;
步骤S4、启动管理线程,判断是否存在kafka无法获取消息、无法提交完成消息以及一个任务超出了设定的3倍超时时间时仍然错误中的任何一种情况,若是,关闭管理线程,并将已完成的任务的偏移量提交,该偏移量为任务完成后在kafka中标识位置;若提交失败时或者因任务超时导致线程没有响应提交的,则重新初始化kafka信息和线程池信息;
步骤S5、管理线程从kafka中获取数据,若没有数据,提交已处理的内容;若获取到数据,则判断是否有空闲线程,若无空闲线程,系统会判断是否存在超时任务,若任务大于配置的3倍超时时间,系统发出中断请求,将最早的超时任务中断以空出空闲的线程来执行任务,若任务不存在超时,等待一秒继续判断是否存在空闲线程,直到有空闲线程,让空闲线程执行任务;
步骤S6、管理线程将一批任务交由工作线程完成,管理线程对工作线程给予一个俩倍的超时时间来判断工作线程是否超时,若超时则中断工作线程的任务;
步骤S7、工作线程中在处理异步任务的过程中,会先判断此任务是否重复执行并记录信息输出到监控程序,管理线程还会记录捕获任务执行过程中发生的开发者未捕获的异常和开发者自身业务错误记录;
步骤S8、一批异步任务完成后,管理线程提交偏移量,若任务执行过程中发生异常情况会将此信息输出到监控程序中,监控程序会将包括任务执行时间、任务完成详细情况按照监控间隔时间的频率输出到控制台并记录到日志文件上。
相较于现有技术,本发明具有以下有益效果:本发明基于kafka的topic的机制即可做到异步任务类型分类且此机制横向扩展及其方便不需要自身去维护。在高吞吐量下、高并发下,能够充分保证系统性能的充分利用,确保异步任务的完整性。并能够在并发执行过程中对异步任务提供完善的异常、错误处理机制,输出高吞吐量下异步任务的监控情况。大大降低对系统业务的耦合性;本发明具有以下特点:
1.保证消息完整性,确保消息能够被执行结束。
2.高并发下的稳定性。高并发下保证系统性能的充分利用,防止重复执行任务,浪费资源
3.自带并发执行流程,且对kafka任务并发执行过程提供了监控信息
4.对异步任务提供解决异常,重复,超时的处理方式,方便开发者根据自身逻辑完善功能。
5.采用分布式形式,易于扩展升级并且不影响系统稳定性。
6.降低系统的耦合性。
附图说明
图1为本发明方法流程示意图。
具体实施方式
下面结合附图,对本发明的技术方案进行具体说明。
本发明一种基于 kafka 实现稳定的高吞吐量的异步任务处理方法,如图1所示,具体实现步骤如下:
1.根据kafka的配置信息,初始化消费者相关参数,如最大获取任务数量、主题信息、线程个数、监控间隔时间配置、超时时间。
2.根据参数信息去创建一个线程池对象以及消费者对象,并且根据配置的主题信息(topic)按照“topic + KafkaServiceImpl”的名称去spring 容器里寻找对应的消费者。
3.将管理线程数加入到监控任务中,通过定时任务去输出监控的相关信息。
4.启动管理线程,判断是否存在无法预期的严重错误,若出现此错误,关闭管理线程,将已完成的任务的offset提交,若提交失败,及产生系统无法解决的问题时,则抛弃这些提交任务,重新初始化kafka信息。
5.管理线程去手动从kafka中获取(poll)数据,若没有数据,提交已处理的内容。若获取到数据,则判断是否由空闲线程,若无空闲线程,系统会等待1秒,后判断是否存在超时任务,若任务超时,系统会发出中断请求,将最早的超时任务中断以空出空闲的线程来执行任务。
6.管理线程将一批任务交由工作线程完成,管理线程对工作线程给与一个俩倍的超时时间来判断工作线程是否超时,若超时则中断工作线程的任务。
7.工作线程中在处理异步任务的过程中,会先判断此任务是否重复执行并记录信息输出到监控程序,管理线程还会记录捕获任务执行过程中发生的开发者未捕获的异常和一些开发者自身业务错误记录。
8.一批异步任务完成后,管理线程会手动提交偏移量。若任务执行过程中发送异常、错误和超时等情况会将此信息输出到监控程序中,监控程序会将一系列如任务执行时间(最大、最小、平均执行时间等),任务完成详细情况(成功、失败、异常、错误、超时)等情况按照监控间隔时间的频率输出到控制台并记录到日志文件上。
以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
Claims (1)
1.一种基于 kafka 实现稳定的高吞吐量的异步任务处理方法,其特征在于,包括如下步骤,
步骤S1、根据kafka的配置信息,初始化消费者相关参数,包括最大获取任务数量、主题信息、线程个数、监控间隔时间、超时时间;
步骤S2、根据参数信息创建一个线程池对象以及消费者对象,并且根据配置的主题信息按照“topic + KafkaServiceImpl”的名称去spring容器里寻找对应的消费者;
步骤S3、将管理线程数加入到监控任务中,通过定时任务按照监控间隔时间的频率去输出监控的相关信息;
步骤S4、启动管理线程,判断是否存在kafka无法获取消息、无法提交完成消息以及一个任务超出了设定的三倍超时时间时仍然错误中的任何一种情况,若是,关闭管理线程,并将已完成的任务的偏移量提交,该偏移量为任务完成后在kafka中标识位置;若已完成的任务的偏移量提交失败时或者因任务超时导致线程没有响应提交的,则重新初始化kafka信息和线程池信息;
步骤S5、管理线程从kafka中获取数据,若没有数据,提交已处理的内容;若获取到数据,则判断是否有空闲线程,若无空闲线程,系统会判断是否存在超时任务,若任务大于配置的三倍超时时间,系统发出中断请求,将最早的超时任务中断以空出空闲的线程来执行任务,若任务不存在超时,等待一秒继续判断是否存在空闲线程,直到有空闲线程,让空闲线程执行任务;
步骤S6、管理线程将一批任务交由工作线程完成,管理线程对工作线程给予一个两倍的超时时间来判断工作线程是否超时,若超时则中断工作线程的任务;
步骤S7、工作线程中在处理异步任务的过程中,会先判断此任务是否重复执行并记录信息输出到监控程序,管理线程还会记录捕获任务执行过程中发生的开发者未捕获的异常和开发者自身业务错误记录;
步骤S8、一批异步任务完成后,管理线程提交偏移量,若任务执行过程中发生异常情况会将此信息输出到监控程序中,监控程序会将包括任务执行时间、任务完成详细情况按照监控间隔时间的频率输出到控制台并记录到日志文件上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910613837.6A CN110377486B (zh) | 2019-07-09 | 2019-07-09 | 基于kafka实现稳定的高吞吐量的异步任务处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910613837.6A CN110377486B (zh) | 2019-07-09 | 2019-07-09 | 基于kafka实现稳定的高吞吐量的异步任务处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110377486A CN110377486A (zh) | 2019-10-25 |
CN110377486B true CN110377486B (zh) | 2022-07-08 |
Family
ID=68252523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910613837.6A Active CN110377486B (zh) | 2019-07-09 | 2019-07-09 | 基于kafka实现稳定的高吞吐量的异步任务处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110377486B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111193774A (zh) * | 2019-12-10 | 2020-05-22 | 天翼电子商务有限公司 | 提高服务器系统吞吐量的方法、系统以及服务器系统 |
CN111666156B (zh) * | 2020-06-03 | 2022-02-18 | 科东(广州)软件科技有限公司 | 一种容器编排方法、装置、设备和存储介质 |
CN112948136A (zh) * | 2021-02-02 | 2021-06-11 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 一种嵌入式操作系统异步日志记录的实现方法 |
CN115242787B (zh) * | 2022-07-22 | 2023-09-05 | 恒生电子股份有限公司 | 消息处理系统及方法 |
CN116185772B (zh) * | 2023-02-10 | 2023-09-19 | 安芯网盾(北京)科技有限公司 | 文件批量检测方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101882161A (zh) * | 2010-06-23 | 2010-11-10 | 中国工商银行股份有限公司 | 应用级异步任务调度系统和方法 |
CN107766129A (zh) * | 2016-08-17 | 2018-03-06 | 北京金山云网络技术有限公司 | 一种任务处理方法、装置及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721765B2 (en) * | 2002-07-02 | 2004-04-13 | Sybase, Inc. | Database system with improved methods for asynchronous logging of transactions |
US9201688B2 (en) * | 2010-12-17 | 2015-12-01 | Microsoft Technology Licensing, Llc | Configuration of asynchronous message processing in dataflow networks |
US10127120B2 (en) * | 2015-10-22 | 2018-11-13 | Oracle International Corporation | Event batching, output sequencing, and log based state storage in continuous query processing |
US10645181B2 (en) * | 2016-12-12 | 2020-05-05 | Sap Se | Meta broker for publish-subscribe-based messaging |
US10691514B2 (en) * | 2017-05-08 | 2020-06-23 | Datapipe, Inc. | System and method for integration, testing, deployment, orchestration, and management of applications |
-
2019
- 2019-07-09 CN CN201910613837.6A patent/CN110377486B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101882161A (zh) * | 2010-06-23 | 2010-11-10 | 中国工商银行股份有限公司 | 应用级异步任务调度系统和方法 |
CN107766129A (zh) * | 2016-08-17 | 2018-03-06 | 北京金山云网络技术有限公司 | 一种任务处理方法、装置及系统 |
Non-Patent Citations (2)
Title |
---|
一种基于Kafka的可靠的Consumer的设计方案;王岩等;《软件》;20160115(第01期);全文 * |
分布式消息系统研究综述;吴璨等;《计算机科学》;20190615;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110377486A (zh) | 2019-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110377486B (zh) | 基于kafka实现稳定的高吞吐量的异步任务处理方法 | |
EP2062139B1 (en) | Method for improving transfer of event logs for replication of executing programs | |
CN111782360A (zh) | 分布式任务调度方法及装置 | |
CN110581852A (zh) | 一种高效型拟态防御系统及方法 | |
CN103888441A (zh) | 一种应用程序与协议栈之间的信息传输方法及处理装置 | |
CN111949497B (zh) | 消息队列系统以及基于消息队列系统的消息处理方法 | |
CN110716793A (zh) | 一种分布式事务的执行方法、装置、设备及存储介质 | |
CN112261142B (zh) | 一种rdma网络的数据重传方法、装置及fpga | |
CN112631761A (zh) | 一种任务调度监控方法和装置 | |
JPH05508037A (ja) | 端末装置とユーザプログラムとの間のデータ通信を実現するための装置および方法 | |
CN111475312B (zh) | 基于实时操作系统的消息驱动方法和装置 | |
WO2012109915A1 (zh) | 一种保存话务数据的方法及系统 | |
CN110825505A (zh) | 任务调度方法、装置、计算机设备及存储介质 | |
CN115981893A (zh) | 消息队列任务处理方法、装置、服务器及存储介质 | |
CN114328638A (zh) | 一种基于数据库轮询的业务消息推送系统 | |
CN115357395A (zh) | 故障设备任务转移方法及系统、电子设备和存储介质 | |
US8359602B2 (en) | Method and system for task switching with inline execution | |
CN114268670A (zh) | 基于时间触发的以太网异步消息处理系统及方法 | |
JP2809209B2 (ja) | プロセス間通信方式 | |
CN109857715B (zh) | 一种强化错误排查支持的日志记录方法和系统 | |
CN117950829A (zh) | 基于消息队列的任务调度方法及计算机可读存储介质 | |
CN118200278A (zh) | 一种保证消息零丢失的方法和系统 | |
CN114510326A (zh) | 任务调度的方法、装置、电子设备和存储介质 | |
CN106980536B (zh) | 数据采集监控器的程序调度方法 | |
CN115114138A (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 |