CentOS7环境Maxwell的安装及使用

目录

Maxwell的安装

下载安装包

解压安装包

配置环境变量

启用MySQL Binlog

创建Maxwell所需数据库和用户

配置Maxwell

Maxwell的使用

启动Kafka集群

Maxwell启停

Maxwell启停脚本

MySQL数据准备

Kafka开启消费者

全量数据同步

增量数据同步

启动Kafka消费者

修改数据

添加数据

删除数据

查询数据


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

Maxwell的安装

因为MySQL安装在node3机器(安装MySQL8),就近原则,所以Maxwell也安装在node3中。

下载安装包

官网下载安装包,下载版本如下:

maxwell-1.29.2.tar.gz

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

解压安装包

[hadoop@node3 installfile]$ tar -zxvf maxwell-1.29.2.tar.gz -C ~/soft

配置环境变量

[hadoop@node3 installfile]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容

#MAXWELL_HOME
export MAXWELL_HOME=/home/hadoop/soft/maxwell-1.29.2
export PATH=$PATH:$MAXWELL_HOME/bin

让环境变量生效

source /etc/profile

启用MySQL Binlog

MySQL的Binlog默认是未开启的,如需捕获更新操作,需要先进行开启Binlog。

修改MySQL配置文件/etc/my.cnf

[hadoop@node3 installfile]$ sudo vim /etc/my.cnf

增加如下配置

server-id = 1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=gmall
binlog-do-db=test

配置项解释:

#数据库id
server-id = 1
#启动binlog,该参数的值会作为binlog的文件名
log-bin=mysql-bin
#binlog类型,maxwell要求为row类型
binlog_format=row
#启用binlog的数据库,需根据实际情况作出修改,如果需要开启多个数据库,直接再添加新的binlog-do-db设置行
binlog-do-db=gmall

MySQL Binlog类型:

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

      优点:节省空间

      缺点:有可能造成数据不一致,例如insert语句中包含now()函数。

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

      优点:保持数据的绝对一致性。

      缺点:占用较大空间。

  • mixed:混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based。

Maxwell要求Binlog采用Row-based类型。

重启MySQL服务

[hadoop@node3 installfile]$ sudo systemctl restart mysqld

创建Maxwell所需数据库和用户

Maxwell需要在MySQL中存储其运行过程中的所需的一些数据,包括Binlog同步的断点位置(Maxwell支持断点续传)等等,故需要在MySQL为Maxwell创建数据库及用户。

1)创建数据库

[hadoop@node3 installfile]$ mysql -uroot -p000000
...
省略若干输出
...
msyql> CREATE DATABASE maxwell;

2)创建Maxwell用户并赋予其必要权限

mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY 'maxwell';
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%';
mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';

配置Maxwell

1)基于模板配置文件复制得到Maxwell配置文件

[hadoop@node3 installfile]$ cd ~/soft/maxwell-1.29.2
​
[hadoop@node3 maxwell-1.29.2]$ ls
bin        config.properties.example                    lib      log4j2.xml     README.md
config.md  kinesis-producer-library.properties.example  LICENSE  quickstart.md
​
[hadoop@node3 maxwell-1.29.2]$ cp config.properties.example config.properties

2)修改Maxwell配置文件

[hadoop@node3 maxwell-1.29.2]$ vim config.properties

配置如下

#Maxwell数据发送目的地,可选配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis
producer=kafka
# 目标Kafka集群地址
kafka.bootstrap.servers=node2:9092,node3:9092,node4:9092
#目标Kafka topic,可静态配置,例如:maxwell,也可动态配置,例如:%{database}_%{table}
kafka_topic=topic_db# MySQL相关配置
host=node3
user=maxwell
password=maxwell
jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true# 过滤gmall中的z_log表数据,该表是日志数据的备份,无须采集
filter=exclude:gmall.z_log
# 指定数据按照主键分组进入Kafka不同分区,避免数据倾斜
producer_partition_by=primary_key

Maxwell的使用

启动Kafka集群

若Maxwell发送数据的目的地为Kafka集群,则需要先确保Kafka集群为启动状态。

