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
推荐阅读
-
桃桃淘电影|也是永远的“小燕子”,组图:她是“演员”综艺导师
-
-
-
国产又一巨头轰然倒下!曾获阿里四次投资,今负债23亿无奈离场
-
虎门大桥怎么看虎门大桥异常抖动?我们问了下港珠澳大桥抗风试验专家
-
难民营|希腊最大难民营烧毁数千人无家可归,德法领导人积极倡议国际援助
-
人民日报海外网|佩洛西宣布强制性新规:在美众议院内必须戴口罩
-
红楼梦@《红楼梦》里,芳官都得罪了谁?婆子群体能量不可小觑
-
-
地下城与勇士|办公室的女经理,这么穿应该不拉仇恨吧?
-
-
从澳国立的会计专业研究生转学到墨尔本大学可以嘛还是从莫纳什转学过去容易一些呢。
-
三高@疫情冲击之下,厦门为“三高”企业复工复产按下“快进键”
-
-
【排头军史】美突发大规模暴乱,上千民众持枪围堵议会大楼,噩耗一个接着一个
-
-
快乐小生|娶个能保护你的媳妇还想咋的,幽默笑话:一分彩礼没花
-
-
-