浅谈Kafka消息压缩
概述
Kafka目前支持GZIP、Snappy、LZ4、zstd、不压缩
这几种压缩算法。在开启压缩时,Kafka会选择一个batch的消息一起压缩,这样的一批消息就是一个压缩分段,我们也可以通过参数来控制每批消息的大小。
在Kafka中,生产者生成一个压缩分段发给broker,在broker中是不会解压这个压缩分段的(因为在Kafka中一个batch的消息在broker中是不会拆分的,自然也不会进行解压),最后压缩分段由消费者进行解压。
Kafka通过这种设计,降低了broker中CPU资源的消耗,同时还能获得压缩后「占用传输带宽小,占用存储空间小」等好处,是非常值得我们借鉴和学习的。
一个坑点
我们平常在讨论Kafka压缩的时候一般只考虑生产者这一侧的压缩。实际上,在broker中如果触发了某些条件也是会进行解压和压缩操作的!反映到系统层面就会看到broker端CPU使用率飙升。
有两种触发条件:
- broker端指定了和生产者端不同的压缩算法。
- broker端发生了消息格式(V2 → V1,兼容老版本)转换,同时这种操作也会使Kafka丧失零拷贝的优势,进一步损失性能。这启发我们在生产环境中要尽量保证消息格式的统一。
在什么时候适合启用Kafka压缩功能
- 客户端(生产者、消费者)CPU资源充足。压缩毕竟是一种「时间换空间」的策略,如果能用系统长板来弥补短板的话那自然再好不过了。
- 带宽资源有限。目前带宽也是一种稀缺资源,尤其是对高吞吐的MQ而言,如果系统带宽成为瓶颈的话可以考虑开始消息压缩功能。→ 如果客户端机器 CPU 资源有很多富余,强烈建议开启 zstd 压缩,这样能极大地节省网络资源消耗。
几种压缩算法的性能对比
这张表是 Facebook Zstandard 官网提供的一份压缩算法 benchmark 比较结果:
可以看出:
- 吞吐量方面:
LZ4 > Snappy > zstd 和 GZIP
- 压缩比(
压缩前大小/压缩后大小
)方面:zstd > LZ4 > GZIP > Snappy
- 具体到物理资源,Snappy占用的网络带宽最多,zstd 最少。在 CPU 使用率方面,各个算法表现得差不多,只是在压缩时 Snappy 算法使用的 CPU 较多一些,而在解压缩时 GZIP 算法则可能使用更多的 CPU。
参考自胡夕老师《Kafka核心技术与实战》极客时间专栏,老师的课很棒,强烈推荐!
浅谈Kafka消息压缩相关推荐
- 【kafka】浅谈Kafka的多线程消费的设计
1.概述 转载:浅谈Kafka的多线程消费的设计 看原文去... 一.前言 跟RabbitMQ相比,Kafka的分区机制(Partition)使其支持对同一个"队列"分片并行读取, ...
- 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期
Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...
- 浅谈kafka之partition
partition(分区)是kafka的一个核心概念,kafka将1个topic分成了一个或多个分区,每个分区在物理上对应一个目录,分区目录下存储的是该分区的日志段(segment),包括日志的数据文 ...
- 浅谈Kafka选举机制
Kafka是一个高性能,高容错,多副本,可复制的分布式消息系统.在整个系统中,涉及到多处选举机制,被不少人搞混,这里总结一下,本篇文章大概会从三个方面来讲解. 控制器(Broker)选主 分区多副本选 ...
- 浅谈 Python 程序和 C 程序的整合
浅谈 Python 程序和 C 程序的整合 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问, ...
- AI 云原生浅谈:好未来 AI 中台实践
简介:好未来通过阿里云云原生架构实现了对资源的灵活调度,阿里云为其 AI 中台奠定了敏捷而坚实的技术底座. 作者 | 刘东东 来源 | 凌云时刻(微信号:linuxpk) 前言 AI 时代的到来,给企 ...
- AI云原生浅谈:好未来AI中台实践
简介: 2020年云栖大会上,好未来AI中台负责人刘东东,分享了他对AI云原生的理解与好未来的AI中台实践,本文为演讲内容整理. AI时代的到来,给企业的底层IT资源的丰富与敏捷提出了更大的挑战,利用 ...
- 浅谈用户行为分析(一)
浅谈用户行为分析(一) 标签(空格分隔): 数据仓库 用户行为分析 关于用户行为分析,很多互联网公司都有相关的需求,虽然业务不同,但是关于用户行为分析的方法和技术实现都是基本相同的.作者在两家公司都了 ...
- 编程浅谈-以一个初出茅庐的Java程序员视角
编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...
最新文章
- silverlight旋转中心很好玩
- iOS轻量分组日志工具 Log4OC
- [Vue源码分析]自定义事件原理及事件总线的实现
- linux中的fork方法(python)
- seo关键词互点软件报价_SEO关键词优化收费问题和外包报价问题,一文详解
- 具有Java 8支持的Spring Framework 4.0.3和Spring Data Redis 1.2.1
- makefile从无到有
- java中数据类型及运算符的注意事项
- LeetCode之猜数字大小
- yjj某数后缀生成(1-15,js逆向)
- QNX系统MfgTool烧写工具脚本说明
- POJ题目分类---计算几何
- html:用script实现搜索框
- 解决json字符串转为对象时LocalDateTime异常问题
- 微信小程序---微信头像、名称获取一次后即可使用
- 什么是内存对齐?如何计算内存对齐?为什么要内存对齐?
- python+sklearn实现决策树模型
- Latex编辑数学符号和希腊字母的方法
- SAP MM MARD 表里的Storage Bin 字段
- 2014 SuperMap GIS自主创新与应用研讨会资料集