Maxwell+RabbitMq实现数据同步

这篇具有很好参考价值的文章主要介绍了Maxwell+RabbitMq实现数据同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Maxwell+RabbitMq实现数据同步

一、概述

Maxwell是由美国Zendesk开源,用Java编写的MySQL等关系型数据库的实时抓取软件,能够实时抓取MySQL二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafaka、RabbitMQ、Redis等系统的应用程序。常用的场景有:ETL、维护缓存、收集表级别的DML指标、增量数据同步到搜索引擎、切库binlog回滚方案等

Maxwell的特点包括:

  1. **实时数据捕获:**Maxwell可以实时的捕获数据库中的更改,包括插入、删除、更新等操作
  2. **支持多种数据库:**它可以与多种关系型数据库系统(如 MySQL、PostgreSQL)集成
  3. **JSON格式输出:**Maxwell通常以JSON格式输出变更的数据,易于处理和解析
  4. 可配置性: 用户可以根据自己的需求配置Maxwell,包括选择要捕获的数据表,输出目标等

Maxwell主要提供了以下功能:

  1. 支持 select * from table 的方式,进行全量数据初始化
  2. 支持在主库发生failover(宕机)后,自动恢复binlog位置
  3. 支持断点续传,Maxwell会记录上一次读取binlog的位点信息,下一次继续从该位点读取数据
  4. 工作方式为:伪装Salve,接收binlog events,然后根据schemas信息拼装,可接收DDL、DML等各种事件

二、背景

由于我们所开发的物流系统A所使用的数据库是MySQL,另一个系统B 使用的数据库是Oracle,但是B系统需要获取A系统的数据去完成一些必要的业务,所以就需要将A系统的数据同步到B数据中,最开始用的是OGG 工具同步的,但是会存在一些性能问题,而且一旦MySQL库发生故障或者触发了主从切换,那么同步相关的数据表都需要进行相关的初始化操作。最开始考虑使用Canal进行同步的,但是Canal不能断点续传,所以最终使用Maxwell框架进行,于是使用下述架构图对系统间的数据同步进行改造:

Maxwell+RabbitMq实现数据同步,rabbitmq,分布式,数据仓库,etl

三、工作原理

Maxwell的操作开销很低,只需要有一个MySQL和一个可写的后续地方即可,当该应用程序伪装为MySQL的从机,读取到MySQL主机的binlog日志后,以JSON格式写入到Kafaka、Rabbit MQ等消息中间件,特点就是简单易用,不需要编写额外的客户端,大大降低了开发成本。

Maxwell+RabbitMq实现数据同步,rabbitmq,分布式,数据仓库,etl

  1. Master主库将改变记录,写到二进制日志(binary log)
  2. Slave从库向MySQL master发送dump协议,将Master主库的binary log events拷贝到它的中继日志(relay log)
  3. Slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库

四、Maxwell的下载与使用

4.1下载Maxwell

Maxwell官网地址: http://maxwells-daemon.io/

Github网址: https://github.com/zendesk/maxwell

本文使用的是Maxwell-1.29.2版本讲述

下载地址: https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz

#使用weget命令下载
cd /usr/local
mkdir software
cd /usr/local/softewre
wget https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz

如果是通过下载地址链接下载的,完成后 通过XFTP工具上传到/usr/local/softewre目录下

Maxwell+RabbitMq实现数据同步,rabbitmq,分布式,数据仓库,etl

4.2 解压

#使用下述命令解压压缩包
tar zxvf maxwell-1.29.2.tar.gz

Maxwell+RabbitMq实现数据同步,rabbitmq,分布式,数据仓库,etl

4.3 配置MySQL的binlog日志

#先使用这个命令查看MySQL是否开启了binlog日志,如果Value列是OFF,代表未开启binlog日志
SHOW VARIABLES LIKE 'log_bin';
#查看MySQL的binlog日志的格式,关注binlog_format
show global variables like "binlog%";

#使用下述命令开启MySQL的 binlog日志
# 每个人安装的MySQL的配置文件目录不一样,根据自己的MySQL安装情况,找到自己的配置文件修改,我的是放在etc目录下的
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin #添加这一行就
binlog-format=ROW #选择row模式
server_id=1 #随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
binlog-do-db=数据库名称 #启用binlog的数据库,需根据实际情况作出修改 默认全部开启
#然后退出,保存

以下是我的MySQL配置文件,可供参考文章来源地址https://www.toymoban.com/news/detail-828404.html

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql/mysql.err
pid-file=/usr/local/mysql/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#skip-grant-tables

#开启binlog日志相关配置
#服务ID
server-id=1
#binlog配置 只要配置了log_bin地址就会开启
log_bin=mysql-bin
#规定binlog的格式,binlog有三种格式statement、row、mixad,默认使用statement,建议使用row格式
binlog_format=ROW
# 启用binlog的数据库,需根据实际情况作出修改 默认全部开启
binlog-do-db=gzmpcli_db

到了这里,关于Maxwell+RabbitMq实现数据同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rabbitmq----分布式场景下的应用

    如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消

    2024年02月08日
    浏览(50)
  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

    分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或

    2024年04月23日
    浏览(48)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(45)
  • 分布式消息队列:Kafka vs RabbitMQ vs ActiveMQ

    在现代分布式系统中,消息队列是一种常见的异步通信模式,它可以帮助系统处理高并发、高可用性以及容错等问题。在这篇文章中,我们将深入探讨三种流行的分布式消息队列:Apache Kafka、RabbitMQ和ActiveMQ。我们将讨论它们的核心概念、算法原理、特点以及使用场景。 随着

    2024年02月02日
    浏览(63)
  • 微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    目录 一、高级篇 二、面试篇 ==============实用篇============== day05-Elasticsearch01 1.初识elasticsearch 1.4.安装es、kibana 1.4.1.部署单点es 1.4.2.部署kibana 1.4.3.安装IK分词器 1.4.4.总结 2.索引库操作 2.1.mapping映射属性 2.2.索引库的CRUD 2.2.1.创建索引库和映射 2.2.2.查询索引库 2.2.3.修改索引库 2.

    2024年02月02日
    浏览(59)
  • RabbitMQ实现数据库与ElasticSearch的数据同步和分享文件过期处理

    RabbitMQ实现数据库与ElasticSearch的数据同步 | Hannya。-CSDN 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步 | 波总说先赚它一个小目标-CSDN SPringBoot集成RabbitMQ实现30秒过期删除功能 | 军大君-CSDN 当进行文件上传、文件创建、文件重命名等操作时: 通过Rabbit

    2024年02月09日
    浏览(51)
  • (黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以让我们极其方便

    2024年03月12日
    浏览(56)
  • 微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一些值,比如:最大值

    2024年03月26日
    浏览(65)
  • 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步

    1、商品上架时:search-service新增商品到elasticsearch 2、商品下架时:search-service删除elasticsearch中的商品 数据同步是希望,当我们商品修改了数据库中的商品信息,索引库中的信息也会跟着改。在微服务中数据库和索引库是在两个不同的服务中。如果,商品的服务,向es的服务中

    2024年02月12日
    浏览(70)
  • 分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于实现全文搜索功能,例如商城中对商品搜索、搜索、分类搜索、订单搜索、客户搜索等。它支持复杂的查询语句、中文分词、近似搜索等功能,可以快速地搜索并返回匹配的结果。 2、日志分析 Elastic search可以用于实现实时日志分析,例

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包