Kafka 服务端设计

集群设计

Kafka 服务端设计_第1张图片

 

连接交互

Kafka 服务端设计_第2张图片

         通过多个processor 线程来处理请求,线程数量由num.network.threads参数设置。响应队列与processor处理线程一一对应。处理请求是多个requestHandler线程处理,数量由num.io.threads参数设置。

文件存储

kafka将消息使用磁盘文件顺序存储,性能较高。(高于内存的随机读写)

每个消息文件的默认大小是1G,文件名称使用第一条消息的offset(消息的位置),

log文件存放消息,index文件存放索引。

Kafka 服务端设计_第3张图片

一个分区中的文件存储有文件的跳表,方便快速找到指定offset的文件

  Kafka 服务端设计_第4张图片

索引文件使用的稀疏索引

Kafka 服务端设计_第5张图片

 

 内存交互设计

服务端的消息读取使用了零拷贝的方式,提高效率。

非零拷贝

Kafka 服务端设计_第6张图片

其中会将数据从内存拷贝到kafka服务,之后拷贝到socket缓存。

 零拷贝

Kafka 服务端设计_第7张图片

 减少的中间的两次拷贝。

你可能感兴趣的:(kafka,分布式)