Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。

压缩,是一种用时间换空间的 trade-off 思想,用 CPU 的时间去换磁盘或者网络 I/O 传输量,用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。

Kafka 是一个高吞吐量、可扩展的分布式消息系统,深入掌握 Kafka 的数据压缩和批量数据处理机制,对于优化系统性能和资源使用至关重要。

Kafka 数据压缩机制

数据压缩在 Kafka 中有助于减少磁盘空间的使用和网络带宽的消耗,从而提升整体性能。

通过减少消息的大小,压缩可以显著降低生产者和消费者之间的数据传输时间。

Chaya:Kafka 支持的压缩算法有哪些?

在 Kafka 2.1.0 版本之前,Kafka 支持 3 种压缩算法:GZIP、Snappy 和 LZ4。从 2.1.0 开始,Kafka 正式支持 Zstandard 算法(简写为 zstd)。

Chaya:这么多压缩算法,我如何选择?

一个压缩算法的优劣,有两个重要的指标:压缩比,文件压缩前的大小与压缩后的大小之比,比如源文件占用 1000 M 内存,经过压缩后变成了 200 M,压缩比 = 1000 /200 = 5,压缩比越高越高;另一个指标是压缩/解压缩吞吐量,比如每秒能压缩或者解压缩多少 M 数据,吞吐量越高越好。

如下图是 Facebook Zstandard 官网提供的一份压缩算法 benchmark 比较结果:

d54756e2c0f5f6f7faf76901bc9d221e.png

从图中可以看到,ZSTD 压缩比最高,但是吞吐量中规中矩。LZ4 在吞吐量方面属于王者。

  • GZIP:压缩比高,但压缩和解压缩速度相对较慢。适用于对传输带宽要求较高的场景。

  • Snappy:由 Google 开发,压缩和解压缩速度快,但压缩比相对较低。适用于对性能要求较高的场景。

  • LZ4:在压缩和解压缩速度以及压缩比之间取得良好平衡。适用于对性能和压缩比有综合需求的场景。

  • ZSTD:由 Facebook 开发,提供高压缩比和较快的压缩解压速度。适用于对高效压缩和快速处理都有需求的场景。

在 Kafka 的性能测试结果中,不同压缩算法的两个指标有以下排序特点。

  • 吞吐量方面:LZ4 > Snappy > zstd 和 GZIP;

  • 压缩比方面:zstd > LZ4 > GZIP > Snappy。

何时压缩

Chaya:我觉得可以在生产者和 Broker 端进行压缩,对么?

在生产者端压缩是很自然的想法,大部分情况下 Broker 收到 Producer 端的消息后是原封不动的保存,并不会进行压缩

生产者压缩

Kafka 的数据压缩主要在生产者端进行。具体步骤如下:

  1. 生产者配置压缩方式:在 KafkaProducer 配置中设置 compression.type 参数,可以选择 gzipsnappylz4zstd

  2. 消息压缩:生产者将消息批量收集到一个 batch 中,然后对整个 batch 进行压缩。这种批量压缩方式可以获得更高的压缩率。

  3. 压缩消息存储:压缩后的 batch 以压缩格式存储在 Kafka 的主题(Topic)分区中。

  4. 消费者解压缩:消费者从 Kafka 主题中获取消息时,首先对接收到的 batch 进行解压缩,然后处理其中的每一条消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多文件编程:c/c++分文件写法(入门)

