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 配置的值能有效提升写性能

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

相关推荐
猿java15 分钟前
程序员,你使用过灰度发布吗?
java·分布式·后端
iOS开发上架哦15 分钟前
Flutter,让我们把 Navigator与Route详解 再讲一遍
后端
半桔15 分钟前
红黑树剖析
c语言·开发语言·数据结构·c++·后端·算法
疯狂的程序猴17 分钟前
flutter - 图文讲解表单组件基本使用 & 注册实战
后端
星星电灯猴17 分钟前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
后端
Asthenia041218 分钟前
深入剖析 MyBatis-Plus 自动注入封装的实现原理及其创新
后端
佩奇快跑20 分钟前
使用 Redis Stream 解决 Java 与 Python 的长连接请求交互
后端
加瓦点灯28 分钟前
当你的对象结构拒绝修改时,访问者模式是如何破局的?
后端
追逐时光者1 小时前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
后端·.net
橘猫云计算机设计1 小时前
基于ssm的食物营养成分数据分析平台设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
后端·python·信息可视化·数据挖掘·数据分析·django·毕业设计