端口映射 细胞因子 leetcodeLCP 循环 arrays merge jboss Material UI vue源码下载 前端vue框架 sketch up教程 angularjs视频教程 cpm计算 java通用版qq浏览器下载 maven插件 excel加减混合求和 python基础 python断言assert实例 python操作mongodb python编程题 java对象 java入门教程 java自学教程 java时间戳转换 linux磁盘管理 onenote2003 电视免费软件 vue上传文件 eclipse中文版下载 netreflector go程序设计语言 俄罗斯方块代码 正当防卫4存档 勇敢者的游戏3 日志软件 ae烟雾特效 python简单代码 劳动节称号 u盘防复制 php队列
当前位置: 首页 > 学习教程  > 编程语言

生产者压缩算法

2020/11/24 9:34:29 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

压缩是一种用时间换空间的做法,通过CPU时间去换磁盘空间和网络传输I/O 传输量。 Kafka对消息的整个传递过程中:Producer 端压缩、Broker 端保持、Consumer 端解压缩 如何压缩 消息层次分为两层:消息集合和消息消息集合:包含若干…

压缩是一种用时间换空间的做法,通过CPU时间去换磁盘空间和网络传输I/O 传输量。

Kafka对消息的整个传递过程中:Producer 端压缩、Broker 端保持、Consumer 端解压缩

如何压缩

  • 消息层次分为两层:消息集合和消息
  • 消息集合:包含若干条日志项,日志项是真正封装消息的地方。

两种版本的消息

  • V1版本中对多条消息进行压缩,然后保存到外层消息的消息体字段中
  • V2版本对整个消息集合进行压缩。这个比V1版本好

在这里插入图片描述

什么时候压缩

生产端进行压缩

Producer 启动后生产的每个消息集合都是经 GZIP 压缩过的,代码如下

Properties props = new Properties();
 props.put("bootstrap.servers", "localhost:9092");
 props.put("acks", "all");
 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 // 开启 GZIP 压缩
 props.put("compression.type", "gzip");
 
 Producer<String, String> producer = new KafkaProducer<>(props);

Broker端进行压缩

大部分情况下,Broker端仅仅是原封不动的保存,不会进行任何修改,有两种情况例外

  • Broker端指定了和Producer不同的压缩算法
    这样的情况下,Broker需要解压缩,然后再重新压缩一遍。默认配置为尊重Producer的压缩算法,若是配置不一样,就可能引发CPU使用率飙升
  • Broker发生了消息格式转换
    主要是为了兼容老版本的消费者程序,这样就牵扯到消息的解压缩和转换的问题了,同时失去了Kafka的零拷贝的特性。

什么时候解压缩

当消息到达 Consumer 端后,由 Consumer 会根据消息集合中封装的压缩算法自行解压缩还原成之前的消息。

Broker端也会进行解压缩,进行消息校验,目前最新的版本上已经规避了这一块的解压缩。

常见压缩算法对比

在这里插入图片描述

  • 即在吞吐量方面:LZ4 > Snappy > zstd 和 GZIP;
  • 压缩比方面,zstd > LZ4 > GZIP > Snappy

最佳实践

  • 运行Producer程序的机器CPU要充足
  • 环境中带宽有限
  • 尽量消息版本统一,不出现解压缩转换消息格式的情况

本文链接: http://www.dtmao.cc/news_show_400058.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?