上云无忧 > 文档中心 > 腾讯云消息队列 Pulsar 版实战教程 - 消息压缩
消息队列 Pulsar 版
腾讯云消息队列 Pulsar 版实战教程 - 消息压缩

文档简介:
背景描述: 由于 Pulsar 限制消息最大为5MB,消息体过大将会导致消息发送失败。这时需要客户端将大消息进行压缩,以支持20MB大小的消息体发送。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景描述

由于 Pulsar 限制消息最大为5MB,消息体过大将会导致消息发送失败。这时需要客户端将大消息进行压缩,以支持20MB大小的消息体发送。

Pulsar 大消息处理

Pulsar 的消息最大限制默认是 5MB,Producer 发送的消息大小超过5MB会导致消息发送失败。如果客户端发送单条消息大小超过该限制,我们可以采用如下两种方式来处理:
Chunk Message:Pulsar 提供 Chunk Message 功能,开启 Chunk 机制时,客户端能够自动对大消息进行拆分,并保证消息的完整性,在 Consumer 能自动整合消息。
压缩消息:主要是对消息数据中相同字符序列进行替换,来压缩消息的大小。Pulsar 支持 LZ4、ZLIB、ZSTD、SNAPPY 四种压缩算法。
我们这里推荐压缩消息对大消息进行处理。

压缩算法分析比较

算法介绍

LZ4
LZ4 是一种无损数据压缩算法,可以提供极快的压缩和解压缩速度,对于 CPU 占用少。
ZLIB
ZLIB 压缩算法是一种常用的无损数据压缩技术,它可以有效地减少收发数据的大小,从而提高网络传输效率和网络容量。ZLIB 压缩算法是基于 Lempel-Ziv 压缩算法的一种变体,可以将原始数据压缩到原来的一半大小以下,并且支持压缩和解压缩操作。
ZSTD
ZSTD 压缩算法是一种 Huffman 编码的压缩算法,是 LZ77 的一种变种,可以针对不同数据进行有效压缩。它是一种实时编码算法,在处理大数据时可以更快速、更高效地压缩数据。相比其他压缩算法,ZSTD 在提高数据压缩率的同时兼顾压缩速度。
SNAPPY
SNAPPY 压缩是一种无损压缩技术,它依赖于 LZ77 原理来实现压缩效果。SNAPPY 压缩的核心原理是:只要数据流找到两个字符串之间的重复,就会用一组更短的代码来表示这个字符串,这样就可以减少数据流的大小。

算法对比

压缩算法
压缩比
压缩速度
解压速度
ZLIB 1.2.11 -1
2.743
110MB/S
400MB/S
LZ4 1.8.1
2.101
750MB/S
3700MB/S
ZSTD 1.3.4-1
2.877
470MB/S
1380MB/S
SNAPPY 1.1.4
2.091
530MB/S
1800MB/S
吞吐量:LZ4 > SNAPPY > ZSTD > ZLIB
压缩比:ZSTD > ZLIB > LZ4 > SNAPPY
物理资源方面,SNAPPY 算法占用的网络带宽最多,ZSTD 算法占用的网络带宽最少。

各压缩算法测试

测试结果

