【总结】Maxwell学习笔记

1.Maxwell简介

Maxwell 是一款用Java编写的MySQL变更数据抓取软件,它会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台

官网地址:Maxwell's Daemon

Maxwell输出数据格式:

字段说明:

字段

解释

database

变更数据所属的数据库

table

表更数据所属的表

type

数据变更类型

ts

数据变更发生的时间

xid

事务id

commit

事务提交标志,可用于重新组装事务

data

对于insert类型,表示插入的数据;对于update类型,标识修改之后的数据;对于delete类型,表示删除的数据

old

对于update类型,表示修改之前的数据,只包含变更字段

2.Maxwell原理

Maxwell的工作原理是实时读取MySQL数据库的二进制日志(Binlog),从中获取变更数据,再将变更数据以JSON格式发送至Kafka等流处理平台

2.1 MySQL二进制日志

二进制日志(Binlog)是MySQL服务端非常重要的一种日志,它会保存MySQL数据库的所有数据变更记录。Binlog的主要作用包括主从复制和数据恢复

2.2 MySQL主从复制

MySQL的主从复制,就是用来建立一个和主数据库完全一样的数据库环境,这个数据库称为从数据库

2.2.1 应用场景

  1. 做数据库的热备:主数据库服务器故障后,可切换到从数据库继续工作。
  2. 读写分离:主数据库只负责业务数据的写入操作,而多个从数据库只负责业务数据的查询工作,在读多写少场景下,可以提高数据库工作效率

2.2.2 工作原理

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

MySQL的dump协议是一种用于在客户端和服务器之间传输数据的文件格式。它主要用于备份和恢复数据库,以及在不同版本的MySQL服务器之间迁移数据。dump协议的文件通常以.sql为扩展名,包含了创建表、插入数据等SQL语句

由此可见,maxwell的工作原理就是就是将自己伪装成slave,并遵循MySQL主从复制的协议,从master同步数据

3.Maxwell部署

3.1 安装Maxwell

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

注:Maxwell-1.30.0及以上版本不再支持JDK1.8

下载完成后解压即可,目录结构如下:

3.2 配置MySQL

1.首先需要开启MySQL的binlog服务,sudo vim /etc/my.cnf

增加以下配置:

[mysqld]

#数据库id
server-id = 1
#启动binlog,该参数的值会作为binlog的文件名
log-bin=mysql-bin
#binlog类型,maxwell要求为row类型
binlog_format=row
#启用binlog的数据库,需根据实际情况作出修改
binlog-do-db=gmall

1.有关binlog-do-db,如果需要有多个数据库来启用binlog,则要增加多条语句配置

也可以使用binlog-ignore-db来设置不需监控的数据库

2.有关server-id:server-id是MySQL服务器的一个唯一标识符,它通常在配置文件中设置。这个标识符在复制过程中非常重要,因为它帮助确保数据的一致性和正确性

3.有关binlog模式:MySQL的binlog模式有:

Statement-based:基于语句,Binlog会记录所有写操作的SQL语句,包括insert、update、delete等

  • 优点: 节省空间
  • 缺点: 有可能造成数据不一致,例如insert语句中包含now()函数

Row-based:基于行,Binlog会记录每次写操作后被操作行记录的变化

  • 优点:保持数据的绝对一致性缺点:占用较大空间
  • mixed:混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based

Maxwell要求Binlog采用Row-based模式

2.重启MySQL服务:sudo systemctl restart mysqld

3.3 创建Maxwell所需数据库和用户

1.创建数据库:CREATE DATABASE maxwell

2.调整MySQL数据库密码级别:

set global validate_password_policy=0

set global validate_password_length=4

global validate_password_policy用于指定密码的强度验证等级:

  • LOW(0):只验证密码长度。
  • MEDIUM(1):验证长度、数字、大小写字母、特殊字符。
  • STRONG(2):验证长度、数字、大小写字母、特殊字符以及字典文件。

global validate_password_length用于设置密码的最小长度

3.创建Maxwell用户并赋予其必要权限:

CREATE USER 'maxwell'@'%' IDENTIFIED BY 'maxwell'(创建用户)、

'maxwell'@'%':用户名是maxwell;主机名是'%','%'表示这个用户可以从任何主机连接到数据库服务器

IDENTIFIED BY 'maxwell':密码是maxwell

