MySQL ES 数据同步方案

架构图

架构图
数据同步架构图

说明


业务数据

拟支持如下数据源:

  • RDS(关系型数据库);
  • DRDS(分布式关系型数据库);
  • MongoDB;
  • KV存储(Redis、Memercache);
  • MQ(消息队列里)
  • OSS(对象存储)

数据抽取

拟采用如下几种方式:

  • 针对MySQL,用阿里Canal抓取binlog做实时增量;
  • 针对Mongodb,用阿里KafkaShake抓取opLog做实时增量;
  • 针对其他,采用自研工具做全量与增量
    • 支持定时增量与全量
    • 支持开放接口手动增量与全量
  • 自研组件,对db数据的读取应遵循:
    • 串行+分页读DB(禁止多线程读DB),具体为
      • lock,redis get table:currMaxId
      • db数据返回之后,redis set table:currMaxId,unlock
      • 将返回的数据交给线程池处理
      • 进行下一波读取

数据通道

拟采用Kafka做通道中转,支持:

  • 针对ES索引创建Topic
  • ES相关Topic拟采用统一前缀,如 es-sync-索引名
  • kafka消费者拟采用正则表达式来订阅Topic,如es-sync-*
  • Topic分区数一次性设足,如12个,方便未来轻松增加消费者节点

ES适配器

拟采用自研组件,实现:

  • 消费Kafka中ES相关Topic,订阅正则表达式es-sync-*
  • ES中主键必须为业务数据的唯一标识
  • 写入ES前对比Id+updateTime,判断 丢弃、更新、新增;
  • 可灵活扩展节点数

ES存储

应该遵守:

  • 只存储必要字段,包括:
    • 业务唯一标识(Id)
    • 列表显示字段
    • 查询条件字段
    • update_time
  • 只做简单查询,不做复杂嵌套查询
    • 写入ES的数据应该是从DB表中Join之后的结果

猜你喜欢

转载自blog.csdn.net/weixin_43956062/article/details/106903817