美文网首页
kafka性能为什么好

kafka性能为什么好

作者: 阿长_一个程序员 | 来源:发表于2019-10-12 19:39 被阅读0次

人人皆知kafka性能好,但真正了解原因的人就少了很多。说起来也是悲伤的故事,我的某次面试就凉在此题。那么从设计的角度看,kafka是如何实现高性能的呢?

1.写得快

Kafka会把消息写入到硬盘,绝对不会丢失数据。为了优化写入速度Kafak采用了两个技术, 顺序写入MMFile

顺序写入

因为硬盘是机械结构,寻址是最耗时的。所以硬盘最“讨厌”随机I/O,最喜欢顺序I/O,Kafka就是使用顺序I/O。


image.png

每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾(虚框部分)。

Memory Mapped Files

Kafka的数据并 不是实时的写入硬盘,它充分利用了现代操作系统 分页存储 来利用内存提高I/O效率。操作系统会选择适当的时机将数据写入硬盘。

缺点就是 不可靠,写到mmap中的数据并没有被真正的写到硬盘,操作系统会在程序主动调用flush的时候才把数据真正的写到硬盘。

Kafka提供了一个参数——producer.type来控制是不是主动flush,如果Kafka写入到mmap之后就立即flush然后再返回Producer叫 同步 (sync);写入mmap之后立即返回Producer不调用flush叫 异步 (async)。

2.读得快

cosumer向broker索要消息时,kafka使用 零拷贝(zero-copy) ,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”,直接复制到socket缓冲区

普通io 零拷贝

相关文章

网友评论

      本文标题:kafka性能为什么好

      本文链接:https://www.haomeiwen.com/subject/nplcmctx.html