Kafka如何实现延迟队列?

news2025/9/15 4:00:24
Kafka并没有使⽤ JDK⾃带的Timer或者DelayQueue来实现延迟的功能 ,⽽是基于时间轮自定义了⼀个⽤于实现延迟功能的定时器 SystemTimer )。

JDK的Timer和DelayQueue插⼊和删除操作的平均时间复杂度为O(nlog(n)),并不能满⾜Kafka的⾼性能要求,而基于时间轮可以将插⼊和删除操作的时间复杂度都降为O(1)


时间轮的应⽤并⾮Kafka独有,其应⽤场景还有很多,在NettyAkkaQuartzZookeeper等组件中都存在时间轮的踪影。底层使⽤数组实现,数组中的每个元素可以存放⼀个TimerTaskList对象。


TimerTaskList是⼀个环形双向链表,在其中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask.Kafka中到底是怎么推进时间的呢?Kafka中的定时器借助了JDK中的DelayQueue来协助推进时间轮。


具体做法是对于每个使⽤到的TimerTaskList都会加⼊到DelayQueue中。Kafka中的TimingWheel专⻔⽤来执⾏插⼊和删除TimerTaskEntry的操作,而DelayQueue专⻔负责时间推进的任务。再试想⼀下,DelayQueue中的第⼀个超时任务列表的expiration为200ms,第⼆个超时任务为840ms,这⾥获取DelayQueue的队头只需要O(1)的时间复杂度。


如果采⽤每秒定时推进,那么获取到第⼀个超时的任务列表时执⾏的200次推进中有199次属于“空推进”,而获取到第⼆个超时任务时有需要执⾏639次“空推进”,这样会无故空耗机器的性能资源,这⾥采用DelayQueue来辅助以少量空间换时间,从⽽做到了“精准推进”。


Kafka中的定时器真可谓是“知⼈善⽤”,⽤TimingWheel做最擅⻓的任务添加和删除操作⽽⽤DelayQueue做最擅⻓的时间推进⼯作,相辅相成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centOS配置ss5并解决部分出现的问题

文章目录代理服务器socks5协议搭建ss5代理服务器安装ss5修改配置文件添加用户名和密码修改ss5端口修改ss5启动权限启动ss5服务配置socks全局使用qq验证参考代理服务器 实际的工作的有时候需要用到代理服务器,通过代理服务器可以一定程度上隐藏自己的真实IP&#xf…

聚焦 | 千海金与大工科技园“喜结连理” 正式达成战略合作

为贯彻国家碳达峰碳中和相关工作要求,加快实施可再生能源替代行动,推动可再生能源加快步入高质量跃升发展新阶段。12月9日,由千海金集团、大连理工大学科技园联合成立的低碳科技与绿色金融研究中心举行揭牌仪式。 大连市西岗区科工贸副局长李…

nacos--基础--1.3--理论--架构

nacos–基础–1.3–理论–架构 1、基本架构及概念 1.1、服务 (Service) 是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,举例如下 Kuber…

[2022-12-11]神经网络与深度学习 hw12 - 小作业

contentshw12 - 不知道该起个什么名字task1题目内容题目分析题目解答题目总结task2题目内容题目分析题目解答题目总结task3题目内容题目分析题目解答题目总结写在最后hw12 - 不知道该起个什么名字 task1 题目内容 在小批量梯度下降中,尝试分析为什么学习率要和批…

苦卷28天,P9大佬给我的Alibaba面试手册!终于成功踹开字节大门

怎么说呢,今年真的是寒气逼人啊!在这个大环境下,裁员已经不算是特别的事情,粗暴裁员也许是未来一种趋势…在职的卷的起飞,离职的找不到好工作。 做点能做的:跑跑步骑骑车多锻炼;当当上面正版书…

[附源码]Python计算机毕业设计大学生心理健康管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

eNSP综合实验合集(eNSP综合大作业合集)_可先收藏

作者:BSXY_19计科_陈永跃BSXY_信息学院注:未经允许禁止转发任何内容**注:在该文章中就只对ensp综合实验做一个总结和归纳,只给出相应的topo图和需求说明和对应的文章的连接。有什么问题也可以私信我,看到都会回复的。文…

picoCTF 密码学方向RSA算法做题记录

