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
推荐阅读
-
XSKY发布开放数据保护框架(ODPF),拓展超融合第二存储市场
-
网信办约谈学而思网校APP负责人究竟怎么回事?网信办约谈学而思网校APP负责人具体情况
-
做成|艺术家何云昌取出一根肋骨做成项链,给自己最爱的5个女人戴上
-
-
孩子嫉妒心强,家长要正确引导,养成良性竞争意识受益终生
-
-
「华为Mate30」华为真的在欧洲那么火吗?一个真实的故事,超乎想象
-
-
楠美女播财经|金融企业岗位来了!前海启动“2020春风青年行”招聘系列活动
-
-
-
【台军】台媒曝:台军禁止飞行员对解放军战机开第一枪,否则法办
-
百里守约|5周年免费福利别错过,守约史诗新皮帅炸,710留给阿离返场皮肤!
-
-
-
智能手机那点事 这四款机型基本三年不卡,并且可以升级鸿蒙系统,华为手机别乱选
-
清华大学|中国大学最新排名:清华实力夺冠,人大跌出前30,浙大跻身前5
-
【四川广汉燃爆事故现场明火扑灭】四川广汉燃爆事故现场明火扑灭 鞭炮厂已被夷为平地
-
苹果|女子iPhone 11 Pro意外落入湖中:1个月后捞上来竟正常运行
-