《kafka 核心技术与实战》课程学习笔记(七)

这篇具有很好参考价值的文章主要介绍了《kafka 核心技术与实战》课程学习笔记(七)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

生产者压缩算法

怎么压缩?

  • 压缩(compression)秉承了用时间去换空间的经典 trade-off 思想,具体来说就是用 CPU 时间去换磁盘空间或网络 I/O 传输量,希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。
  • 目前 Kafka 共有两大类消息格式,社区分别称之为 V1 版本和 V2 版本。
    • 不论是哪个版本,Kafka 的消息层次都分为两层:消息集合(message set)以及消息(message)。
    • 一个消息集合中包含若干条日志项(record item),而日志项才是真正封装消息的地方。
    • Kafka 底层的消息日志由一系列消息集合日志项组成。
    • Kafka 通常不会直接操作具体的一条条消息,它总是在消息集合这个层面上进行写入操作。
  • V2 版本有一个和压缩息息相关的改进,就是保存压缩消息的方法发生了变化。
    • 之前 V1 版本中保存压缩消息的方法是把多条消息进行压缩然后保存到外层消息的消息体字段中;
    • 而 V2版本的做法是对整个消息集合进行压缩。
    • 显然后者应该比前者有更好的压缩效果。

何时压缩?

  • 在 Kafka 中,压缩可能发生在两个地方:生产者端和 Broker 端。
  • 生产者程序中配置 compression.type 参数即表示启用指定类型的压缩算法。
  • 其实大部分情况下 Broker 从 Producer 端接收到消息后仅仅是原封不动地保存而不会对其进行任何修改,有两种例外情况就可能让 Broker 重新压缩消息。
    • Broker 端指定了和 Producer 端不同的压缩算法。
    • Broker 端发生了消息格式转换。

何时解压缩?

  • 通常来说解压缩发生在消费者程序中,也就是说 Producer 发送压缩消息到 Broker 后,Broker 照单全收并原样保存起来。
  • 当 Consumer 程序请求这部分消息时,Broker 依然原样发送出去,当消息到达 Consumer 端后,由 Consumer 自行解压缩还原成之前的消息。
  • Kafka 会将启用了哪种压缩算法封装进消息集合中,这样当 Consumer 读取到消息
    集合时,它自然就知道了这些消息使⽤的是哪种压缩算法。
  • 除了在 Consumer 端解压缩,Broker 端也会进行解压缩。
    • 注意了,这和消息格式转换时发生的解压缩是不同的场景。
    • 每个压缩过的消息集合在 Broker 端写入时都要发生解压缩操作,目的就是为了对消息执行各种验证。
    • 这种解压缩对 Broker 端性能是有一定影响的,特别是对 CPU 的使用率而言。

各种压缩算法对比

  • 看一 个压缩算法的优劣,有两个重要的指标:
    • 压缩比
      • 原先占 100 份空间的东西经压缩之后变成了占 20 份空间,那么压缩比就是 5,显然压缩比越高越好;
    • 压缩 / 解压缩吞吐量
      • 每秒能压缩或解压缩多少 MB 的数据。
      • 同样地,吞吐量也是越高越好。
  • Facebook Zstandard 官网提供的一份压缩算法 benchmark 比较结果:《kafka 核心技术与实战》课程学习笔记(七)
    • 在吞吐量方面:LZ4 > Snappy > zstd 和 GZIP;
    • 在压缩比方面:zstd > LZ4 > GZIP > Snappy;
    • 使用 Snappy 算法占用的网络带宽最多,zstd 最少,这是合理的,毕竟 zstd 就是要提供超高的压缩比;
    • 在 CPU 使用率方面,各个算法表现得差不多,只是在压缩时 Snappy 算法使用的 CPU 较多一些,而在解压缩时 GZIP 算法则可能使用更多的 CPU。

文章来源地址https://www.toymoban.com/news/detail-509188.html

到了这里,关于《kafka 核心技术与实战》课程学习笔记(七)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Redis 核心技术与实战》课程学习笔记(五)

    那我们总说的 Redis 具有高可靠性,又是什么意思呢? 其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。 AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增加副本冗余量,将⼀份数据同时保存在多个实例上。 即使有一个实例出现了故障,需要过一段时

    2024年02月13日
    浏览(49)
  • 《Redis 核心技术与实战》课程学习笔记(四)

    一旦服务器宕机,内存中的数据将全部丢失。目前,Redis 的持久化主要有两大机制,即 AOF 日志和 RDB 快照。 AOF 日志是如何实现的? 我们比较熟悉的是数据库的写前日志(Write Ahead Log, WAL),也就是说,在实际写数据前,先把修改的数据记到日志文件中,以便故障时进行恢复

    2024年02月12日
    浏览(43)
  • 《Redis 核心技术与实战》课程学习笔记(一)

    为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题: 一个是写 AOF 和 RDB 会造成 Redis 性能抖动; 另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢,限制了同步和恢复速度。 其实,一个可行的解决方案就是使用

    2024年02月12日
    浏览(50)
  • 《Redis 核心技术与实战》课程学习笔记(三)

    Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。 多线程的开销 我们刚开始增加线程数时,系统吞吐率

    2024年02月12日
    浏览(40)
  • 《Redis 核心技术与实战》课程学习笔记(六)

    在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制。 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。 监控 哨兵进程在运行时,周期性地给所有的主从库

    2024年02月13日
    浏览(39)
  • 《MySQL 实战 45 讲》课程学习笔记(四)

    索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位

    2024年02月14日
    浏览(43)
  • 《Kubernetes入门实战课》课程学习笔记(一)

    现在 Kubernetes 已经没有了实际意义上的竞争对手,它的地位就如同 Linux 一样,成为了事实上的云原生操作系统,是构建现代应用的基石。 现代应用是什么? 是微服务,是服务网格,这些统统要围绕着容器来开发、部署和运行。 使用容器就必然要用到容器编排技术,在现在只

    2024年02月17日
    浏览(66)
  • 唐宇迪机器学习实战课程笔记(全)

    机器学习模型的参数,不是直接数学求解,而是利用数据,进行迭代epoch,梯度下降优化求解。 目标:更好的拟合连续函数(分割连续样本空间的平面h(·)) ε ( i ) varepsilon^{(i)} ε ( i ) 是 真实值 y ( i ) y^{(i)} y ( i ) 与 预测值 h θ ( x ) = θ T x ( i ) h_theta (x)=theta^Tx^{(i)} h θ ​ ( x )

    2024年02月16日
    浏览(42)
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

    课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 1 - 2节) 开场白,HarmonyOS 的一个简介,话不多说,直接看图吧! 工欲善其事必先利其器,开发准备需要两件事:1、开发文档;2、开发工具 打开鸿蒙官方网站,

    2024年04月24日
    浏览(40)
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思

    目录 一、智能合约的反思         1.Is smart contract really smart?         2. Irrevocability is a double edged sword.         3. Nothing is irrevocable. 二、语言设计上的反思         1.Is solidity the right programming language?         2.编写智能合约的语言应该有什么样的表达力? 三

    2024年01月20日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包