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
推荐阅读
-
颖姐娱谈|太到位!网曝金晨不仅送姐姐们上万护肤品,还送了一样浪漫的礼物
-
轰动|村庄发现的文物,出土后即轰动全国,两千多年前可调动千军万马
-
『胡十三』上线时间大致确定,这次改动有点大,魔兽世界:正式服9.0版本
-
-
-
『北京不为职工开公积金账户罚5万』北京:不为职工开公积金账户罚5万
-
-
晒与唐尼高司令合影,关继威否认被歧视,网友想多了还是另有苦衷
-
装修时没埋网线,现在只有门口的弱电箱里有网线,怎样解决
-
时尚路人|针织衫配五分裤,健美身材一览无遗,妮可·墨菲外出购物
-
-
「候知健」就骗出地面所有导弹,美军战机欺骗中俄防空的绝招:仅需几枚弹药
-
-
-
BiuFashion|伊能静打扮和老气不沾边,穿“儿童彩虹装”出镜,模样嫩得真招摇
-
GameRes游资网|《守望先锋》成长的四年,简析其塑造玩法策略性的努力
-
-
一琦的小世界|腿长的女生全凑一块了,势必决出谁第一
-
闽东日报|拼了!》11月开拍!宁德少年足球题材将登上银幕!,《站起来
-
北京日报|海淀区永定路街道:多措并举做好封闭小区居民生活服务保障