Cassandra 批量插入性能探索:从线上问题到优化策略

背景

  • 线上需要将 MySQL 7 亿数据的表迁移到 Cassandra 中,由于数据量很大,所以我们使用 Cassandra 批量插入数据功能插入数据
  • 线上只要开启批量跑数据任务,Cassandra 读/写 p99 延迟飙升,只要停止跑批任务延迟立马下降,如下图所示
  • 根据这个现象我们提出猜想,Cassandra 批量插入数据会造成其它请求堵塞,并且一次批量插入的数据分区数越多,批量插入性能越差,于是我们在开发环境进行压测

压测

实验环境

  • cassandra 单节点
  • cassandra concurrent_writes 64/128

批量插入不同分区数据(100 / 批)

concurrent_writes = 64

  • 500 TPS ,写延迟 p99 达到了 300ms

单条插入

concurrent_writes = 64

  • 1200 TPS ,写延迟 p99 只有 250us

增加写并发配置批量插入不同分区数据(100 / 批)

concurrent_writes = 128

  • 500 TPS ,写延迟 p99 只有 150ms

增加写并发配置批量插入相同分区数据(100 / 批)

concurrent_writes = 128

  • 700 TPS ,写延迟 p99 只有 125ms

压测结论

  • 性能对比: 单条插入 > 批量插入相同分区数据 > 批量插入不同分区数据
  • 批量插入相同分区数据性能比批量插入不同分区数据性能好一些,但是随着 TPS 增加,写入 p99 仍然增加明显
  • 批量插入数据 TPS 超过一定阈值,写入 p99 延迟会指数增长,同时影响查询速度
  • 单条插入数据性能极高,单节点 concurrent_writes = 64、TPS = 1200 ,写入 p99 只有 250 us
  • 适当增加 concurrent_writes 配置的值能有效提升写性能

调大配置 & 批量改为单条插入线上表现

相关推荐
ZHOUZAIHUI25 分钟前
WSL(Ubuntu24.04) 安装PostgreSQL
开发语言·后端·scala
i02081 小时前
SpringBoot 项目配置
java·spring boot·后端
月屯1 小时前
后端go完成文档分享链接功能
开发语言·后端·golang
Franciz小测测2 小时前
Python连接RabbitMQ三大方案全解析
开发语言·后端·ruby
海梨花2 小时前
又是秒杀又是高并发,你的接口真的扛得住吗?
java·后端·jmeter
Livingbody2 小时前
win11上wsl本地安装版本ubuntu25.10
后端
用户8356290780513 小时前
如何在 C# 中自动化生成 PDF 表格
后端·c#
星释3 小时前
Rust 练习册 44:Trait 中的同名函数调用
开发语言·后端·rust
京东零售技术3 小时前
并发丢数据深度剖析:JED的锁机制与事务实战踩坑及解决方案
后端
f***68603 小时前
问题:Flask应用中的用户会话(Session)管理失效
后端·python·flask