Kafka的压测是很有必要的,假设我们使用的种子消息大小为1KB,如果不开压缩,在TPS一百万左右的时候,可以打满万兆网卡的带宽,如果开启了压缩,我们可以达到TPS -> 2000万,吞吐量提升了20倍

这个吞吐量的提升,是在CPU足够的情况下,利用数据压缩,减少了数据体积,增加了传输的数据量提升的

在了解Kafka的数据压缩之前,我们先了解数据压缩的实现和数据压缩的使用场景

从时间角度来说,如果不使用压缩,传输只需要传输未压缩的数据耗时

但是使用数据压缩的话,压缩耗时就是 传输压缩数据的耗时和CPU压缩的耗时

因此,使用压缩的因素还要考虑,CPU的压缩耗时,如果应用处理业务逻辑需要耗费大量的CPU资源,就不适合做压缩工作

压缩的本质是一个资源的置换,要么是时间换空间,要么是空间换时间,

就好比是木桶的短板,每个系统都有一个性能瓶颈资源,可能是磁盘,网络带宽或CPU,如果使用压缩,是拿CPU换网络带宽

所以是通过权衡的,数据压缩可以提升性能,那就需要使用压缩,不过需要使用合适的压缩算法

常见的压缩算法有 ZIP GZIP SNAPPY LZ4等

压缩算法,考虑不同的压缩比和压缩耗时,压缩速度快的算法,比如LZ4,但不一定压缩率高

所以针对不同的样例,选择最合适的压缩算法

然后就是Kafka如何进行消息压缩的

kafka支持开启压缩,可以进行配置,也支持配置使用不同的压缩算法,原因在上面说过,不同的业务场景是否选择是否开启,对于Kafka来说,可以选择一批消息一起压缩,交由生产者压缩后发送,在队列中不进行解压,整批的存储,整批的发送给消费者,批消息交给消费者进行解压

这样,就基本是Kafka的压缩流程

然后是RocketMQ的文档,如何实现消息压缩的

RMQ的消息压缩,默认的算数法是zip,也是客户端做解压缩的工作,服务端不处理,对于批量消息的压缩,尚不支持

发表评论

邮箱地址不会被公开。 必填项已用*标注