
Kafka
文章平均质量分 92
打酱油的葫芦娃
一万年太久,只争朝夕!
展开
-
Kafka的TimingWheel(时间轮)算法
Kafka中存在大量的延迟操作,比如延迟生产、延迟拉取和延迟删除等,Kafka并没有使用JDK自带的Timer或DelayQueue来实现延时的功能,而是基于时间轮算法自定义实现了一个用于延迟功能的定时器(SystemTimer)。JDK中的Timer和DelayQueue单个任务的插入和删除的平均时间复杂度为O(logN),并不能满足Kafka的高性能要求,而基于时间轮可以将任务的插入和删除操作的时间复杂度降为O(1)。下图即为Kafka的时间轮结构:Kafka的时间轮(TimingWheel)是原创 2022-01-18 11:11:01 · 8256 阅读 · 3 评论 -
Kafka为何可以实现高吞吐?
Kafka之所以可以实现高吞吐,主要依赖于以下5点:Zero Copy(零拷贝)技术Page Cache(页缓存)+磁盘顺序写分区分段+索引批量读写批量压缩首先说一下零拷贝技术:Zero Copy传统I/O在Linux系统中,传统I/O主要是通过read()和write()两个系统调用来实现的,通过read()函数读取文件到缓存区中,然后通过write()函数将缓存中的数据输出到网络端口。整个过程涉及2次CPU拷贝、2次DMA拷贝总共4次拷贝,以及4次上下文切换。上下文切换:当原创 2022-01-11 15:34:31 · 7764 阅读 · 0 评论