分布式消息服务Kafka版
分布式消息服务Kafka版
- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
- API参考
- SDK参考
-
常见问题
-
实例问题
- 为什么可用区不能选择2个?
- 创建实例时为什么无法查看子网和安全组等信息?
- 如何选择Kafka实例的存储空间?
- Kafka实例的超高IO和高IO如何选择?
- 如何选择Kafka实例存储容量阈值策略?
- Kafka服务端支持版本是多少?
- Kafka实例的ZK地址是什么?
- 创建的Kafka实例是集群模式么?
- Kafka实例是否支持修改访问端口?
- Kafka实例的SSL证书有效期多长?
- 如何将Kafka实例中的数据同步到另一个Kafka实例中?
- Kafka实例的SASL_SSL开关如何修改?
- SASL认证机制如何修改?
- 如何修改安全协议?
- 修改企业项目,是否会导致Kafka重启?
- 100MB/s的带宽怎样开启公网访问?
- Kafka服务和ZK是部署在相同的虚拟机中,还是分开部署?
- Kafka包周期实例支持删除吗?
- Kafka支持哪些加密套件?
- 购买实例时选择的单AZ,怎样可以扩展为多AZ?
- Kafka是否支持跨AZ容灾?已经购买的实例在哪里查看是否为跨AZ?
- Kafka支持磁盘加密吗?
- Kafka实例创建后,能修改VPC和子网吗?
- 有没有Kafka Stream的案例?
- Kafka实例版本可以升级吗?
- 怎样重新绑定公网IP?
- 实例规格变更问题
-
连接问题
- 选择和配置安全组
- Kafka实例是否支持公网访问?
- Kafka实例的连接地址默认有多少个?
- 是否支持跨Region访问?
- Kafka实例是否支持跨VPC访问?
- Kafka实例是否支持不同的子网?
- Kafka是否支持Kerberos认证,如何开启认证?
- Kafka实例是否支持无密码访问?
- 开启公网访问后,在哪查看公网IP地址?
- Kafka支持服务端认证客户端吗?
- 连接开启SASL_SSL的Kafka实例时,ssl truststore文件可以用PEM格式的吗?
- 下载的证书JKS和CRT有什么区别?
- Kafka支持哪个版本的TLS?
- Kafka实例连接数有限制吗?
- 客户端单IP连接的个数为多少?
- Kafka实例的内网连接地址可以修改吗?
- 不同实例中,使用的SSL证书是否一样?
- 为什么不建议使用Sarama客户端收发消息?
- Topic和分区问题
- 消费组问题
- 消息问题
-
Kafka Manager问题
- 登录Kafka Manager的账号是否可以设置为只读账号?
- 登录到Kafka Manager页面,为什么获取不到节点信息?
- Yikes! Insufficient partition balance when creating topic : projectman_project_enterprise_project Try again.
- Kafka Manager能否查询到消息的正文?
- Kafka Manager WebUI的端口能否修改?
- 在Kafka Manager上支持修改Topic的哪些属性?
- Kafka Manager和云监控显示的信息不一致
- Kafka Manager如何修改Topic的分区Leader?
- 实例版本在控制台和Kafka Manager上显示不一致?
- 为什么实例中存在默认名为__trace和__consumer_offsets的Topic?
- 客户端删除消费组后,在Kafka Manager中仍可以看到此消费组?
- 监控告警问题
- Kafka体验版使用说明
-
实例问题
- 故障排除
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
业务过载处理建议
方案概述
Kafka业务过载,一般表现为CPU使用率高、磁盘写满的现象。
- 当CPU使用率过高时,系统的运行速度会降低,并有加速硬件损坏的风险。
- 当磁盘写满时,相应磁盘上的Kafka日志目录会出现offline问题。此时,该磁盘上的分区副本不可读写,降低了分区的可用性和容错能力。同时由于Leader分区迁移到其他节点,会增加其他节点的负载。
CPU使用率高的原因
- 数据操作相关线程数(num.io.threads、num.network.threads、num.replica.fetchers)过多,导致CPU繁忙。
- 分区设置不合理,所有的生产和消费都集中在某个节点上,导致CPU利用率高。
磁盘写满的原因
- 业务数据增长较快,已有的磁盘空间不能满足业务数据需要。
- 节点内磁盘使用率不均衡,生产的消息集中在某个分区,导致分区所在的磁盘写满。
- Topic的数据老化时间设置过大,保存了过多的历史数据,容易导致磁盘写满。
实施步骤
CPU使用率高的处理措施:
- 优化线程参数num.io.threads、num.network.threads和num.replica.fetchers的配置。
- num.io.threads和num.network.threads建议配置为磁盘个数的倍数,但不能超过CPU核数。
- num.replica.fetchers建议配置不超过5。
- 合理设置Topic的分区,分区一般设置为节点个数的倍数。
- 生产消息时,给消息Key加随机后缀,使消息均衡分布到不同分区上。
说明:
在实际业务场景中,为消息Key加随机后缀,会导致消息全局不保序,需根据实际业务判断是否适合给消息Key加随机后缀。
磁盘写满的处理措施:
- 扩容磁盘,使磁盘具备更大的存储空间。
- 迁移分区,将已写满的磁盘中的分区迁移到本节点的其他磁盘中。
- 合理设置Topic的数据老化时间,减少历史数据的容量大小。
- 在CPU资源情况可控的情况下,使用压缩算法对数据进行压缩。
常用的压缩算法包括:ZIP,GZIP,SNAPPY,LZ4等。选择压缩算法时,需考虑数据的压缩率和压缩耗时。通常压缩率越高的算法,压缩耗时也越高。对于性能要求高的系统,可以选择压缩速度快的算法,比如LZ4;对于需要更高压缩比的系统,可以选择压缩率高的算法,比如GZIP。
可以在生产者端配置“compression.type”参数来启用指定类型的压缩算法。
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);