canal数据同步

本文探讨了从MySQL到Elasticsearch(ES)的数据同步方案,选择了基于Canal解析MySQL binlog的方式,通过消息队列实现数据实时同步。文章详细介绍了Canal的连接方式、与Maxwell的对比,以及实现步骤,包括启用MySQL binlog、部署Canal-server、搭建Kafka集群、测试binlog接收及配置Canal的MQ推送,并讨论了将接收到的消息写入ES的两种方法。
摘要由CSDN通过智能技术生成

数据同步方案

前言

针对后续的产品、订单、供应商等服务的开发和产品设计,基于底层的POI信息的要求和依赖性很强,而POI的数据涉及到行政区划、景点、酒店、社会设施、购物、美食等方面。数据面和量都比较大,而且需要支持多关键字的检索,因此,传统的rds满足不了场景应用需求,因此需要使用es的全文检索来满足检索需求,而POI的数据也需要提供人工的渠道来进行补充,这就涉及到mysql到文档数据库es的数据同步的需求了,需要保障初始化数据和后续的维护数据和检索库的数据保持一致。

数据同步方式

基本上,数据同步的方式分为两种,推送和拉取两种方式:

  • 主动推送: 在人工维护入库的同时,主动调用es的api,推送数据到es,达到数据的一致性.这种方式存在的问题在于人工维护的同时还需要考虑es的记录是新增还是修改,api需要进行重构和封装,另外,由于mysql和es不是同一个库,在事务控制上也无法在一个事务中进行控制,而考虑到分布式部署的情况,还需要考虑一致性的复杂性。
  • 被动拉取:考虑到定时任务的方式,按照频率对数据库表进行抽取入库.这种方式有可能出现的情况是定时任务出错以及频率设置的太过于大,导致数据检索不到或者检索的实时性不高.

鉴于此两种方式的问题,我们根据mysql的特性以及消息队列的广泛应用,建议选型采用模拟数据库主从同步方式抓取binlog日志同步到消息队列,然后采用生产者/消费者线程方式实现数据的实时同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值