CDC目前只能支持10k ops

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】4.0.12

【问题描述】我们的case:

  1. 9台cdc机器,内存90G,64核,cdc只同步一张表。
  2. 实时任务,一直更新tidb,ops1k~3k,cdc很稳定
  3. daily job,ops大约8 9k,cdc也可以扛住
  4. weekly job,ops大约16k,观察下来,cdc性能不够。这个job负责刷新整张表,都是update操作,单条更新tidb,一般会跑两三天。
    比如下面17:50分的metric,kv client、pull receive、pull out、sort input的速度都是14k/s,但sort output只有10k/s,sink也是10k/s,之后cdc开始频繁崩溃
    17:50
    kv client receive: 14k/s
    puller in: 14k/s
    puller out: 14k/s
    sort in: 14k/s
    sort out: 10.4k/s
    sort memory: 6.5G
    sink: 10k
    03
    puller%20in puller%20out


    sink%20out

18:36
kv client receive: 17k/s
puller in: 17k/s
puller out: 10k/s
sort in: 10k/s
kv%20in-36 puller%20in-36 puller%20out-36

43

我自己也调整了一些参数,但是效果不佳:
defaultMemBufferCapacity:默认10G,改成了50G
sorter-num-workerpool-goroutine:默认16,改成了256
sorter-num-concurrent-worker:默认4,改成了32
sorter-max-memory-consumption:默认8G,改成了50G

请问还有哪些性能瓶颈?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

2 个赞
  1. 下游同步的是什么? TiDB 还是其他系统。
  2. 麻烦看下下游系统负载压力, ticdc 服务器压力
  3. cdc 只同步一张表? 请问这张表大小如何?
1 个赞
  1. 下游是kafka
  2. ticdc服务器压力比较大,CPU使用率基本1200%,内存占用30多G,但是一直在上升
    13 00
  3. 这表有24亿行
    03
1 个赞
  • 有一个 sink rows buffer size 的监控,可以帮助判断是否在 sink 堆积数据
  • 同步到 Kafka 是按照 rowid 分发到多 partition,还是按照表分发呢,分发模式对于写下游的吞吐影响比较大
  • 因为只同步一张表,所以相当于只有一个 cdc 节点在工作
1 个赞
  • 从 unified sorter 的 output 吞吐看,需要判定是不是 unified sorter 下一级的组件出现了阻塞,导致这里output 吞吐没有input 高
  • Processor/Mounter buffer size,Mounter unmarshal duration,Mounter unmarshal duration percentile 这些监控项可以关注一下,对应于 unified sorter 下一级的数据解码模块。
  • 如果 mounter 模块(数据解码模块)性能不足,可以调高 changefeed 中的 mounter.worker-num,提高数据解码的并发

感谢支持。用的是rowid分发。
这是现在的情况,tidb update ops大约15k.
mounter.worker-num增大到了128,现在Mounter unmarshal duration大约是60多毫秒。


sink write duration感觉很慢,接近1s了。
有办法提高kafka的性能吗?调了下面几个参数,没什么效果。
config.Producer.RequiredAcks = sarama.WaitForLocal
//config.Producer.Flush.Messages = 100
//config.Producer.Flush.Bytes = 100 * 1024
config.ChannelBufferSize = 1024 * 1024

puller buffer size也在堆积

  1. 从监控看,Kafka 虽然写延迟高,但不是 QPS 达到瓶颈
  2. puller buffer size 出现堆积,ticdc_puller_output_chan_size 监控项,表明 sorter 模块的 input 吞吐不足,数据在排序前出现堆积。cdc 用的磁盘是 SSD 么。
1 个赞

感谢支持。单机性能总归有瓶颈,我们最后还是设计了一个简单的分布式机制。

9台cdc server,如果只有一张表,实际上任何时候只有一台CDC server在工作,其他的都是在闲着

可以分享下吗?谢谢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。