前言 一个 C 项目通常会采取 声明与定义分离 的方式进行编写,其基本遵循:头文件中写声明,源文件中写定义。 此外,为了区分头文件与源文件,会采用不同的文件后缀: .h: 头文件 .cpp: 源文件 (当然还有其他的…

写真图片视频打赏系统源码全开源无加密

这是一款开源的写真图片及视频打赏系统源码,顾名思义他可以做写真图片打赏站也可以做视频打赏站,支付对接了易支付,拥有独立代理后台,全部源码无加密,另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介…

小白如何学习软件开发

众所周知,软件开发技术是IT技术的核心技术,也是从事IT职业的技术学习首选,因此不少人会去学习,下面我给大家分享关于软件开发学习方法有哪些,欢迎阅读! 1、明确学习目的 学习编程能锻炼思维,使我们的逻辑思…

openlayers WebGL裁剪图层,双图层拼接显示

本篇介绍一下使用openlayers WebGL裁剪图层,双图层拼接显示 1 需求 WebGL裁剪图层,双图层拼接显示 2 分析 图层prerender和postrender事件的使用 WebGL scissor方法的使用 scissor方法指定了一个裁剪区域,用来将绘图区域限制在其限定的盒…

【LeetCode】2187. 完成旅途的最少时间

1. 题意 2. 分析 二分法有一个关键特征:如果答案answer满足题意,那么对于任何整数i,如果有i>answer,那么i也会是一个存在的解,只不过不是最优解。 本题想要找出一个达到 totalTrips 趟需要的最少时间成本t&#x…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统(RTOS),由 Richard Barry 在 2003 年开发,并且由亚马逊的 FreeRTOS 项目(一个由 Amazon Web Services (AWS) 支持的开源项目)进一步推动和发展。FreeR…

麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140387947 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Java--接口的定义与实现

1.Java的接口是一种约束 2.定义一些方法,让不同的人实现 3.方法都是 public abstract 4.常量都是public static final 5.接口不能被实例化: 接口中没有构造方法 6.接口可以多继承: 使用implements即可实现 7.必须要重写接口中的方法…

在家上网IP地址是固定的吗?

在数字化时代,互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都离不开网络的支持。然而,当我们在家中接入互联网时,可能会产生这样一个疑问:在家上网IP地址是固定的吗?下面一…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上增加了大量功能和简化操作,以提高开发效率。 2. 特点 无侵入:只做增强不做改变,引入它不会对现有项目产生影响。依赖少:仅仅依赖 …

CV05_深度学习模块之间的缝合教学(1)

1.1 在哪里缝 测试文件?() 训练文件?() 模型文件?(√) 1.2 骨干网络与模块缝合 以Vision Transformer为例,模型文件里有很多类,我们只在最后…

嘉立创EDA隐藏地线或者

https://prodocs.lceda.cn/cn/pcb/side-panel-left-net/#%E9%A3%9E%E7%BA%BF

50+dfm模型素人网红路人实时直播替换DFLive模型dfm格式

作为一名直播达人,我投入了大量时间和精力在网上收集和购买各种直播所需的模型资源。这些资源不仅包括男模、女模,还有明星脸、大众脸、网红脸以及各类稀有的素人模型。为了回馈广大直播爱好者,我将这些宝贵资源整理成一个合集,供…

elasticsearch性能调优方法原理与实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

ROS1导航状态机与ROS2导航行为树

ROS1和ROS2导航框架中用到的各种底层算法基本相同&#xff0c;比如代价地图&#xff0c;全局路径规划和局部路径规划等&#xff0c;它们最大的不同在于整个系统框架设计。 一&#xff0c;ROS1 导航状态机 ROS1导航功能包move_base是一个状态机&#xff0c;从软件设计上来看&am…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层&#xff1a;当SIP消息从网络中传输到达TCP/IP协议栈时&#xff0c;首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装&#xff0c;得到网络层的IP数据报。 网络层&#xff1a;网络层会对IP数据报进行解析&#xf…

【GDCPC2024】【min_25筛】J.另一个计数问题

题目 传送门 思路 考场上的思路和正解差远了&#xff0c;属实是反演学魔怔了。 首先&#xff0c;对于所有的 x x x&#xff0c;它可以通过 2 x 2x 2x 和 2 2 2 连通&#xff0c;而 2 2 2 又可以和所有 m i n p ≤ ⌊ n 2 ⌋ minp\leq \left\lfloor\frac{n}{2}\right\…

浏览器插件利器--allWebPluginV2.0.0.16-alpha版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持chrome、FireFo…

江协科技51单片机学习- p27 I2C AT24C02存储器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Wikijs 部署教程

以下是一个 Wikijs 部署的简单教程&#xff0c;涵盖了使用 Docker 和直接安装两种方式&#xff1a; 方法一&#xff1a; 使用 Docker (推荐) Docker 是一个方便快捷的方式来部署 Wikijs&#xff0c;它可以避免许多手动配置步骤。 安装 Docker: 按照 https://docs.docker.com/…