开启Kafka集群 (Kafka集群安装)所有机器(node2、node3、node4),然后在任意一台机器执行如下命令:

[hadoop@node2 ~]$zk.sh start
[hadoop@node2 ~]$kf.sh start

Maxwell启停

1)启动Maxwell

maxwell --config $MAXWELL_HOME/config.properties --daemon

操作

[hadoop@node3 maxwell-1.29.2]$ maxwell --config $MAXWELL_HOME/config.properties --daemon
Redirecting STDOUT to /home/hadoop/soft/maxwell-1.29.2/bin/../logs/MaxwellDaemon.out
Using kafka version: 1.0.0
[hadoop@node3 maxwell-1.29.2]$ jps
1785 Maxwell
1839 Jps
[hadoop@node3 maxwell-1.29.2]$

2)停止Maxwell

ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9

操作

[hadoop@node3 maxwell-1.29.2]$ ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
[hadoop@node3 maxwell-1.29.2]$ jps
1891 Jps
[hadoop@node3 maxwell-1.29.2]$ 

Maxwell启停脚本

创建并编辑Maxwell启停脚本

[hadoop@node3 maxwell-1.29.2]$ cd ~/bin
[hadoop@node3 bin]$ vim mxw.sh

脚本内容如下

#!/bin/bashMAXWELL_HOME=/home/hadoop/soft/maxwell-1.29.2status_maxwell(){result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`return $result
}start_maxwell(){status_maxwellif [[ $? -lt 1 ]]; thenecho "启动Maxwell"$MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemonelseecho "Maxwell正在运行"fi
}stop_maxwell(){status_maxwellif [[ $? -gt 0 ]]; thenecho "停止Maxwell"ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9elseecho "Maxwell未在运行"fi
}case $1 instart )start_maxwell;;stop )stop_maxwell;;restart )stop_maxwellstart_maxwell;;
esac

注意:MAXWELL_HOME需要根据实际情况修改。

赋予权限

[hadoop@node3 bin]$ chmod 777 mxw.sh

启动Maxwell

[hadoop@node3 bin]$ mxw.sh start

查看进程

[hadoop@node3 bin]$ jps
1988 Jps
1942 Maxwell

停止Maxwell

[hadoop@node3 bin]$ mxw.sh stop

查看进程

[hadoop@node3 bin]$ jps
2015 Jps

MySQL数据准备

进入mysql命令行,执行如下命令

create database test;
use test;
create table stu (id int, name varchar(100), age int);
insert into stu values(1,"张三",18);
insert into stu values(1,"李四",20);

Kafka开启消费者

在node2、node3、node4集群任意一台执行如下消费者命令,这里在node2执行

kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topic_db

全量数据同步

Maxwell提供了bootstrap功能来进行历史数据的全量同步,命令如下:

[hadoop@node3 bin]$ mxw.sh start
​
[hadoop@node3 bin]$ maxwell-bootstrap --database test --table stu --config $MAXWELL_HOME/config.properties

kafka消费者输出如下

{"database":"test","table":"stu","type":"bootstrap-start","ts":1719415852,"data":{}}
{"database":"test","table":"stu","type":"bootstrap-insert","ts":1719415852,"data":{"id":1,"name":"张三","age":18}}
{"database":"test","table":"stu","type":"bootstrap-insert","ts":1719415852,"data":{"id":1,"name":"李四","age":20}}
{"database":"test","table":"stu","type":"bootstrap-complete","ts":1719415852,"data":{}}

格式化后如下:

{"database": "test","table": "stu","type": "bootstrap-start","ts": 1719415852,"data": {}
} {"database": "test","table": "stu","type": "bootstrap-insert","ts": 1719415852,"data": {"id": 1,"name": "张三","age": 18}
} {"database": "test","table": "stu","type": "bootstrap-insert","ts": 1719415852,"data": {"id": 1,"name": "李四","age": 20}
} {"database": "test","table": "stu","type": "bootstrap-complete","ts": 1719415852,"data": {}
}

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

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

增量数据同步

启动Kafka消费者
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topic_db

修改数据

将李四的id改为2

update stu set id=2 where name="李四";

