canal

Canal+Kafka实现MySql与Redis数据一致性

[亡魂溺海] 提交于 2020-03-02 14:26:40
  在生产环境中,经常会遇到MySql与Redis数据不一致的问题。那么如何能够保证MySql与Redis数据一致性的问题呢?话不多说,咱们直接上解决方案。   如果对Canal还不太了解的可以先去看一下官方文档: https://github.com/alibaba/canal   首先,咱们得先开启MySql的允许基于BinLog文件主从复制。因为Canal的核心原理也是相当于把自己当成MySql的一个从节点,然后去订阅主节点的BinLog日志。    开启BinLog文件配置   1. 配置 MySQL 的 my.ini/my.cnf 开启 允许基于 binlog 文件主从同步 log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复   配置 该文件后,重启 mysql 服务器即可   show variables like 'log_bin';//查询MySql是否开启了log_bin. 没有开启 log_bin 的值是 OFF, 开启之后是 ON   2. 添加cannl 的账号 或者直接使用自己的 root 账号。添加完后 一定要检查 mysql user 权限为 y(SELECT* from `user`

canal 实现Mysql到Elasticsearch实时增量同步

陌路散爱 提交于 2020-03-02 10:35:02
相关文档 https://blog.csdn.net/laoyang360/article/details/88600799 mysql同步ES的方案,基本分两种,根据字段扫描或者通过解析binlog同步。前者的缺点是无法处理逻辑删除、需要频繁的根据某字段做全表扫描。 兼顾性能和ES的兼容性,我们选择了canal。 框架 增量 全量 支持ES版本 github 缺点 canal binlog 扫描 >=5.6 elasticsearch-jdbc jdbc jdbc <=2.3.4 https://github.com/jprante/elasticsearch-jdbc 无法处理物理删除 go-mysql-elasticsearch mysqldump binlog <6.0 https://github.com/siddontang/go-mysql-elasticsearch 没有更新了 Logstash-input-jdbc 按照字段扫描 扫描 都可以 需要根据某个字段一直扫描,比如update_time,必须加索引;无法处理物理删除 ES版本选择 结论:6.8.0 原因:es的更新版本非常快,经常一个月就一个小版本。6.8.0是19年5月21发布的。为了性能和稳定性,选择6.x。 既然选择了canal,我们需要升级ES版本。老的业务可以继续使用老的集群

拆解大数据总线平台DBus的系统架构

浪子不回头ぞ 提交于 2020-02-29 10:54:19
拓展阅读: 如何基于日志,同步实现数据的一致性和实时抽取? 快速部署DBus体验实时数据流计算 Dbus所支持两类数据源的实现原理与架构拆解。 大体来说,Dbus支持两类数据源: RDBMS数据源 日志类数据源 一、RMDBMS类数据源的实现 以mysql为例子. 分为三个部分: 日志抽取模块 增量转换模块 全量拉取模块 1.1 日志抽取模块(Extractor) mysql 日志抽取模块由两部分构成: canal server:负责从mysql中抽取增量日志。 mysql-extractor storm程序:负责将增量日志输出到kafka中,过滤不需要的表数据,保证at least one和高可用。 我们知道,虽然mysql innodb有自己的log,mysql主备同步是通过binlog来实现的。而binlog同步有三种模式:Row 模式,Statement 模式,Mixed模式。因为statement模式有各种限制,通常生产环境都使用row模式进行复制,使得读取全量日志成为可能。 通常我们的mysql布局是采用 2个master主库(vip)+ 1个slave从库 + 1个backup容灾库 的解决方案,由于容灾库通常是用于异地容灾,实时性不高也不便于部署。 为了最小化对源端产生影响,我们读取binlog日志从slave从库读取。 读取binlog的方案比较多

深入浅出 Otter与Canal

倾然丶 夕夏残阳落幕 提交于 2020-02-29 03:44:10
第一、Otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的Mysql/Oralce数据库,一个分布式数据库同步系统; 基本工作原理图如下: 基于Canal开源产品,获取数据库增量日志数据; 典型管理系统架构,manager(WEB 管理) + node(工作节点) manager运行时推送同步配置到node节点; node节点将同步状态反馈到manager上; 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作; 能解决什么? 1.异构库同步 mysql -> mysql/oracle (目前开源版本只支持mysql增量,目标库可以是mysql或者是oracle,取决于canal的功能) 2.单机房同步(数据库之间RTT < 1ms) 数据库版本升级; 数据表迁移; 异步二级索 来源: CSDN 作者: 杨鑫newlfe 链接: https://blog.csdn.net/u012965373/article/details/104563852

使用redis提升消息幂等性能

