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
推荐阅读
-
君清观察室|美军也伤透脑筋,巴伦支海手术刀事件教训惨痛,战机高难度伴飞
-
仨三搞笑说|内饰配置还一塌糊涂,难道就不怕丢订单么?,凭什么军车卖那么贵
-
-
-
糗事大说|邓小平身处逆境,曾当面问何人:你是不是一直都在监视我,1976年
-
电视版《大地颂歌》1月1日晚湖南卫视新年首映,剧场版巡演明年继续
-
辽宋夏金|两宋帝王国宝级私家相册(高清,穿越必备)
-
-
【realmeQ】回顾3月新机大乱斗,谁能笑到最后?华为最后登场,能否收获胜局
-
别具一格|别具一格的T恤衫,搭配卡其色时尚的半身裙,散发出优雅的气质美
-
-
-
-
这样洗车等于毁车?为你解锁正确的洗车方式,汽车持久如新
-
行者然沐D3 S官图发布,外观加入了更战斗的套件,ALPINA
-
-
勒布朗·詹姆斯|美媒列出詹姆斯对阵30支球队的职业生涯总得分,仅三支球队未破千
-
经典军事|美媒来补“刀”:美国比中国差一百倍,形势大好?特朗普话音刚落
-
-
|85花再争金鹰女神!比她们演戏更出彩的是她们的穿搭