
1. 采集层(Canal)优化
瓶颈分析:
- 解析转换开销:Binlog到JSON的转换消耗大量CPU资源,特别是在高QPS场景下
- 串行处理限制:复杂表结构下的单线程处理瓶颈,早期Canal版本尤其明显
解决方案:
- 高可用架构:部署Canal-Server多节点配合Zookeeper选主机制,避免单点故障
- 并行处理:按库表拆分instance,隔离大表热点,提高整体处理能力
- 协议优化:采用protobuf+snappy压缩组合,可降低60%网络IO开销
- 动态过滤:通过控制台下放
instance.filter.regex配置,减少不必要的数据同步
2. 传输层(Kafka)优化
瓶颈分析:
- 批量延迟:linger.ms等待造成的累积延迟,影响实时性
- 分区倾斜:主键分布不均导致的消费不均,可能造成部分分区积压
解决方案:
- 分区策略:按主键hash保证同key顺序性,确保相关数据有序处理
- 可靠性保障:ACK=all配合min.insync.replicas=2,防止数据丢失
- 分级处理:建立双Topic机制,
tp_order_normal处理低延时需求(<1s),tp_order_large处理大事务异步批处理
- 死信管理:实现消费失败3次进入DLQ的审计补偿机制,保证数据可靠性