kafka消费者输出

{"database":"test","table":"stu","type":"update","ts":1719416255,"xid":2595,"commit":true,"data":{"id":2,"name":"李四","age":20},"old":{"id":1}}

格式化输出

{"database": "test","table": "stu","type": "update","ts": 1719416255,"xid": 2595,"commit": true,"data": {"id": 2,"name": "李四","age": 20},"old": {"id": 1}
}

添加数据

例如:添加一条王五的数据

insert into stu values(3,"王五",23);

kafka消费者输出

{"database":"test","table":"stu","type":"insert","ts":1719416370,"xid":2853,"commit":true,"data":{"id":3,"name":"王五","age":23}}

格式化输出

{"database": "test","table": "stu","type": "insert","ts": 1719416370,"xid": 2853,"commit": true,"data": {"id": 3,"name": "王五","age": 23}
}

删除数据
delete from stu where id=3;

kafka消费者输出

{"database":"test","table":"stu","type":"delete","ts":1719416588,"xid":3339,"commit":true,"data":{"id":3,"name":"王五","age":23}}

格式化输出

{"database": "test","table": "stu","type": "delete","ts": 1719416588,"xid": 3339,"commit": true,"data": {"id": 3,"name": "王五","age": 23}
}

查询数据
select * from stu;

kafka消费者无新增的输出

可以看到,Maxwell可以监听到MySQL开启Binlog数据库的增、删、改操作。

完成!enjoy it!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树链剖分及其应用

基本概念: 1.重儿子:假设节点u有n个子结点,其中以v子节点的为根子树的大小最大,那么v就是u的重儿子 2.轻儿子:除了重儿子以外的全部儿子都是轻儿子 3.轻边:结点u与轻儿子连接的边 4.重边:结点u与重儿子…

如何制作自己的网站

制作自己的网站可以帮助个人或组织在互联网上展示自己的品牌、作品、产品或服务。随着技术的发展,现在制作网站变得越来越简单。下面是一个简单的步骤指南,帮助你制作自己的网站。 1. 确定你的网站需求和目标 在开始之前,你需要明确你的网站的…

CSS Grid网格布局

一、前言 二、Grid布局 1、基本介绍 2、核心概念 (1)网格容器 (2)网格元素 (3)网格列 (4)网格行 (5)网格间距 (6)网格线 三…

基于PHP的酒店管理系统(改进版)

有需要请加文章底部Q哦 可远程调试 基于PHP的酒店管理系统(改进版) 一 介绍 此酒店管理系统(改进版)基于原生PHP开发,数据库mysql,前端jquery插件美化。系统角色分为用户和管理员。系统在原有基础上增加了注册登录注销功能,增加预订房间图片…

Spring Boot中如何集成GraphQL

Spring Boot中如何集成GraphQL 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中集成GraphQL,这是一种强大的查…

Claude走向开放

Claude的愿景一直是创建能够与人们协同工作并显著提升他们工作流程的人工智能系统。朝着这一方向迈进,Claude.ai的专业版和团队版用户现在可以将他们的聊天组织到项目中,将精选的知识和聊天活动整合到一个地方,并且可以让团队成员查看他们与C…

DLMS/COSEM协议—(Green-Book)Wi-SUN profile

10.9 Wi-SUN profile(Wireless Smart Utility Network) 10.9.1 概述 (General) Wi-SUN FAN(Field Area Network,现场区域网络)旨在构建一个无处不在的网络,但它并没有指定特定的应用来在其上运行&#xf…

什么是期货基金?

期货基金,是指广大投资者将资金集中起来,委托给专业的期货投资机构,并通过商品交易顾问进行期货投资交易,投资者承担投资风险并享有投资利润的一种集合投资方式。期货基金的投资对象主要有两大类商品:期货与金融期货。…

django学习入门系列之第三点《案例 商品推荐部分》

文章目录 划分区域搭建骨架完整代码小结往期回顾 划分区域 搭建骨架 /*商品图片&#xff0c;父级设置*/ .slider .sd-img{display: block;width: 1226px;height: 460px; }<!-- 商品推荐部分 --> <!--搭建出一个骨架--> <div class"slider"><di…

