- DelayQueue 中保存着所有的 TimerTaskList 对象,根据时间来排序,这样延时越小的任务排在越前面 。
- 外部通过一个线程(叫做ExpiredOperationReaper)从 DelayQueue 获取超时的任务列表 TimerTaskList,然后根据 TimerTaskList 的 过期时间来精确推进时间轮的时间 ,这样就不会存在空推进的问题啦 。
- Kafka 使用时间轮来实现延时队列,因为其底层是任务的添加和删除是基于链表实现的,是 O(1) 的时间复杂度,满足高性能的要求;
- 对于时间跨度大的延时任务,Kafka 引入了层级时间轮,能更好控制时间粒度,可以应对更加复杂的定时任务处理场景;
- 对于如何实现时间轮的推进和避免空推进影响性能,Kafka 采用空间换时间的思想,通过 DelayQueue 来推进时间轮,算是一个经典的 trade off 。
原文
https://ricstudio.top/archives/timewheel-in-kafka
推荐阅读
- 小白如何看出计算机操作系统是否开启勒索病毒危险端口
- 红茶的种类和特征,怎么样鉴别红茶
- 红茶绿茶种类,红茶伊丽莎白
- 家居装修中如何挂画墙
- 红茶有哪些茶厂,红茶种类爱尔兰
- 小白是如何让Kali Linux操作系统从U盘成功启动
- 最完整的Vue教程-从零开始编写可视化大屏
- 架构师才需要知道的知识:如何做容量预估和调优
- MySQL 使用 Mysqldump 备份导入数据导致主从异常
- 容器如何使用tini作为启动进程