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大问题,不要忽视了!
-
-
海底探探|幼儿园学霸,输给了每天玩的学渣,到底该不该让孩子“抢跑”?
-
-
中国网财经|?中银消费金融上半年净利同比大幅下滑 公司:因疫情影响
-
人民日报海外版海外网|美国人人都能有新冠疫苗,特朗普:到明年4月
-
-
-
-
彩色照片转黑白 还能分区调整颜色 用PS把彩色照片变成黑白色的5种方法?
-
-
小S自爆和具俊烨贴面热舞视频,二人火辣热情,大S躺沙发小玥儿缩角落!
-
-
iPad|一文了解iPad mini 6:性能强劲 不支持毫米波5G
-
闪付|手机盗刷黑产事件后续:云闪付已建立立体防控方案 安全专家:丢手机应立即挂失SIM卡
-
搜狐新闻■美食精选:红烧卤牛肚,枸杞木耳炒山药,肉沫冬瓜片,腐竹莲子养生汤
-
-