kafka 生产者压缩
kafka 生产者压缩
在kafka 中,压缩可能发生在两个地方:生产正端和消费者端。
一般遵循Producer 端压缩、Broker 端保持、Consumer 端解压缩。
生产者端-压缩
生产者程序中配置 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 producer = new KafkaProducer<>(props);
Broker 端-压缩
一般遵循Producer 端压缩、Broker 端保持,但是broker 也会进行压缩的情况,例如以下两种情况:
情况一:Broker 端指定了和 Producer 端不同的压缩算法
Producer 说:“我要使用 GZIP 进行压缩。”
Broker 说:“不好意思,我这边接收的消息必须使用 Snappy 算法进行压缩。”
情况二:Broker 端发生了消息格式转换。
所谓的消息格式转换主要是为了兼容老版本的消费者程序。
broker 端解压缩
除了在 Consumer 端解压缩,Broker 端也会进行解压缩。每个压缩过的消息集合在 Broker 端写入时都要发生解压缩操作,目的就是为了对消息执行各种验证。
生产者端-解压缩
消息从Producer到Broker在到Consumer会一直携带消息的压缩方式,这样当 Consumer 读取到消息集合时,它自然就知道了这些消息使用的是哪种压缩算法。
各种压缩算法对比
Kafka 支持 3 种压缩算法:GZIP、Snappy 、LZ4、Zstandard。(每个版本之间会有差异)
压缩算法的重要指标:
压缩比,原先占 100 份空间的东西经压缩之后变成了占 20 份空间,那么压缩比就是 5,显然压缩比越高越好。
压缩 / 解压缩吞吐量,比如每秒能压缩或解压缩多少 MB 的数据。同样地,吞吐量也是越高越好。
参考:
不要小瞧女程序员