提高开发效率之——工具介绍

一 . SerialDebug 串口调试工具 SerialDebug 是一个串口调试工具&#xff0c;它主要用于帮助电子工程师和软件开发者进行串口通信的调试工作。以下是 SerialDebug 工具的一些主要作用和特点: 基础串口通信功能&#xff1a;提供打开、关闭、接收、发送数据的基础串口操作。 数…

.NET C# 使用OpenCV实现人脸识别

.NET C# 使用OpenCV实现模型训练、人脸识别 码图~~~ 1 引入依赖 OpenCvSHarp4 - 4.10.0.20240616 OpenCvSHarp4.runtime.win - 4.10.0.20240616 2 人脸数据存储结构 runtime directory | face | {id}_{name} | *.jpg id - 不可重复 name - 人名 *.jpg - 人脸照片3 Demo 3.…

7.javaSE基础_进阶:反射机制(Method,Filed,Constructor,Properties)

文章目录 一.反射1.定义2.功能3.应用4.常用类和API5.Class类5.Class实例方式 二.相关类及API1.Method类1)invoke方法 2.Field类1)给属性赋值 3.Constructor类 三.Proterties1.定义**2.Properties特点&#xff1a;**3.properties配置文件作用4.常用方法5.Java读取Properties文件…

前置章节-熟悉Python、Numpy、SciPy和matplotlib

目录 一、编程环境-使用jupyter notebook 1.下载homebrew包管理工具 2.安装Python环境 3.安装jupyter 4.下载Anaconda使用conda 5.使用conda设置虚拟环境 二、学习Python基础 1.快排的Python实现 (1)列表推导-一种创建列表的简洁方式 (2)列表相加 2.基本数据类型及运…

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…

实战STM32:硬件SPI与模拟SPI读写W25Q64存储芯片

摘要 本文是一篇实战教程&#xff0c;指导读者如何在STM32微控制器上通过硬件SPI和模拟SPI实现对W25Q64存储芯片的读写操作。W25Q64是一款8Mbit的SPI Flash存储器&#xff0c;适用于需要非易失性存储的嵌入式系统。本文将深入讲解硬件连接、SPI配置、读写流程&#xff0c;并提…

使用CDN方式创建Vue3.0应用程序

CDN 的全称是 content delivery network&#xff0c;即内容分发网络。它是构建在现在的互联网基础之上的一层智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发和调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c…

matlab量子纠缠态以及量子门操作下的量子态

前言 今天我们来聊聊题外话&#xff0c;量子纠缠&#xff0c;在目前物理分支中&#xff0c;要说最深&#xff0c;最能改变人类对宇宙影响的莫过于量子力学了&#xff0c;假如我们可以人为的对两个粒子施加纠缠态&#xff0c;那么我们将可以足不出户的完成对外界的操控 简介 …

《TopFormer: Token Pyramid Transformer for Mobile Semantic Segmentation》

期刊&#xff1a;CVPR 年份&#xff1a;2022 代码&#xff1a;https://github.com/hustvl/TopFormer 摘要 尽管视觉Transformer(ViTs)在计算机视觉领域取得了巨大的成功&#xff0c;但沉重的计算成本阻碍了它们在密集预测任务中的应用&#xff0c;如移动设备上的语义分割。…

Superagent:一个开源的AI助手框架与API

在人工智能日益普及的今天,如何将AI助手无缝集成到应用中成为了开发者们关注的焦点。今天,我们要介绍的Superagent正是一个为这一需求量身打造的开源框架与API。它结合了LLM、检索增强生成(RAG)和生成式AI技术,为开发者们提供了一个强大而灵活的解决方案。 一、Superagen…

电阻屏和电容屏

目录 一、电阻屏 1.欧姆定律 2.电阻屏原理 &#xff08;1&#xff09;测量 X 坐标 &#xff08;2&#xff09;测量 Y 坐标 3.电阻屏数据 二、电阻屏 1.原理 2.电容屏数据 &#xff08;1&#xff09;Type A &#xff08;2&#xff09;Type B 3.电容屏的实验数据 一、…