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
推荐阅读
-
-
像素150dpi是什么意思?图片150dpi是什么意思_4
-
iPhone■iPhone SE开卖第一日多版本售罄,销量突破14万
-
魔兽|魔兽:它是历代版本被“阉割”最严重的,两个副本强行融合在一起
-
中国南方电网@搭起“高速路”甘电外送“朋友圈”越来越广
-
#文字上的青年#又引人深思!看过的都喜欢,这才叫打油诗!逗人一笑
-
-
-
-
-
手绘10张图,把CSRF跨域攻击、JWT跨域认证说得明明白白的
-
纪晓岚|纪晓岚每天“日御五女”,食肉数十斤,为何还能活80多岁?
-
铁木真征服泰赤兀氏:分化拉拢显奇效,边缘人物获重赏
-
「美国」蓬佩奥发出最后通牒:中国赔偿美国14万亿,否则将进行清算
-
-
流媒体视频流媒体服务器稳定吗?出现播放中断问题怎么办?
-
白露|其它茶靠边站,这种早秋茶很受欢迎,放久了能泡也能煮入秋
-
-
半岛都市报|青岛一对夫妻殴打记者,涉嫌寻衅滋事被采取刑事强制措施
-