荒凉一梦 提交于 2020-02-28 08:19:27
使用redis提升消息幂等性能 一、 消息幂等 由于网络可靠性的原因不能保证消息必达,那么必须使用补偿机制重新发送消息。多次发送消息必须保证消费者只会消费一次,那么就需要保证实现接口的幂等性。 二 、架构思路 2.1 幂等实现思路 状态机:利用数据库业务表状态CAS操作保证幂等性 消息去重表:根据业务id生成唯一消息id和数据库唯一约束 唯一业务id:利用上游业务id结合数据库唯一约束 2.2 通用策略 从上述的方法中,通用策略且方便做无侵入操作的是消息去重表方案。 三、 落地方案 自定义注解 + AOP切面方案,步骤: 切面拦截到有@UnqMsg注解的消息监听类的方法 首先查看redis.exist是否存在消息id 存在信息则获取消息返回执行成功 不存在则预写入消息去重表中,不提交事务,待业务方操作数据写入后,统一提交。 应注意几个要点: 如果分库分表必须做好路由配置 消费方如果没有RMDB入库的提交操作怎么保证一致性,可以让业务方自己实现逻辑入库消息去重表 redis和RMDB数据数据同步操作,使用canal组件同步数据到redis中,提升消息去重表查询效率,value = 1,过期时间根据业务需求定,3D、5D、7D。 消息去重表的过期数据处理,可以定时清空。 来源: oschina 链接: https://my.oschina.net/teddyIH/blog

阿里巴巴 MySQL binlog 增量订阅&消费组件-canal

随声附和 提交于 2020-02-26 23:02:19
简介 基于数据库日志解析,提供增量数据订阅&消费 的一个开源组件,官网: https://github.com/alibaba/canal 工作原理 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看) MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log) MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据 canal 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) canal 解析 binary log 对象(原始为 byte 流) canal 应用架构 canal :canal Server + canal Client mysql Instance ↔ canal Instance ↔ canal Client canal server 代表一个 canal运行实例 ,对应一个jvm

canal 常用配置 正则表达匹配表

 ̄綄美尐妖づ 提交于 2020-02-26 18:36:15
canal.instance.filter.regex 监控哪些表的正则配置 如下: mysql 数据解析关注的表,Perl正则表达式. 多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 常见例子: 1. 所有表:.* or .*\\..* 2. canal schema下所有表: canal\\..* 3. canal下的以canal打头的表:canal\\.canal.* 4. canal schema下的一张表:canal.test1 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔) 注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤) 参考: https://www.cnblogs.com/eason-d/p/9300754.html 来源: oschina 链接: https://my.oschina.net/machell/blog/3174062

mysql与redis一致性解决同步方案

こ雲淡風輕ζ 提交于 2020-02-26 01:40:28
方案1:清理redis缓存,重新查询数据库(不推荐); 方案2:采用mq订阅mysql的binlog日志文件,增量同步到redis中(整个过程采用的是最终一致性方案,不会是强一致性) 方案3:使用alibaba的canal框架(和方案2基本相同) 地址:https://github.com/alibaba/canal 来源: oschina 链接: https://my.oschina.net/liuyuantao/blog/3159974

万字分享,我是如何一步一步监控公司MySQL的?

岁酱吖の 提交于 2020-02-20 13:23:23
整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 3万字总结,Mysql优化之精髓 为了不复制粘贴,我被逼着学会了JAVA爬虫 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 Redis 5种数据结构及对应使用场景,全会面试要加分的 写在前边 在家远程办公第三周,快被手机上的消息搞的有些神经质了,生怕错过一条有用的信息,没办法形势如此,公司摇摇欲坠大家也都如履薄冰,毕竟这时候失业有点惨( 穷怕了 )。 但就干活来说还是比较清闲的,和在公司上班相比,清闲下来很多碎片时间,可以随意的做点自己喜欢的事情。而且我发现, 人一但闲下来真的是好可怕 ,潜在的才能会全面爆发,我女朋友这个抖音深度患者,一年不做一回饭的主,一周内接连给我做了两顿黑暗料理,烤馒头版“蛋糕”、浆糊版“凉皮”,然后我就与厕所结下来不解之缘。。。 不过,作为一个程序员,我对黑暗料理是不太感兴趣滴,闲下来还是喜欢学习钻研一些新奇的技术, canal 就成了很好的研究对象,一不小心就监控了公司MySQL的一举一动的 一、canal是个啥? canal 是阿里开发的一款基于数据库增量日志解析,提供增量数据订阅与消费的框架,整个框架纯 JAVA 开发,目前仅支持

Mysql + canal + zookeeper环境搭建

一世执手 提交于 2020-02-14 23:19:29
Mysql + canal + zookeeper环境搭建 一、mysql集群搭建 1. mysql基本环境 操作系统: Linux version 2.6.32-431.el6.x86_64 数据库:MySQL Community Server 5.7.20 主节点IP:10.60.81.157 主节点IP:10.60.81.158 从节点IP:10.60.81.159 2. 安装mysql 2.1.官网下载MySQL mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar 2.2. 三个节点都安装: 2.2.1.三个节点查看是否安装mysql rpm -qa | grep mysql rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64 (有则删除) 2.2.2. 三个节点都安装mysql tar –xvf mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7.20-1.el6.x86_64.rpm rpm -ivh mysql-community-libs-5.7.20-1.el6.x86_64.rpm rpm -ivh mysql-community-client-5.7.20-1.el6.x86_64