kafka业务侧使用了与服务端版本不一致的客户端,并且开启了数据压缩带来的问题

举报
Bigdata Go! 发表于 2022/11/28 10:38:34 2022/11/28
【摘要】 数据压缩是kafka解决空间问题和超大数据问题关键场景,例如:当kafka的磁盘空间不足时,可以使用数据压缩,来节省磁盘空间的使用。当生产端需要向kafka集群发送大量的超大数据(大于1M的数据)时可以通过开启压缩模式来减少传输过程中带来的网络消耗。压缩模式开启有一定的要求,为什么会这样,先看kafka压缩的原理:Kafka服务端使用的topic最终压缩模式(由compression.typ...

数据压缩是kafka解决空间问题和超大数据问题关键场景,例如:当kafka的磁盘空间不足时,可以使用数据压缩,来节省磁盘空间的使用。当生产端需要向kafka集群发送大量的超大数据(大于1M的数据)时可以通过开启压缩模式来减少传输过程中带来的网络消耗。

压缩模式开启有一定的要求,为什么会这样,先看kafka压缩的原理:

Kafka服务端使用的topic最终压缩模式(由compression.type决定)为producer。

cke_2689.png

这也就意味着,开启压缩后存在kafka中的数据类型其实本质就是一个压缩包。如下图:

cke_7462.png

     图:客户端与kafka服务端版本一致的存储方式

如果客户端与kafka服务端版本不一致会怎样?再看下面的图。

cke_10051.png

                                             图:客户端与kafka服务端版本不一致的存储方式

客户端使用的kafka-client-xxxx.jar版本要与服务端的版本不一致时,在kafka的服务端会出现,对数据的“解压缩,再压缩”的过程。这个流程会非常损耗CPU,并且可能会造成kafka的GC超时从而导致kafka集群性能下降。

排查方式:

  1. 如果节点CPU使用率超过80%,或者有kafka的GC时间超过阈值的告警。或者查看异常的broker节点的监控曲线:

cke_20125.png

如果这个节点的GC时间长时间达到了秒级,说明GC不正常。

  1. 给kafka进程打一个jstack,如果jstack中出现gzip, snappy,lz4,zstd,说明有开启压缩,例如开启了GZIP。

cke_24213.png

cke_26237.png


解决方案:

  1. 建议客户升级客户端,保持和服务端一致
  2. 使用低版本客户端时,禁用压缩
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。