Kafka学习笔记 --- Kafka的TimingWheel时间轮/调度笔记

Posted 杨鑫newlfe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka学习笔记 --- Kafka的TimingWheel时间轮/调度笔记相关的知识,希望对你有一定的参考价值。

概念介绍

在kafka中,有许多请求并不是立即返回,而且处理完一些异步操作或者等待某些条件达成后才返回,这些请求一般都会带有timeout参数,表示如果timeout时间后服务端还不满足返回的条件,就判定此次请求为超时,这时候kafka同样要返回超时的响应给客户端,这样客户端才知道此次请求超时了。比如ack=-1的producer请求,就需要等待所有的isr备份完成了才可以返回给客户端,或者到达timeout时间了返回超时响应给客户端。

上面的场景,可以用延迟任务来实现。也就是定义一个任务,在timeout时间后执行,执行的内容一般就是先检查返回条件是否满足,满足的话就返回客户端需要的响应,如果还是不满足,就发送超时响应给客户端。

对于延迟操作,java自带的实现有Timer和ScheduledThreadPoolExecutor。这两个的底层数据结构都是基于一个延迟队列,在准备执行一个延迟任务时,将其插入到延迟队列中。这些延迟队列其实就是一个用最小堆实现的优先级队列,因此,插入一个任务的时间复杂度是O(logN),取出一个任务执行后调整堆的时间也是O(logN)。

如果要执行的延迟任务不多,O(logN)的速度已经够快了。但是对于kafka这样一个高吞吐量的系统来说,O(logN)的速度还不够,为了追求更快的速度,kafka的设计者使用了Timing Wheel的数据结构,让任务的插入时间复杂度达到了O(1)。

Timing Wheel

以上是关于Kafka学习笔记 --- Kafka的TimingWheel时间轮/调度笔记的主要内容,如果未能解决你的问题,请参考以下文章

Kafka学习笔记 --- Kafka的TimingWheel时间轮/调度笔记

Kafka学习笔记 --- Kafka的TimingWheel时间轮/调度笔记

学习笔记Kafka—— Kafka安装配置—— Kafka单代理及常用操作

学习笔记Kafka—— Kafka安装配置—— Kafka单代理及常用操作

Kafka中文文档学习笔记

Kafka多维度系统精讲之-Kafka核心API——Consumer学习笔记(重要)