GRANT ALL ON maxwell.* TO 'maxwell'@'%';:Maxwell用户可以操作maxwell数据库下的所有表

GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';

赋予maxwell用户对于所有数据库下所有表的主从复制权限

权限:SELECT(查询)、REPLICATION CLIENT(复制客户端)和REPLICATION SLAVE(复制从服务器)

ON *.*:指定这些权限适用的数据库和表。星号(*)表示所有数据库和表

TO 'maxwell'@'%':指定要授予权限的用户

3.4 配置Maxwell

首先修改配置文件名称:cp config.properties.example config.properties

然后对该文件进行修改:

#Maxwell数据发送目的地,可选配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis
producer=kafka
#目标Kafka集群地址
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092
#目标Kafka topic,可静态配置,例如:maxwell,也可动态配置,例如:%{database}_%{table}
kafka_topic=topic_db

#MySQL相关配置
host=hadoop102
user=maxwell
password=maxwell
jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai

4.Maxwell使用

以将MySQL数据同步到Kafka为例,首先启动Kafka集群

4.1 maxwell启停

启动:/opt/module/maxwell/bin/maxwell --config /opt/module/maxwell/config.properties --daemon

停止:ps -ef | grep maxwell | grep -v grep | grep maxwell | awk '{print $2}' | xargs kill -9

解析:

  • ps -ef: 这是列出所有正在运行的进程的命令。
  • grep maxwell: 这是搜索包含"maxwell"字符串的进程。
  • grep -v grep: 这是排除包含"grep"字符串的进程,以避免误杀grep命令本身。
  • awk '{print $2}': 这是使用awk命令提取每行输出的第二个字段,即进程ID(PID)。
  • xargs kill -9: 这是将提取到的进程ID作为参数传递给kill命令,并使用-9选项强制终止进程。

启停脚本:

MAXWELL_HOME=/opt/module/maxwell

