惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Help Net Security
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
PCI Perspectives
PCI Perspectives
博客园 - 三生石上(FineUI控件)
V2EX - 技术
V2EX - 技术
Spread Privacy
Spread Privacy
T
Tor Project blog
量子位
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
小众软件
小众软件
博客园 - 叶小钗
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
Y
Y Combinator Blog
N
News | PayPal Newsroom
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tenable Blog
Scott Helme
Scott Helme
G
GRAHAM CLULEY
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
博客园 - 司徒正美
Application and Cybersecurity Blog
Application and Cybersecurity Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
L
LangChain Blog
C
Check Point Blog
Google Online Security Blog
Google Online Security Blog
V
Visual Studio Blog
Latest news
Latest news

博客园 - 李潘

我们为什么需要分布式系统? 怎么算是在工作中负责? 怎么更好的沟通? 怎么用工作邮件? 为工作排好优先级 怎么使用硬件同步原语替代锁? 怎么正确使用锁? 聊聊缓存 为什么Kafka的性能那么好? 怎么避免服务内存溢出? 应用程序之间的通信传输协议 怎么选择数据序列化方案? 怎么利用异步设计提升系统性能? 怎么处理消息积压问题? 怎么处理消息重发的问题? 怎么做才能不丢消息? 怎么用消息队列实现分布式事务? 聊聊消息队列中的基础概念 我们要选择哪个消息队列产品?
聊聊数据压缩
李潘 · 2023-03-20 · via 博客园 - 李潘

什么情况适合使用数据压缩?

数据压缩不仅能节省存储空间,还可以用于提升网络传输性能。

通过网络传输数据,使用数据压缩前后,处理的时间会有一些差别:

  • 压缩前:传输未压缩数据耗时
  • 压缩后:压缩耗时+传输压缩数据耗时+解压耗时

压缩和解压缩的操作都是计算密集型操作,非常耗费CPU资源,如果我们的应用处理业务逻辑本身就需要耗费大量的CPU资源,就不太适合再进行压缩和解压缩操作。

如果我们的系统瓶颈在于磁盘IO,同时CPU资源又有大量空闲,那么就非常适合在将数据写入磁盘前先进行压缩。

数据压缩的本质是资源的置换,是一个时间换空间,或者说CPU资源置换存储资源的操作。

需要选择什么压缩算法?

压缩算法可以分为有损压缩和无损压缩,有损压缩主要用来压缩音视频,它在压缩之后会丢失消息,而无损压缩的数据,在经过压缩和解压缩后,数据是没有变化的。

目前常用的压缩算法包括:ZIP、GZIP、SNAPPY、LZ4等,选择压缩算法时,主要考虑数据的压缩率和压缩耗时。一般来说,压缩率越高的算法,压缩耗时也越高。如果对性能要求很高,可以选择压缩速度快的算法,比如LZ4,如果需要更高的压缩比,可以考虑GZIP算法。

压缩样本对压缩速度和压缩比的影响也是比较大的,同样大小的一段数字和一段新闻的文本,即使是使用相同的压缩算法,压缩率和压缩时间的差异也是比较大的,所以在选择压缩算法之前,可以先尝试用我们系统中真正使用的数据做一些测试,这样可以找到最合适的压缩算法。

如何选择合适的压缩分段?

大部分压缩算法的区别主要在于对数据进行编码不同,压缩的流程和压缩包的结构大致一样,而在压缩的过程中,我们需要了解如何选择合适的压缩分段大小。

在压缩时,给定的被压缩数据必须由确定的长度,或者说是有头有尾的数据,不能是一个无限的流数据。如果要对流数据进行压缩,也需要把流数据划分成多个帧,一帧一帧的分段压缩。

压缩算法在开始压缩之前,一般都需要对被压缩数据从头到尾进行一次扫描,扫描的目的是确定如何对数据进行划分和编码,一般的原则是重复次数多、占用空间大的内容,使用尽量短的编码,这样压缩率会更高。

被压缩的数据长度越大,重码率会越高,压缩比也就越高。

分段也不是越大越好,实际上分段大小超过一定长度后,再增加长度对压缩率的共享就不大了,同时,过大的分段长度,在解压缩时,会有更多的解压浪费。

我们需要根据具体的业务场景,选择合适的压缩分段,在压缩率、压缩速度和解压浪费之间找到一个合适的平衡。

Kafka如何处理消息压缩?

Kafka是否开启消息压缩,是可以进行配置的,它也支持配置使用哪一种压缩算法。

在开启压缩时,Kafka选择一批消息一起压缩,每一批消息就是一个压缩分段。使用者也可以通过参数来控制每批消息的大小。

Kafka并不需要在服务端对接收到的批消息进行解压,而是整批直接存储,然后将其发送给消费者,由消费者对批消息进行解压处理。

不在服务端解压,就不会耗费服务端的CPU资源,同时传递消息数据时,真用的传输带宽也会小。

在使用Kafka时,如果生产者和消费者的CPU资源不是特别吃紧,开启压缩后,可以节省网络带宽和服务端的存储空间,提升总体的吞吐量。