哈希时间轮
哈希时间轮
Kafka 使用的是一种改进的时间轮算法,称为哈希时间轮(Hashed Wheel Timer)。
核心改进
支持任意延时
class HashedTimingWheel:
"""哈希时间轮"""
def __init__(self, tick_interval=10, wheel_size=512):
self.tick_interval = tick_interval # 10ms
self.wheel_size = wheel_size # 512 个槽
self.wheel = [[] for _ in range(wheel_size)]
self.current_tick = 0
def add_task(self, task, delay_ms):
"""添加任务"""
# ✅ 计算剩余 tick 数
ticks = delay_ms // self.tick_interval
if ticks < self.wheel_size:
# ✅ 短延时:放入当前时间轮
slot = (self.current_tick + ticks) % self.wheel_size
self.wheel[slot].append(task)
else:
# ✅ 长延时:降级处理(如放入数据库)
self._handle_long_delay(task, delay_ms)
def tick(self):
"""时间轮转动"""
# 获取当前槽位的任务
tasks = self.wheel[self.current_tick]
# 清空槽位
self.wheel[self.current_tick] = []
# 移动到下一个槽位
self.current_tick = (self.current_tick + 1) % self.wheel_size
return tasks优势
- ✅ 支持短延时的高性能处理
- ✅ 内存占用固定
- ✅ 实现相对简单