Kafka核心技术与实战 10 压缩算法

压缩秉承了用时间换空间的经典trade-off思想,即用CPU的时间去换取磁盘空间或网络I/O传输量,Kafka的压缩算法也是出于这种目的。

2,如何压缩:

了解Kafka如何压缩消息,首先要清楚Kafka的消息格式,目前kafka有两大类消息格式,社区称之为V1版本和V2版本。

A:共同点:

(1):Kafka的消息层次分为:消息集合(message set)和消息(message);一个消息集合中包含若干条日志项(record item),而日志项才是真正封装消息的地方。

(2):Kafka底层的消息日志由一系列消息集合日志项组成。Kafka通常不会直接操作具体的一条条消息,他总是在消息集合这个层面上进行写入操作。

B:不同点:引入V2的目的主要是针对V1版本的一些弊端做了修正

(1)把消息的公共部分抽取出来放到外层集合里。

如:在V1中每条消息都要执行CRC校验(循环冗余校验),有些情况下消息的CRC值会变,对每条消息都执行CRC校验,不仅浪费空间还耽误CUP时间。

(2)报存压缩消息的方法发生了变化:

v1把多条消息进行压缩后在保存到外层消息的消息体字段中。

v2 对整个消息集合进行压缩,压缩效果好与前者。

3,何时压缩:

在kafka中可能发生压缩的地方:生产者端和Broker端

A:生产者端:配置compression.type参数即表示指定类型的压缩算法。

B:有两种情况会样Broker端也可能进行压缩

(1):Broker端指定了和Producer端不同的压缩算法,这会导致Broker端接收到生产者发来的压缩消息,Broker端重新解压、在压缩。

(2):Broker端发生了消息格式转换,这种转换主要是为了兼容老版本的消费者程序,(v1和v2的差别)。这个过程会涉及消息的解压和重新压缩。这不仅对性能影响很大,还会让Kafka丧失引以为豪的Zero Copy特性。

4,何时解压:

通常情况下解压发生在消费者端。

A:这个流程是Producer发送的压缩消息到Broker,Broker原封不动的保存起来,当Consumer程序请求这部分消息时,Broker原样发出去,当下消息到的Consumer端后,由Consumer自行解压。

B:Consume之所以知道这些消息是用何种压缩算法的,是因为Kafka会将启用了哪种压缩算法封装到消息集合中,当Consumer读取到消息集合时,就知道了。

5:压缩算法对比:

在Kafka2.1.0版本之前,仅支持GZIP,Snappy和LZ4。2.1.0后还支持Zstandard算法(Facebook开源,能够提供超高压缩比)。

A:一个压缩算法的优劣,有两个重要指标:压缩比和压缩/解压缩吞吐量,两者都是越高越好。

B:吞吐量:LZ4>Snappy>zstd和GZIP,压缩比:zstd>LZ4>GZIP>Snappy

6:最佳实践:

A:启用压缩的一个条件是Producer端所在机器CPU资源充裕

B:生产环境网络带宽资源有限

C:尽量不要出现消息格式转换的情况。

常见问题

  • 如果多条消息组成消息集合发送,那是什么条件控制消息发送,如果是一条又是什么条件控制触发发送的呢

主要是这两个参数:batch.size和linger.ms。如果是生产了一条消息且linger.ms=0,通常producer就会立即发送者一条消息了。

  • 消息(v1叫message,v2叫record)是分批次(batch)读写的,batch是kafka读写(网络传输和文件读写)的基本单位,不同版本,对相同(或者叫相似)的概念,叫法不一样。

v1(kafka 0.11.0之前):message set, message

v2(kafka 0.11.0以后):record batch,record

其中record batch对英语message set,record对应于message。

一个record batch(message set)可以包含多个record(message)。

对于每个版本的消息结构的细节,可以参考kafka官方文档的5.3 Message Format 章,里面对消息结构列得非常清楚。

  • 看源码,broker在接收producer消息并落盘这块貌似没有用零拷贝啊!只有传输给consumer时用了,是的,就是你理解的那样。Kafka使用Zero Copy优化将页缓存中的数据直接传输到Socket——这的确是发生在broker到consumer的链路上。这种优化能成行的前提是consumer端能够识别磁盘上的消息格式。

最后

给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

32)]

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

[外链图片转存中…(img-jB2Q8vea-1718709002933)]

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值