读书笔记——Kafka核心技术与实战(生产者压缩算法小结)

压缩:Conpression
  • 用时间去换取空间的经典 trade-off 思想,用 CPU 时间换磁盘空间或网络 IO 传输量,用较少的 CPU 开销带来更少的磁盘占用或 IO 传输。
Kafka 的消息层次
  • 消息集合 message set 和 消息 message,一个消息集合包含多个日志项 record item。日志项才是真正封账消息的地方, Kafka 通常会在消息集合层面进行写入操作。
怎么压缩
  • V1(消息数据叫做 message)版本压缩消息:将多条消息数据进行压缩然后保存到外层消息的消息体字段中,V2(消息数据叫做 record) 版本将整个消息集合进行压缩,经过实验发现:后者比前者有更好的压缩效果;
何时压缩
  • 生产者端和 broker 端会发生消息压缩

    • 生产者端:

    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 接收到的 producer 端的消息就都是经过压缩处理的。

    • broker 端:

      • 当 producer 端和 broker 端指定了不同的压缩算法 compression.type 时,会出现 broker 端解压消息/压缩消息。通常会使 broker 端 CPU 飙升。
      • 当 Broker 端发生了消息格式转换:当 producer 端发送不同格式的消息,在 Broker 端需进行消息格式统一,我们会将新版本数据格式转化成旧数据格式。期间会涉及消息在 broker 端的解压和压缩,也会让 Kafka 丧失引以为豪的 Zero Copy 特性。
何时解压缩
  • 在 Consumer 端进行解压缩。
  • Kafka 会将消息所启用的压缩算法封装进消息集合中,以便 Consumer 读取消息集合时获取到压缩算法。
  • Producer 端压缩、Broker 端保持、Consumer 端解压缩。
压缩算法比较
  • Snappy 最差
  • GZIP 较差
  • LZ4 较好
  • Zstd- Zstandard算法拥有最高的压缩比
V1 和 V2 术语差异点:
  • V1(before 0.11.0): message/message set
  • V2(after 0.11.0): record/record batch
  • Kafka 读写消息的最小单位是 batch 也就是 set
多条消息组成消息集合发送,控制发送的条件是?
  • 通过 batch.size 和 linger.ms 设置,linger.ms = 0 就是立即发送。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值