概述

Kafka目前支持GZIP、Snappy、LZ4、zstd、不压缩这几种压缩算法。在开启压缩时,Kafka会选择一个batch的消息一起压缩,这样的一批消息就是一个压缩分段,我们也可以通过参数来控制每批消息的大小。

在Kafka中,生产者生成一个压缩分段发给broker,在broker中是不会解压这个压缩分段的(因为在Kafka中一个batch的消息在broker中是不会拆分的,自然也不会进行解压),最后压缩分段由消费者进行解压。

Kafka通过这种设计,降低了broker中CPU资源的消耗,同时还能获得压缩后「占用传输带宽小,占用存储空间小」等好处,是非常值得我们借鉴和学习的。

一个坑点

我们平常在讨论Kafka压缩的时候一般只考虑生产者这一侧的压缩。实际上,在broker中如果触发了某些条件也是会进行解压和压缩操作的!反映到系统层面就会看到broker端CPU使用率飙升。

有两种触发条件:

  1. broker端指定了和生产者端不同的压缩算法。
  2. 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消息压缩相关推荐

  1. 【kafka】浅谈Kafka的多线程消费的设计

    1.概述 转载:浅谈Kafka的多线程消费的设计 看原文去... 一.前言 跟RabbitMQ相比,Kafka的分区机制(Partition)使其支持对同一个"队列"分片并行读取, ...

  2. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  3. 浅谈kafka之partition

    partition(分区)是kafka的一个核心概念,kafka将1个topic分成了一个或多个分区,每个分区在物理上对应一个目录,分区目录下存储的是该分区的日志段(segment),包括日志的数据文 ...

  4. 浅谈Kafka选举机制

    Kafka是一个高性能,高容错,多副本,可复制的分布式消息系统.在整个系统中,涉及到多处选举机制,被不少人搞混,这里总结一下,本篇文章大概会从三个方面来讲解. 控制器(Broker)选主 分区多副本选 ...

  5. 浅谈 Python 程序和 C 程序的整合

    浅谈 Python 程序和 C 程序的整合 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问, ...

  6. AI 云原生浅谈:好未来 AI 中台实践

    简介:好未来通过阿里云云原生架构实现了对资源的灵活调度,阿里云为其 AI 中台奠定了敏捷而坚实的技术底座. 作者 | 刘东东 来源 | 凌云时刻(微信号:linuxpk) 前言 AI 时代的到来,给企 ...

  7. AI云原生浅谈:好未来AI中台实践

    简介: 2020年云栖大会上,好未来AI中台负责人刘东东,分享了他对AI云原生的理解与好未来的AI中台实践,本文为演讲内容整理. AI时代的到来,给企业的底层IT资源的丰富与敏捷提出了更大的挑战,利用 ...

  8. 浅谈用户行为分析(一)

    浅谈用户行为分析(一) 标签(空格分隔): 数据仓库 用户行为分析 关于用户行为分析,很多互联网公司都有相关的需求,虽然业务不同,但是关于用户行为分析的方法和技术实现都是基本相同的.作者在两家公司都了 ...

  9. 编程浅谈-以一个初出茅庐的Java程序员视角

    编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...

最新文章

  1. silverlight旋转中心很好玩
  2. iOS轻量分组日志工具 Log4OC
  3. [Vue源码分析]自定义事件原理及事件总线的实现
  4. linux中的fork方法(python)
  5. seo关键词互点软件报价_SEO关键词优化收费问题和外包报价问题,一文详解
  6. 具有Java 8支持的Spring Framework 4.0.3和Spring Data Redis 1.2.1
  7. makefile从无到有
  8. java中数据类型及运算符的注意事项
  9. LeetCode之猜数字大小
  10. yjj某数后缀生成(1-15,js逆向)
  11. QNX系统MfgTool烧写工具脚本说明
  12. POJ题目分类---计算几何
  13. html:用script实现搜索框
  14. 解决json字符串转为对象时LocalDateTime异常问题
  15. 微信小程序---微信头像、名称获取一次后即可使用
  16. 什么是内存对齐?如何计算内存对齐?为什么要内存对齐?
  17. python+sklearn实现决策树模型
  18. Latex编辑数学符号和希腊字母的方法
  19. SAP MM MARD 表里的Storage Bin 字段
  20. 2014 SuperMap GIS自主创新与应用研讨会资料集

热门文章

  1. 在线职业教育市场迎来井喷,未来该如何有序发展?
  2. VS新增snippets步骤
  3. Leetcode面试热题(九)
  4. Unity TextMeshPro的字体消失的问题
  5. 你是“穷忙”一族吗?
  6. 人工智能技术的应用领域
  7. 计算机科学的好处和坏处,电脑的坏处作文(五篇)
  8. 那个人对话了200亿次的微软小冰,就快十八岁了
  9. 2021年中国数字营销十大趋势
  10. python测试管理平台_Python + flask+ selenium 自动化测试用例管理、执行平台