kafka中对时间轮的应用分析

Kafka采用时间轮实现高效的延时操作,如延迟生产、拉取和删除。时间轮通过数组和双向链表实现,降低插入和删除操作的时间复杂度至O(1)。当任务超出现有时间轮范围时,使用多层时间轮解决,通过时间轮降级将任务重新插入较低层时间轮。此外,Kafka结合DelayQueue推进时间并处理到期任务,以实现高性能定时任务执行。
摘要由CSDN通过智能技术生成

kafka中存在着大量的延时操作,比如延迟生产,延迟拉取,延迟删除等,这些延时操作并不是基于JDK 自带的Timer或者DelayQueue 实现,而是基于时间轮的概念自己实现了一个延时定时器,JDK中Timer和DelayQueue的插入和删除操作的平均时间复杂度为O(nlogn)并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为 O(1)。

kafka中的时间轮是一个存储定时任务的环形队列,底层采用数组实现,数组中的每个元素可以存放一个定时任务列表(TimerTaskList),TimerTaskList是一个环形的双向链表,链表中的每个元素TimerTaskEntry封装了一个真正的定时任务TimerTask。
时间轮由固定格数(wheelSize)的时间格组成,每一格都代表当前时间轮的基本时间跨度(tickMs),整个时间轮的总体时间跨度(interval)就是 wheelSize*tickMs。
时间轮还有一个表盘指针(currentTime),其值是tickMs的整数倍,用来表示时间轮当前所处的时间,表示当前需要处理的时间格对应的TimeTaskList 中的所有任务。

  • 时间轮的tickMs为1ms,wheelSize等于20,总体时间跨度interval就是20ms,初始情况下currentTime指向时间格0。
  • 此时有一个定时为2ms的任务插进来,就会放到时间格为2的TimeTaskList中&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值