注意:
以下测试结果仅供参考。压缩效果,需要根据具体消息体内容来验证。
消息大小
消息
压缩算法
topic 监控消息大小
客户端消息压缩耗时
消息发送耗时
5M
随机消息体
LZ4(阀值5MB)
9.95MB
31ms
0.049ms
ZLIB
7.26MB
31ms
0.038ms
ZSTD
8.20MB
31ms
0.039ms
SNAPPY(阀值5MB)
9.70MB
33ms
0.046ms
6M
随机消息体
ZLIB(阀值6MB)
8.71MB
35ms
0.044ms
ZSTD(阀值6MB)
9.84MB
35ms
0.046ms
20M
相同消息体
LZ4
0.16MB
41ms
0.006ms
ZLIB
0.20MB
42ms
0.006ms
ZSTD
0.01MB
42ms
0.003ms
SNAPPY
2.47MB
41ms
0.021ms
40M
相同消息体
LZ4
0.32MB
123ms
0.008ms
ZLIB
0.39MB
122ms
0.008ms
ZSTD
0.01MB
124ms
0.004ms
SNAPPY
4.95MB
123ms
0.036ms
80M
相同消息体
LZ4
0.63MB
241ms
0.009ms
ZLIB
0.39MB
244ms
0.01ms
ZSTD
0.01MB
243ms
0.004ms
SNAPPY(阀值80M)
9.9MB
243ms
0.056ms
160M
相同消息体
LZ4
1.26MB
484ms
0.013ms
ZLIB
1.56MB
479ms
0.016ms
ZSTD
0.03MB
481ms
0.004ms
320M
相同消息体
LZ4
2.5MB
1035ms
0.03ms
ZLIB
3.1MB
1008ms
0.027ms
ZSTD
0.03MB
949ms
0.004ms
585M
相同消息体
LZ4
4.59MB
1705ms
0.027ms
ZLIB
5.67MB
1733ms
0.03ms
ZSTD
0.11MB
1722ms
0.006ms
总结:
在纯随机数据流中,四种压缩算法压缩效率都不是很高。消息大小超过5MB,四种压缩算法都无法将消息压缩到5MB以内。
在重复数据较多的数据流中,四种压缩算法可以实现很高的压缩速率,其中 LZ4、ZLIB、ZSTD 压缩算法可以实现将600MB内的消息压缩到5MB以内。

消息压缩 Demo 及使用测试

消息压缩 Demo 可参见:tdmq-sdk-demo

使用测试

生产端调用参数:
		
java -jar tdmq-sdk-demo-1.0-SNAPSHOT-jar-with-dependencies.jar pulsar://xxxx:6650
eyJrZXlJZCI6ImRlZmF1bHRfa2V5SWQiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzdXBlcnVzZXIifQ.dYcCfp4XrdWRKdKaWylobY-_xEExfRCi1pMvNyZXbqU
pulsar-78ra8ownxb7d/BigMSGSpace/BigMSGTopic subname 1 500 0 1 20480 1 0
消费端调用参数:
		
java -jar tdmq-sdk-demo-1.0-SNAPSHOT-jar-with-dendencies.jar pulsar://xxxx:6650
eyJrZXlJZCI6ImRlZmF1bHRfa2V5SWQiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzdXBlcnVzZXIifQ.dYcCfp4XrdWRKdKaWylobY-_xEExfRCi1pMvNyZXbqU
pulsar-92d7w2mjwmv9/BigMessSpace/BigMessTopic subname 1 500 1
相似文档
  • 什么是消息队列 Pulsar 版? 消息队列 Pulsar 版(TDMQ for Pulsar,简称 TDMQ Pulsar 版)是一款基于 Apache Pulsar 自研的消息中间件,具备极好的云原生和 Serverless 特性,兼容 Pulsar 的各个组件与概念,具备计算存储分离,灵活扩缩容的底层优势。
  • 如何申请使用 TDMQ Pulsar 版? 首次进入 TDMQ Pulsar 版控制台 即可开通使用。
  • 为使用腾讯云消息队列 TDMQ 服务(以下简称“本服务”),您应当阅读并遵守《消息队列 TDMQ 服务等级协议》(以下简称“本协议” 或“SLA”),以及《腾讯云服务协议》。本协议包含本服务的术语和定义、服务可用性/服务成功率等级指标、赔偿方案、免责条款等相关内容。请您务必审慎阅读、充分理解各条款内容,限制、免责条款或者其他涉及您重大权益的条款可能会以加粗、加下划线等形式提示您重点注意。
  • 消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一种分布式消息队列服务,它具有可靠的、基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的消息队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发消息互不干扰,无需各应用或组件始终处于运行状态。
  • 2022-11-08,上线专享集群:TDMQ CMQ 版上线专享集群,专享集群独占物理资源,数据安全,使用几乎无限制。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部