【Kafka面试】Kafka中实现高性能的设计有了解过吗?

一、消息分区

  • 不受单台服务器的限制,可以不受限的处理更多的数据
  • 并且数据量过大之后,还会分段存储

二、顺序读写

  • Kafka的消息时存储在磁盘中的文件中的,在写文件时以追加的方式写入,这个顺序读写效率是很高的
  • 效率高主要是和随机读写进行比较,主要是磁盘的寻址过程效率高
  • 磁盘顺序读写,提升读写效率

三、页缓存

  • 页缓存是linux中的概念,可以理解为linux系统的缓存
  • Kafka在读数据时,把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问

四、零拷贝【重点】

Linux的IO模型:划分两个空间,用户空间和内核空间,用户空间权限比较小,内核空间权限更大一些,可以调用系统的一切资源。

1. 非零拷贝

在这里插入图片描述

  • 保存消息的流程:一个生产者去发送消息,肯定是在用户空间发起的,消息时要存储在磁盘文件中,用户空间没有权限调用磁盘读写,会先把数据拷贝到内核空间的页缓存中去处理,页缓存中数据到了一定批次后,就会把数据写入到磁盘中。

  • 消费消息的流程:一个消费者去消费消息,首先用户空间的Kafka服务会先到页缓存中去找有没有这个消息,没有再到磁盘文件中去读取文件中的消息。把消息拷贝到页缓存中,再从页缓存中将数据拷贝到用户空间的Kafka中。Kafka将消息拷贝到socket缓冲区,socket缓冲区在将消息拷贝给网卡发送给消费者。这个过程性能肯定是不高的,因为消息拷贝的次数太多了。

2. 零拷贝

在这里插入图片描述

  • 把所有的事情都委托给系统去操作,由系统直接从页缓存中将消息拷贝到网卡,发送给消费者
  • 减少上下文切换及数据拷贝的次数

五、消息压缩

  • Kafka内部提供了多种的消息压缩算法,发送数据时可以专门进行设计
  • 压缩数据时,可以减少磁盘IO和网络IO
  • 不过压缩会耗费一定的CPU,根据业务需求进行压缩设计

六、分批发送

  • 消息打包批量发送,减少网络传输开销,提高网络传输效率和吞吐量
  • 通过参数的配置来批量发送消息的大小,默认:16KB
  • 也可以设置等待时间,在等待时间内,如果消息没达到16KB大小,Kafka也会将缓冲区中的消息发送出去,避免消息积压

七、小结

在这里插入图片描述

八、模拟面试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值