status_maxwell(){
    result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`
    return $result
}


start_maxwell(){
    status_maxwell
    if [[ $? -lt 1 ]]; then
        echo "启动Maxwell"
        $MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon
    else
        echo "Maxwell正在运行"
    fi
}


stop_maxwell(){
    status_maxwell
    if [[ $? -gt 0 ]]; then
        echo "停止Maxwell"
        ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
    else
        echo "Maxwell未在运行"
    fi
}


case $1 in
    start )
        start_maxwell
    ;;
    stop )
        stop_maxwell
    ;;
    restart )
       stop_maxwell
       start_maxwell
    ;;
esac

4.2 增量数据同步

启动kafka消费者:bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic topic_db

然后在mysql中gmall数据库的activity_info表中插入一条数据:

可以看到Kafka消费者成功捕获到Maxwell发送来的数据:

4.3 历史数据全量同步

Maxwell提供了bootstrap功能来进行历史数据的全量同步

命令格式:/opt/module/maxwell/bin/maxwell-bootstrap --database gmall --table activity_info --config /opt/module/maxwell/config.properties

执行指令后可以看到所有数据均已同步到Kafka消费者:

注意:

1)第一条type为bootstrap-start和最后一条type为bootstrap-complete的数据,是bootstrap开始和结束的标志,不包含数据,中间的type为bootstrap-insert的数据才包含数据

2)一次bootstrap输出的所有记录的ts都相同,为bootstrap开始的时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/411172.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第四三天 | 最后一块石头的重量 II、目标和、一和零

目录 最后一块石头的重量 II目标和一和零 LeetCode 1049. 最后一块石头的重量 II LeetCode 494. 目标和 LeetCode 474.一和零 最后一块石头的重量 II class Solution {// dp[j] 容量为j 的背包,最多可以背最大重量为dp[j]。// dp[j] Math.max(dp[j], dp[j - sto…

索引学习以及索引原理

有时候,建索引并不一定会加快查询效率。但是,有时候,表的数据量是大数据量的话,还是要看下是否能使用索引优化查询效率。 1、建索引的几大原则: 1.1、最左前缀匹配原则非常重要的原则,mysql会一直向右匹配…

猫头虎分享已解决Bug || AttributeError: ‘Sequential‘ object has no attribute ‘session‘

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

大数据开发项目--音乐排行榜

环境:windows10,centos7.9,hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式; 环境搭建具体操作请参考以下文章: CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

猫头虎分享已解决Bug || Error: Maximum update depth exceeded in React

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【Crypto | CTF】BugKu 简单的RSA

天命:这题也不算简单了,要反编译,要灵活一点 首先收到pyc文件,拿去反编译出来,可以用在线反编译,也可以用工具反编译 在线:python反编译 - 在线工具 工具:https://download.csdn.n…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷,桌上有一些物品,包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时,你听说警察即将到来,那么你会先带走哪个东西呢? 一般来讲&#xf…

c++数据结构算法复习基础--1

一、大体复习内容 复习思路; 二、数据结构算法-常见复杂度汇总介绍-性能对比-图表展示 数据结构: 相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构,散列结构、树形结构,图形结构等等。 数据结构说的是组织…

x-cmd pkg | g - 功能和交互更为丰富的 `ls` 替代方案

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 g 是一项用 Go 开发的、功能和交互更为丰富的 ls 替代方案。它拥有 100 多个功能选项,主要是通过各式图标、各种布局选项和 git status 集成来增强视觉效果,并且支持多种输出格式,如…

话题——计算机专业必看的几部电影

1. 计算机专业必看的几部电影 《黑客帝国》(The Matrix):这部电影讲述了一个虚拟现实世界和现实世界之间的概念,对计算机编程和人工智能有着深刻的思考。它涉及在线/离线、递归、循环、矩阵等概念,挑战了观众对现实的…

TextCNN:文本分类卷积神经网络

模型原理 1、前言2、模型结构3、示例3.1、词向量层3.2、卷积层3.3、最大池化层3.4、Fully Connected层 4、总结 1、前言 TextCNN 来源于《Convolutional Neural Networks for Sentence Classification》发表于2014年,是一个经典的模型,Yoon Kim将卷积神…

功能测试用例,需要详细到什么程度?

这些天招了新人,新项目紧张的测试告一段落,我也开始为功能写用例。 一段时间不写了,写起来有点生疏,但是思路还很清楚。写到一半收到新人写完发过来的用例。 我一看就懵了,哥您这用例根本就是直接拷策划案啊&#xf…

如何交叉编译

1、需要安装对应交叉编译工具链用来在宿主机上编译能在arm开发板上运行的代码 树莓派交叉编译工具链下载地址: https://github.com/raspberrypi/tools下载好后用FileZilla将压缩包传到宿主机(不会用自己百度) 解压编译工具链 unzip tools-m…

Sovit3D数字孪生平台 助力智慧海上风电场项目加速

我们常说地球是蓝色星球,那是因为海洋约占地球面积的71%。如今,我国正在向“双碳”目标不断奋斗,海上风电也作为一种潜力清洁能源,迸发出前所未有的活力,海上吹来的风成为未来清洁能源新方向。 2024年海上风电项目加速…

市场复盘总结 20240226

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 昨日主题投资 连板进级率 二进三&#xff…

数据安全治理实践路线(中)

数据安全建设阶段主要对数据安全规划进行落地实施,建成与组织相适应的数据安全治理能力,包括组织架构的建设、制度体系的完善、技术工具的建立和人员能力的培养等。通过数据安全规划,组织对如何从零开始建设数据安全治理体系有了一定认知&…

Kuniverse 回归!重温阿圭罗的代表性瞬间,了解这一体验的创作过程!

Kuniverse 活动不仅仅是一次传统的聚会,它是为我们的用户提升 The Sandbox 体验而设计的一种方式,其中包括两个标志性体验:Kuniverse 和“世界冠军”。 Kuniverse 是一款单人游戏,包含与足球和阿圭罗相关的任务。“世界冠军”则更…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量), 将各个ip地址截取,并统计出现次数,并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

171基于matlab的随机共振微弱信号检测

基于matlab的随机共振微弱信号检测,随机共振描述了过阻尼布朗粒子受周期性信号和随机噪声的共同作用下,在非线性双稳态系统中所发生的跃迁现象. 随机共振可用于弱信号的检测。程序已调通,可直接运行。 171 微弱信号检测 随机共振 非线性系统 (xiaohongsh…

【c语言】字符函数和字符串函数(下)

前言 书接上回 【c语言】字符函数和字符串函数(上) 上一篇讲解的strcpy、strcat、strcmp函数的字符串长度是不受限制的 而本篇strncpy、strncat、strcnmp函数的字符串长度是受限制的 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,…