Kafka消息压缩配置建议
方案概述
在Kafka消息存储与传输流程中,消息压缩是一种优化性能、降低资源开销的方法。Kafka支持GZIP、SNAPPY、LZ4等多种压缩算法,这些算法在消息写入磁盘前对其进行压缩,既能减少存储空间占用,也能在网络传输过程中降低带宽消耗。
压缩原理介绍:
Kafka压缩算法在生产者客户端配置时,即可同时优化“磁盘存储”和“网络传输”,也能提高吞吐量。如果Kafka压缩算法在服务端配置,不但会增加服务端的CPU、网络带宽等的消耗,导致性能瓶颈,还会降低吞吐量。
在生产者客户端配置压缩算法的原理如下:
- 生产者客户端压缩消息:生产者客户端配置指定压缩算法后,先将多条消息批量压缩成一个数据包,然后通过网络发布至服务端。
- 服务端存储消息:服务端接收数据包后,无需解压,直接存储到磁盘。
- 消费者客户端解压消息:消费者客户端从Broker端拉取数据包后,根据它的压缩算法标识,使用对应的算法解压数据包,获取原始消息。
压缩算法对比:
Kafka支持的压缩算法在核心指标上存在显著差异,具体请参考表1。
实施步骤
在生产者客户端配置“compression.type”参数来启用指定类型的压缩算法。
Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("acks", "all"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // 开启GZIP压缩 props.put("compression.type", "gzip"); Producer<String, String> producer = new KafkaProducer<>(props);