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
推荐阅读
-
5G|运营商宽带提速到500兆,为什么网速没变化?是谁偷了我的带宽?
-
-
漫漫笑:别到时候钱没留下,孩子留了一堆,搞笑段子:哼哼
-
德怀特·霍华德|放弃霍华德!湖人为何签下哈勒尔?三方面解读,得分能力更加出色
-
格尔木通报女大学生失联:今晨救援力量已赴可可西里查找
-
女人梦见上面的牙掉了一颗 梦见上面的牙掉了一颗还有血
-
北京日报客户端|调查称仅9%为无症状感染者,巴西新冠肺炎累计确诊人数近150万
-
淼淼|2岁女童10分钟横渡两百米沾天湖 网友自嘲:自己20多岁还游不了1米
-
科普成华 测谎仪都拿他没办法,如今却销声匿迹!,火星男孩预言2020年大灾难
-
东京奥运会|东京奥运会定于2021年7月23日开幕,场馆和赛程已确认
-
好身材|小姐姐一条蓝色紧身牛仔裤,展示出不一样的魅力
-
[台安]《GTA5》最无聊的实验有哪些?家里买了台安检机,是否有效?
-
-
「自摆乌龙」山西一球队后卫自摆乌龙被门将杀害?警方回应
-
-
-
【大众网】四喜儿“不讨喜”引热议,孙迪《鬓边不是海棠红》上线
-
可爱的小冉就不会有我的今天,克罗斯:如果没有海因克斯
-
辰雪丰华|穿一字肩礼服出镜,P掉小肚子更甜美,陈乔恩被说“胖”了的美照
-
数学▲?2020年高考数学难吗?学生:不怎么难就是有点懵圈