【博学谷学习记录】超强总结,用心分享|架构师-Kafka优化手段

一、性能优化

1.1 批量发送消息

Kafka 采用了批量发送消息的方式,通过将多条消息按照分区进行分组,然后每次发送一个消息集合,从而大大减少了网络传输的开销

1.2 消息压缩

消息压缩的目的是为了进一步减少网络传输带宽,而对于压缩算法来说,通常是: 数据量越大,压缩效果才会越好

因为有了批量发送这个前期,从而使得 Kafka 的消息压缩机制能真正发挥出它的威力(压缩的本质取决于多消息的重复性),对比压缩单条消息,同时对多条消息进行压缩,能大幅减少数据量,从而更大程度提高网络传输率。

在这里插入图片描述
整体来看,gzip 压缩效果最好,但是生成耗时更长,综合对比 lz4 性能最佳。

1.3 高效序列化

Kafka 消息中的 Key 和 Value,都支持自定义类型,只需要提供相应的序列化和反序列化器即可
因此,用户可以根据实际情况选用快速且紧凑的序列化方式(比如 ProtoBuf、Avro)来减少实际的网络传输量以及磁盘存储量,进一步提高吞吐量。

二、存储优化

2.1 磁盘顺序写

通过 IO 多路复用搞定网络通信后,Broker 下一步要考虑的是:如何将消息快速地存储起来?

Kafka 作为消息队列,本质上就是一个队列,是先进先出的,而且消息一旦生产了就不可变,这种有序性和不可变性使得 Kafka 完全可以「顺序写」日志文件,也就是说,仅仅将消息追加到文件末尾即可。

有了顺序写的前提,我们再来看一个对比实验,从下图中可以看到:磁盘顺序写的性能远远高于磁盘随机写,甚至高于内存随机写。

2.2 零拷贝

Kafka 用到了零拷贝(Zero-Copy)技术来提升性能,所谓的零拷贝是指数据直接从磁盘文件复制到网卡设备,而无需经过应用程序,减少了内核和用户模式之间的上下文切换。

2.2.1 传统的复制方式

分四个过程:
1、操作系统将数据从磁盘中加载到内核空间的Read Buffer(页缓存区)中。
2、应用程序将Read Buffer中的数据拷贝到应用空间的应用缓冲区中。
3、应用程序将应用缓冲区的数据拷贝到内核的Socket Buffer中。
4、操作系统将数据从Socket Buffer中发送到网卡,通过网卡发送给数据接收方。

在这里插入图片描述

通过上图我们发现,传统的数据文件传输需要多次在用户态和核心态之间进行切换,并且需要把数据在用户太和和核心态之间拷贝多次,最终才打到网卡,传输给接收方。

	那么有没有一种技术,可以是实现数据之间在核心态进行传输,而不需要将数据在核心态和用户态之间来回复制,最终发送给接收端呢?答案是肯定的,下面我们来简单介绍一下Kafka的零拷贝技术。

2.2.2 DMA技术

DMA,又称之为直接内存访问,是零拷贝技术的基石,DMA 传输将数据从一个地址空间复制到另外一个地址空间,当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成,因此通过DMA,硬件则可以绕过CPU,自己去直接访问系统主内存,很多硬件都支持DMA,其中就包括网卡、声卡、磁盘驱动控制器等。

	有了DMA技术的支持之后,网卡就可以直接区访问内核空间的内存,这样就可以实现内核空间和应用空间之间的零拷贝了,极大地提升传输性能。

2.2.3 零拷贝方式

所谓的零拷贝是指将数据在内核空间直接从磁盘文件复制到网卡中,而不需要经由用户态的应用程序之手,这样既可以提高数据读取的性能,也能减少核心态和用户态之间的上下文切换,提高数据传输效率,下图展示了Kafka零拷贝的数据传输过程。数据传输的的过程就简化成了:
1、操作系统将数据从磁盘中加载到内核空间的Read Buffer(页缓存区)中。
2、操作系统之间将数据从内核空间的Read Buffer(页缓存区)传输到网卡中,并通过网卡将数据发送给接收方。
3、操作系统将数据的描述符拷贝到Socket Buffer中,Socket 缓存中仅仅会拷贝一个描述符过去,不会拷贝数据到 Socket 缓存。

通过零拷贝技术,就不需要把 内核空间页缓存里的数据拷贝到应用层缓存,再从应用层缓存拷贝到 Socket 缓存了,两次拷贝都省略了,所以叫做零拷贝。这个过程大大的提升了数据消费时读取文件数据的性能,Kafka 从磁盘读数据的时候,会先看看内核空间的页缓存中是否有,如果有的话,直接通过网关发送出去。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值