Kafka 则是通过 DelayQueue 来推进,是一种空间换时间的思想; - DelayQueue 中保存着所有的 TimerTaskList 对象,根据时间来排序,这样延时越小的任务排在越前面 。
- 外部通过一个线程(叫做ExpiredOperationReaper)从 DelayQueue 获取超时的任务列表 TimerTaskList,然后根据 TimerTaskList 的 过期时间来精确推进时间轮的时间 ,这样就不会存在空推进的问题啦 。
其实 Kafka 采用的是一种权衡的策略,把 DelayQueue 用在了合适的地方 。DelayQueue 只存放了 TimerTaskList,并不是所有的 TimerTask,数量并不多,相比空推进带来的影响是利大于弊的 。总结
- Kafka 使用时间轮来实现延时队列,因为其底层是任务的添加和删除是基于链表实现的,是 O(1) 的时间复杂度,满足高性能的要求;
- 对于时间跨度大的延时任务,Kafka 引入了层级时间轮,能更好控制时间粒度,可以应对更加复杂的定时任务处理场景;
- 对于如何实现时间轮的推进和避免空推进影响性能,Kafka 采用空间换时间的思想,通过 DelayQueue 来推进时间轮,算是一个经典的 trade off 。
本文通过 Kafka 来讲述了时间轮的算法设计思想,其中还提到了 Netty 时间轮算法的实现,可能会比较偏向理论,推荐去阅读一下 Kafka 和 Netty 时间轮实现的源码,并不是特别难,对比起来看会更有收获 。
原文
https://ricstudio.top/archives/timewheel-in-kafka
推荐阅读
-
倪妮|有种“整容”叫分手,5年后倪妮变化不大,冯绍峰却像换了个人!
-
【巴基斯坦】最新型坦克运往巴铁,一口气卖出上百辆,印度T90将风光不再
-
新车部落■万拿下的中型 SUV 推荐,款款都有科技大屏,花小钱也能买大车!10
-
-
本田|2022款本田思域跑车范十足,满满都是吸引力,和十代雅阁神似
-
印度|成全球第三大经济体?外媒:印度或倒退25年,印度将取代日本
-
那些年向前冲|5G流畅先锋来袭!iQOO Z1x兼顾高刷与续航,7月9日正式发布
-
全球的军事纵横|俄:一个子儿也不给,乌首任总统向俄美英追索3000亿美元弃核补偿
-
「空白」农村创业,市场空白很大,哪些项目可以填补农村的空白
-
-
【克克异闻】每天炒一盘,改善视力,燃烧脂肪,越吃越瘦,胡萝卜和此物一起炒
-
初善至心|知名男星性取向曝光!大庭广众下向男友要抱抱举高高?
-
士官长|士官长将在《光环》剧集中摘下头盔 20年后首露真容
-
【精气神科技|堪称性价比之王,几乎零差评的三款苹果手机!便宜又好用】
-
看看新闻Knews暑假近尾声 学生全情参与生活垃圾分类创意征集
-
-
-
月饼|最后一种堪称“抗饿神器”被公认的3种“抗饿”零食:月饼未上榜
-
小金方|还能防中暑!,千古名方生脉散——3味药小方救急心脏
-
高校|中国院士第一县:出了26位院士,近百位高校校长,一万名教授