RSA算法原理: https://blog.csdn.net/qq_45894840/article/details/128204460?spm1001.2014.3001.5502Mind your Ps and Qs 题目描述:In RSA, a small e value can be problematic, but what about N? Can you decrypt this? 下载题目 在这里可以看…

初级软件测试面试会问什么 掌握好这两几个方法,还怕拿捏不住hr?

初级软件测试工程师大多为新入门的小白,在经历面试时,往往也是最忐忑的一部分人,为此,我特为大家整理了一些初级软件测试面试会问的问题,帮助你们在面试时能够从容不迫的回答出hr的问题,拿下offer&#xff…

Python实现PSO粒子群优化卷积神经网络CNN分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种…

ESB产品UI升级总结

一款好的产品需要不断地打磨才能变得更完整、更稳定。企业服务总线ESB产品作为数通畅联的核心产品,为了能够更好地迎合客户的需求,实现更好的视觉效果和体验感,需要不断地迭代升级。 本次升级主要是针对整体页面进行优化以及对部分功能进行修…

【C++】vector迭代器失效与深浅拷贝问题

vector迭代器失效与深浅拷贝问题 文章目录vector迭代器失效与深浅拷贝问题一、vector迭代器失效问题1. insert迭代器失效1.1.扩容导致野指针1.2.迭代器指向位置意义改变1.3.windows下VS中标准库和Linux下g中标准库对insert迭代器失效的处理2. erase迭代器失效2.1.迭代器失效指向…

UniMSE(2022)统一的多模态情感分析与情感识别(多层融合和对比学习)

论文题目(Title):UniMSE: Towards Unified Multimodal Sentiment Analysis and Emotion Recognition 研究问题(Question):短情绪emotions和长情绪sentiments的分析和识别 研究动机(Motivation…

JAVA之 Maven进阶 分模块开发与设计 依赖管理 聚合 继承 属性 多环境配置与应用 私服

分模块开发意义 我们先创建一个模块并设计相应的内容,pom文件中会有该模块的信息 然后运用maven的install运行,下载该模块的jar到本地仓库 然后需要用到该模块的时候 我们在另一个模块的pom中导入创建的模块坐标就可以了 依赖管理 依赖具有传递性 直…

北京智汇云舟科技数字孪生三大创新应用场景

目前,数字孪生技术正在通过各种行业以无数不同的方式被使用,以产生一些惊人的效果。世界各地不同行业的公司正在采用数字孪生系统来改进从流程到供应链管理、从设施管理到满足能源和可持续发展目标的方方面面。今天我们将重点从轨道交通、学校、能源水利…

NeurIPS 2022-10大主题、50篇论文总结

2672篇主要论文,63场研讨会,7场受邀演讲,包括语言模型、脑启发研究、扩散模型、图神经网络……NeurIPS包含了世界级的AI研究见解,本文将对NeurIPS 2022做一个全面的总结。 第36届Neural Information Processing Systems Conferenc…

“美亚杯”第二届中国电子数据取证大赛答案解析(团体赛)

1. 根据所提供的文件,在映像文件的采集过程中,曾使用那一种的写入保护设备? A)软件写入保护设备 B)WiebeTech写入保护设备 C)EPOS写入保护器 D)Tableau取证工具SATA / IDE Bridge IEEE 1394…

内容完美!阿里技术官21年新肝出了一份MySQL笔记+面试题

目录 共有12个章节的内容,看大标题就知道全部都是MySQL的重要知识! 内容过多,没有办法全部展示 部分内容截图 Mysql权限 MySql数据类型 锁 业务设计 索引与执行计划 MySQL面试笔记 面试笔记分为6章,分别是MySQL基础篇、MySQL索引…

【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器

前言 本文给大家分享的是如何通过利用Python实现多功能音乐播放器,废话不多直接开整~ 开发工具 Python版本: 3.6 相关模块: os模块 sys模块 time模块 random模块 PyQt5模块 环境搭建 安装Python并添加到环境变量,pip安…

Pro_12丨为股指而战

量化策略开发,高质量社群,交易思路分享等相关内容 『正文』 ˇ 大家好,今天我们分享2022年度最后一期策略——股指专属策略。本期策略是2022年专门为股指而开发的专属策略,算是我个人对明年的一厢情愿吧! 该策略由超…