学中文网站,第一次做网站没头绪,WordPress前端发布文章,新开传奇网站发布网单相关文章
【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用#xff08;集群配置#xff09;【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…相关文章
【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用集群配置【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安装及配置【数仓】flume常见配置总结以及示例
一、Maxwell有什么作用
Maxwell是一个读取MySQL binlogs二进制日志的应用程序它的主要作用是将MySQL中的变更数据包括insert、update、delete等操作实时捕获并将这些变更数据以JSON格式发送到Kafka、Kinesis、RabbitMQ等流数据处理平台。通过这种方式Maxwell实现了数据的实时同步和变更捕获为数据仓库提供了实时、准确的数据源。
具体来说Maxwell可以支持SELECT * FROM table的方式进行全量数据初始化同时还支持在主库发生failover后自动恢复binlog位置(GTID)。此外Maxwell还可以对数据进行分区解决数据倾斜问题并支持database、table、column等级别的数据分区。在工作方式上Maxwell伪装为MySQL的Slave接收binlog events然后根据schemas信息拼装可以接受ddl、xid、row等各种event。
总的来说在数仓中Maxwell的作用主要是实时捕获MySQL中的变更数据并将这些数据以流的形式发送到下游处理平台从而实现数据的实时同步和处理。这对于需要实时分析、处理大量数据的场景如实时报表、实时推荐系统等非常有用。
二、环境准备
准备1台虚拟机
Hadoop131192.168.56.131
本例系统版本 CentOS-7.8已安装jdk1.8
关闭防火墙
systemctl stop firewalld三、Maxwell安装配置
1、Maxwell下载安装 这里使用的是1.29.2版本1.30.0以上的版本需要jdk11 # 下载解压
wget --no-check-certificate https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz
tar -xzvf maxwell-1.29.2.tar.gz
mv maxwell-1.29.2/ /data/maxwell/2、开启mysql Binlog模式
在 MySQL 8.0 中要开启二进制日志binlog你需要在 MySQL 的配置文件my.ini 或 my.cnf中设置相应的选项。以下是如何开启 binlog 的步骤 找到配置文件首先找到 MySQL 的配置文件。在 Windows 上它通常位于 MySQL 安装目录下的 my.ini 文件中。在 Linux 或其他 Unix-like 系统上它通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf。如果找不到这些文件请根据你的安装方式和操作系统查找正确的位置。 编辑配置文件使用文本编辑器打开配置文件。在 [mysqld] 部分下添加或修改以下行 [mysqld]
log-binmysql-bin # 开启 binlog 并设置日志文件名前缀为 mysql-bin
server-id1 # 设置服务器 ID确保每个 MySQL 实例的 server-id 是唯一的
binlog-formatrow
binlog-do-dbuser # 指定需要记录二进制日志的数据库名
# 如果需要配置多个数据库可以写多行类似如下
# binlog-do-dbdatabase1
# binlog-do-dbdatabase2log-bin 选项用于启用二进制日志并设置日志文件的名称前缀。server-id 是必需的用于在复制环境中标识每个 MySQL 服务器实例。 重启 MySQL 服务保存配置文件后需要重启 MySQL 服务以使更改生效。根据你的操作系统和安装方式使用相应的命令来重启 MySQL 服务。例如在 Linux 上你可能会使用 sudo systemctl restart mysql 或 sudo service mysql restart。在 Windows 上你可以通过服务管理器重启 MySQL 服务。 验证 binlog 是否已开启重启 MySQL 服务后登录到 MySQL 服务器并运行以下 SQL 查询来验证 binlog 是否已开启 SHOW VARIABLES LIKE log_bin;如果返回的结果是 ON则表示 binlog 已成功开启。
请注意开启 binlog 可能会增加一些磁盘 I/O 开销因为所有更改数据的查询都会被记录到日志文件中。确保你的磁盘有足够的空间来存储这些日志文件并定期监控和管理它们的大小和数量。
3、创建Maxwell所需的数据库和用户
# 创建数据库
CREATE DATABASE maxwell;# 创建 maxwell 用户并赋予其必要权限
CREATE USER maxwell% IDENTIFIED BY maxwell;
GRANT ALL ON maxwell.* to maxwell%;
GRANT SELECT,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO maxwell%4、配置Maxwell属性
重命名根目录/data/maxwell下的 config.properties.example然后修改配置
mv config.properties.example config.propertiesvim config.properties如下配置
producerkafka
#目标 Kafka 集群地址
kafka.bootstrap.servershadoop131:9092,hadoop132:9092,hadoop133:9092
#目标 Kafka topic可静态配置例如:maxwell也可动态配置例如:%{database}_%{table}
kafka_topictopic_db# mysql login info
host192.168.56.1
usermaxwell
passwordmaxwell
jdbc_optionsuseSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue#过滤目标数据库中无须采集的表
filterexclude:gmall.sys_log
#指定数据按照主键分组进入 Kafka 不同分区避免数据倾斜
producer_partition_byprimary_key5、启动Maxwell
1创建Maxwell启动脚本mxw.sh
vi /usr/bin/mxw.sh
# 修改文件权限
chmod 777 /usr/bin/mxw.sh2复制如下内容
#!/bin/bashMAXWELL_HOME/data/maxwell#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fistatus_maxwell(){resultps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -lreturn 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 停止 Maxwellps -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;;*)echo Input Args Error...;;
esac3执行脚本 mxw.sh start 启动 先要启动zookeeper 和 kafka 6、测试
经过上面的步骤已经启动了zookeeper 、 kafka、和maxwell
链接数据库随便修改一个表的数据比如我修改的是user.t_user表。
链接kafka可以看见自动创建了topic topic_db查看同步数据
{database: user,table: t_user,type: update,ts: 1709895217,xid: 3760,commit: true,data: {id: 28,name: 1232,msg: 新用户注册事务提交事件,create_time: 2023-05-20 23:59:59,last_login_time: null,status: 1},old: {name: 123}
}经过上面测试说明使用Maxwell监控mysql binlog 同步数据的操作已经打通
四、Maxwell 全量同步
1、使用 maxwell-boostrap 全量同步数据
/data/maxwell/bin/maxwell-bootstrap --database user --table t_user --config /data/maxwell/config.properties主要参数
--database dbname指定要从中获取初始数据快照的数据库名称。--table tablename指定要从中获取初始数据快照的表名称。这个参数是可选的如果省略则默认会同步整个数据库的所有表。但是请注意根据 Maxwell 的具体版本和配置这个行为可能会有所不同。--config /data/maxwell/config.properties指定 Maxwell 的配置文件路径。这个配置文件包含了连接到 MySQL 数据库所需的所有信息以及其他与 Maxwell 相关的配置。
注意事项
maxwell-bootstrap 命令通常只用于初始化数据同步而不是用于持续的数据同步。一旦初始数据快照被创建并加载到 Maxwell 中Maxwell 就会开始监听 binlogs 并进行实时数据同步。在执行 maxwell-bootstrap 命令之前请确保 MySQL 数据库的 binlog 功能已经开启并且 binlog 格式设置为 ROW 或 MIXED以 ROW 为主。这是因为 Maxwell 需要 binlog 中的行级更改信息来进行数据同步。maxwell-bootstrap 命令的输出通常是一系列包含数据库更改事件的 JSON 消息。这些消息可以被直接发送到 Maxwell 的输出目标如 Kafka或者被写入到一个文件中供后续处理。由于 maxwell-bootstrap 会生成大量的数据因此在执行该命令时要小心谨慎确保目标系统能够处理这些数据负载。最后请注意检查 Maxwell 的官方文档以获取关于 maxwell-bootstrap 命令的最新信息和最佳实践建议。因为随着 Maxwell 版本的更新命令的功能和用法可能会发生变化。
2、查看kafka数据
{database: user,table: t_user,type: bootstrap-insert,ts: 1709735024,data: {id: 27,name: Hello 001,msg: 新用户注册事务提交事件,create_time: 2023-05-20 11:37:44,last_login_time: null,status: 1}
}示例输出
{database: dbname,table: tablename,type: bootstrap-start,ts: 1234567890,data: {}
}
{database: dbname,table: tablename,type: bootstrap-insert,ts: 1234567890,data: {id: 1,name: John Doe}
}
{database: dbname,table: tablename,type: bootstrap-complete,ts: 1234567890,data: {}
}在这个示例中type 字段用于区分不同类型的更改事件。bootstrap-start 和 bootstrap-complete 分别表示数据快照的开始和结束而 bootstrap-insert 则表示一个插入操作。ts 字段表示更改事件的时间戳而 data 字段则包含了更改的具体数据。
参考
https://github.com/zendesk/maxwell