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
推荐阅读
-
我国应如何促进制造业高质量发展?需要文化力量的“柔性支撑”
-
韩娱没有圈|T-ara朴孝敏ins晒“身材和美貌”近况,大秀美背、S 曲线
-
苹果手机iPhone 11 Max带壳渲染图:后置三摄 静音开关有变
-
2020男孩取名字寓意好的名字 2022男孩子寓意好的名字
-
-
周扬青|远离渣男小猪之后的周扬青事业做到国外,努力让自己更加优秀
-
卫星|马斯克:由于火箭摄像头丢了,我们取消SpaceX第15批星链卫星发射
-
乘坐北京–扬州 Z29/Z30 次列车是怎样的体验?
-
-
公告|【提前看】22日公告精选:复星集团减持青岛啤酒股份比例达5%;多喜爱子公司中标22亿阿里项目
-
人民日报客户端|江西:运用智慧水利成果发现险情1600余处
-
lol资讯君|不然打不了比赛了,Doinb在线诉苦:峡谷之巅14号要上钻一
-
-
何有强|素颜穿黑色毛衣配蕾丝内搭,一转身成亮点,蒋勤勤“心机”好重
-
想做一个1000人的太极活动,北京哪块有场地 最好是室外的
-
-
浙报融媒体 “栽树工程”再发力!北京大学宁波海洋药物研究院落户梅山
-
「南部的部分」云南及时雨!大面积降雨覆盖全省!新一轮中雨大雨将分布云南如下
-
-
爸爸,你真的很重要!三年级以后,孩子更愿意听爸爸的想法