tencent cloud

消息队列 CKafka 版

动态与公告
新功能发布记录
Broker 版本升级记录
公告
产品简介
TDMQ 产品系列介绍与选型
什么是消息队列 CKafka 版
产品优势
应用场景
技术架构
产品系列介绍
开源 Kafka 版本支持说明
与开源 Kafka 对比
高可用
使用限制
地域和可用区
相关云服务
产品计费
计费概述
价格说明
计费示例
按小时付费转包年包月
续费说明
查看消费明细
欠费说明
退费说明
快速入门
入门流程指引
准备工作
VPC 网络接入
公网域名接入
用户指南
使用流程指引
配置账号权限
创建实例
配置 Topic
连接实例
管理消息
管理消费组
管理实例
变更实例规格
配置限流
配置弹性伸缩策略
配置高级特性
查看监控和配置告警
使用连接器同步数据
实践教程
集群资源评估
客户端实践教程
日志接入
开源生态对接
替换支撑路由(旧)
迁移指南
迁移方案概述
使用开源工具迁移集群
故障处理
Topic 相关
客户端相关
消息相关
API 参考
History
Introduction
API Category
Making API Requests
Other APIs
ACL APIs
Instance APIs
Routing APIs
DataHub APIs
Topic APIs
Data Types
Error Codes
SDK 参考
SDK 概述
Java SDK
Python SDK
Go SDK
PHP SDK
C++ SDK
Node.js SDK
连接器相关 SDK
安全与合规
权限管理
网络安全
删除保护
事件记录
云 API 审计
常见问题
实例相关
Topic 相关
Consumer Group 相关
客户端相关
网络问题
监控相关
消息相关
服务协议
服务等级协议
联系我们
词汇表

压缩数据

PDF
聚焦模式
字号
最后更新时间: 2026-01-20 15:56:36

操作场景

数据压缩可以减少网络 IO 传输量,减少磁盘存储空间。您可以通过本文档,了解数据压缩支持的消息格式,并根据需求配置数据压缩。

消息格式

目前 CKafka 支持两类消息格式,分别为 V1 版本和 V2 版本(在 0.11.0.0 引入)。目前 CKafka 兼容 0.9、0.10、1.1、2.4、2.8 和 3.2 版本消息格式。
不同版本对应不同的配置,说明如下:
消息格式转换主要是为了兼容老版本的消费者程序,在一个 CKafka 集群中通常同时保存多种版本的消息格式(V1/V2)。
Broker 端会对新版本消息执行向老版本格式的转换,该过程中会涉及消息的解压缩和重新压缩。
消息格式转换对性能的影响很大,除了增加额外的压缩和解压缩操作之外,还会让 CKafka 丧失其优秀的 零拷贝(Zero-copy) 特性。因此,一定要保证消息格式的统一
零拷贝(Zero-copy):数据在磁盘和网络进行传输时,避免昂贵的内核态数据拷贝,从而实现快速的数据传输。

压缩算法对比

出于 CPU 性能影响及稳定性考虑,官方推荐使用的压缩算法为 Snappy 算法。
分析过程如下:
评估一个压缩算法的优劣,主要有两个指标:压缩比、压缩/解压缩吞吐量。 CKafka 2.1.0之前的版本支持三种压缩算法:GZIP、Snappy、LZ4。 在 CKafka 的实际使用中,三种算法的性能指标对比如下:
压缩比:LZ4 > GZIP > Snappy
吞吐量:LZ4 > Snappy > GZIP
物理资源占用如下:
带宽:由于 Snappy 的压缩比最低,因此占用的网络带宽最大。
CPU:在压缩时 Snappy 使用更多的 CPU,在解压缩时 GZIP 使用更多的 CPU。
因此,正常情况下三种压缩算法的推荐排序为:LZ4 > GZIP > Snappy。
经过长时间的现网运行试验,发现在大多数情况下上面的结论是没问题的。但是在某些极端情况下 LZ4 压缩算法会导致 CPU 负载增大。
经分析是业务的源数据内容不一样,导致压缩算法的性能表现不一样。故建议对 CPU 指标敏感的用户采用更为稳定的 Snappy 压缩算法。
说明:
CKafka 不推荐使用 GZIP 压缩算法。开启 Gzip 压缩对 CKafka 服务端有额外的 CPU 消耗。根据压测数据,如果开启 Gzip 压缩,建议预留 75% 左右的带宽 buffer(预留比例仅供参考,实际使用时需要观测具体的监控数据判断)。
例如:带宽 40MB/s 的实例,开启 GZIP 压缩后,建议将带宽提升到 40/(1-75%) = 160MB/s。

配置数据压缩

生产者可通过下述方法配置数据压缩:
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");

// Producer 启动后,生产的每个消息集合都会经过压缩,能够很好地节省网络传输带宽和 Kafka Broker 端的磁盘占用

// 请注意不同版本对应不同的配置,0.9及以下版本不允许使用压缩。1.1及以下版本默认不支持 Gzip 压缩格式。

props.put("compression.type", "snappy");
Producer<String, String> producer = new KafkaProducer<>(props);

大部分情况下,BrokerProducer 接收到消息后,仅仅只是原封不动地保存,而不会对其进行任何修改

说明与注意

发送数据到 CKafka,不能设置压缩 compression.codec。
1.1及以下版本默认不支持 GZIP 压缩格式。
GZIP 压缩对于 CPU 的消耗较高,使用 Gzip 会导致所有的消息都是 Invalid 消息。CKafka 不推荐使用 Gzip压缩。
开启 GZIP 后 CPU 占用率高,成为带宽使用瓶颈。若开启 Gzip,推荐调大生产端的 linger.ms、batch.size 配置。
使用 LZ4 压缩方法时,程序不能正常运行,可能的原因是:消息格式错误。请您检查 CKafka 版本,确认适用的消息格式是否正确。
不同 CKafka Client 的 SDK 设置方式不同,您可以通过开源社区进行查询(例如 C/C++ Client 的说明),设置消息格式的版本。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