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
推荐阅读
-
「体育大生意」整合游戏直播行业准备打硬仗,腾讯控股虎牙结束左右互搏
-
绝经|身上若2处“发痒”,很遗憾通知你:体内血糖已“超标”
-
-
-
-
DS电竞|淡斑美白,可惜很少有人得知,屈臣氏一款小红瓶突然“火”了
-
火气|京喜掀起“小店行动”:让小店经济的烟火气,更具全网高人气!
-
范志毅■悲哀!鲁能主力昨晚1停球超2米太业余,难怪李霄鹏都笑了!
-
血型决定孩子智力高低?专家解答:妈妈是这种血型,娃会很聪明
-
阿扉afield|瓜迪奥拉打造曼城新防线 7月3日国际足坛最新传闻
-
郑爽虐待两娃,转移财产至漂亮国?揭露疯批小仙女的恶毒事迹!
-
中新经纬|“双11”有哪些坑?中消协点名直播带货暗藏消费陷阱
-
虫子爱搞笑|前面排队的人“唰唰唰”全回头了,笑话:媳妇儿淡定的说:刀掉了
-
『卓越』高考出现的“神仙卷面”,老师舍不得扣分,自律的孩子有多棒
-
「遇见聊娱乐」却娶到高个子老婆,唯有被她气的吃不下饭,他们个子不高
-
余温|加快驶入“快车道”,我市积极推动新型基础设施稳步快速发展
-
-
河蚌:这种有着彩虹般颜色的小鱼,已成观赏鱼新贵,河蚌是它的专职保姆
-
乱世佳人最后一名主演去世|乱世佳人最后一名主演去世,享年104岁,都有哪些作品?
-
加多宝|红牛商标纷争再起:红牛会不会成为下一个加多宝?