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
推荐阅读
-
-
高品图像与Jamendo达成合作,为用户提供优质商用正版音乐
-
任程伟|出道22年从无绯闻,当红时低调嫁圈外丈夫,婚后儿女双全幸福美满
-
小说|金庸小说里武功最高的职业, 秒杀杨过, 若我们常来此处, 能考北大
-
|职问|卷起来了!金杜、汉坤攀比式扩招知产,毕业起薪30W,香车美宅人生巅峰!
-
中国财富网|股价创2个月以来新低,鹏博士股价大跌5.05%
-
实时情报站|多部门接力营救,高速隧道内一名乘客突发脑溢血
-
穿衣搭配秀|“阴阳衬衫”到底多流行?王俊凯也不甘示弱,秒变“上镜青年”!
-
-
「同城资讯」@梅州市车主!今起广东高速ETC有新变化!
-
「星星看点点」布加迪被打脸?,科尼赛格下一个目标:482.8km/h
-
吃记|用电饭锅就可以搞定的懒人饭,不用炒,不用闻油烟,非常适合夏天
-
爆笑社■你这是出去遛弯啊!还带着老公!,GIF搞笑趣图:大姐
-
-
-
么么八卦|在爱情里总是主动付出的生肖,一旦分手就会陷入悲伤无法自拔
-
风流才子张江雄|情感科技纯电SUV,车展实拍!,哪吒汽车-哪吒U
-
『生猪价格』猪价进入“低谷”,又一农产品连降3天,农民:为什么?
-
故事说科技H 咕咚百元级智能手表F3,健身入门新选择,运动新风尚
-
【新华社】看美丽乡村 庆70华诞丨浙江省湖州市安吉县递铺街道鲁