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

news2024/9/23 14:07:57

《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.coloradmin.cn/o/1932244.html

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

相关文章

python课设——宾馆管理系统

python课设——宾馆管理系统 数据库课设-宾馆管理系统-python3.7pyqt5 简介 大二数据库课程设计(3-4天工作量)的项目,登录界面的ui设计参考了他人成果,其余ui以及所有后端部分全部独立完成,详细功能见功能模块图使用…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 | 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示,中国拥有最大的新能源车产能,芯片用量也是越来越多。但是芯片的自给率目前不到10%,是结构性的短缺。 中国拥有最大新能源车产能&#…

入门【消息队列】这一篇就够了

消息队列 消息队列的模型为什么要用消息队列分布式消息队列应用场景分布式消息队列选型RabbitMQ入门实战singleWorkFanoutDirectTopic核心特性消息过期机制消息确认机制死信队列消息队列的模型 生产者:Producer,发送消息的人(客户端) 消费者:Consumer,接受消息的人(客…

NLCISBNPlugin,从“中国国家图书馆”获取图书信息Calibre插件

NLCISBNPlugin可以从中国国家图书馆获取图书信息,包括 ISBN、书名、作者、出版日期等信息,然后将这些信息添加Calibre中。 插件安装:NLCISBNPlugin.zip 安装说明: 在 Calibre官方网站 上下载并安装Calibre。下载最新版本的 NLCISBNPlugin …

JUC 包中的 Atomic 原子类总结

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

RFID涉密载体管控系统|DW-S402功能介绍

文件载体管控系统DW-S402是用于对各种载体进行有效管理的智能柜(智能管理系统),实现对载体的智能化、规范化、标准化管理,广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 区域监控管理 主要是通过在需要监控的…

el-table表格操作列错行处理

解决方法&#xff1a; <style>::v-deep .el-table th.el-table__cell > .cell {white-space: nowrap !important;} </style>

ArkUI状态管理

State装饰器 在声明式UI中&#xff0c;是以状态驱动试图更新 状态 (State) 指驱动视图更新的数据(被装饰器标记的变量) 试图(View) 基于UI描述渲染得到用户界面 说明 1.State装饰器标记的变量必须初始化&#xff0c;不能为空 2.State支持Object、classstring、number、b…

Self-Attention 自注意力机制(二)——实例过程说明

一、自注意力机制核心过程 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;&#xff0c;也称为内部注意力机制&#xff0c;是一种在序列模型中用于捕捉序列内部不同位置之间依赖关系的技术。这种机制允许模型在处理序列时&#xff0c;对序列中的每个元素分配不…

基于 Web 的家校联系系统的设计与实现

目录 基于 Web 的家校联系系统的设计与实现 一、绪论 &#xff08;一&#xff09;研究背景 &#xff08;二&#xff09; 研究目的 &#xff08;三&#xff09; 研究意义 二、需求分析 &#xff08;一&#xff09; 功能需求 &#xff08;二&#xff09; 性能需求 &#…

【C++】类和对象的基本概念与使用

本文通过面向对象的概念以及通俗易懂的例子介绍面向对象引出类和对象。最后通过与之有相似之处的C语言中的struct一步步引出C中的类的定义方式&#xff0c;并提出了一些注意事项&#xff0c;最后描述了类的大小的计算方法。 一、什么是面向对象&#xff1f; 1.面向对象的概念 …

解决一下git clone失败的问题

1&#xff09;.不开梯子&#xff0c;我们用https克隆 git clone https://github.com 报错&#xff1a; Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法&#xff1a; 开梯子&#xff0c;然后# 注意修改成自己的IP和端口号 gi…

自适应巡航控制中的Stop Go功能详解

自适应巡航控制中的跟车行驶功能详解 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感器架构5. 实际应用案例6. 总结与展望 1. 背景介绍 自适应巡航控制&#xff08;Adaptive Cruise Control, ACC&#xff09;系统中的Stop & Go功能是提升驾驶舒适性和安全性的重要子…

Qt Splash样式的登录窗

Qt Splash样式的登录窗实现 目录 0 结果 1. 设计界面 2.鼠标拖动界面 3. 密码MD5加密 4. 保用户名和密码到注册表 0 结果 1. 设计界面 继承自QDialog&#xff0c;图片使用QLabel加载&#xff0c;windowFlag样式为 Qt::SplashScreen TLoginForm::TLoginForm(QWidget *pa…

PPOCR训练后acc为0解决方法

首先你需要先配置PPOCR源码和环境&#xff0c;可以按照如下流程 PPOCR训练和C#部署英文字符训练_ppocrlabel可以终端运行吗-CSDN博客 训练时如下 如下是rec训练模型 acc为0 det也是如此 如下没有 名为best的模型文件 解决办法就是 将如下的train和eval部分的batch_siz…

挂耳式蓝牙耳机什么牌子好?这五款综合表现遥遥领先

为什么这几年开放式耳机受到了越来越多消费者的喜爱&#xff1f;我想是因为它全方位的弥补了入耳式耳机堵塞耳朵、不够安全健康的缺陷&#xff0c;真正做到了安全性与舒适性兼得。那么刚入坑开放式耳机的小白该如何挑选一款品质较高的开放式耳机呢&#xff1f;挂耳式蓝牙耳机什…

第59期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Python酷库之旅-第三方库Pandas(027)

目录 ​一、用法精讲 68、pandas.infer_freq函数 68-1、语法 68-2、参数 68-3、功能 68-4、返回值 68-5、说明 68-6、用法 68-6-1、数据准备 68-6-2、代码示例 68-6-3、结果输出 69、pandas.interval_range函数 69-1、语法 69-2、参数 69-3、功能 69-4、返回值…

JVM--HostSpot算法细节实现

1.根节点枚举 定义&#xff1a; 我们以可达性分析算法中从GC Roots 集合找引用链这个操作作为介绍虚拟机高效实现的第一个例 子。固定可作为GC Roots 的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;例如 栈帧中的本地变量表&a…

硬件开发笔记(二十六):AD21导入电感原理图库、封装库和3D模型

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