【数仓】Maxwell软件安装及配置,采集mysql数据

2024-03-09 12:36

本文主要是介绍【数仓】Maxwell软件安装及配置,采集mysql数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关文章

  • 【数仓】基本概念、知识普及、核心技术
  • 【数仓】数据分层概念以及相关逻辑
  • 【数仓】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台虚拟机

  • Hadoop131:192.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.inimy.cnf)中设置相应的选项。以下是如何开启 binlog 的步骤:

  1. 找到配置文件:首先,找到 MySQL 的配置文件。在 Windows 上,它通常位于 MySQL 安装目录下的 my.ini 文件中。在 Linux 或其他 Unix-like 系统上,它通常位于 /etc/my.cnf/etc/mysql/my.cnf。如果找不到这些文件,请根据你的安装方式和操作系统查找正确的位置。

  2. 编辑配置文件:使用文本编辑器打开配置文件。在 [mysqld] 部分下添加或修改以下行:

    [mysqld]
    log-bin=mysql-bin  # 开启 binlog 并设置日志文件名前缀为 mysql-bin
    server-id=1        # 设置服务器 ID,确保每个 MySQL 实例的 server-id 是唯一的
    binlog-format=row
    binlog-do-db=user  # 指定需要记录二进制日志的数据库名
    # 如果需要配置多个数据库,可以写多行,类似如下
    # binlog-do-db=database1  
    # binlog-do-db=database2
    

    log-bin 选项用于启用二进制日志并设置日志文件的名称前缀。server-id 是必需的,用于在复制环境中标识每个 MySQL 服务器实例。

  3. 重启 MySQL 服务:保存配置文件后,需要重启 MySQL 服务以使更改生效。根据你的操作系统和安装方式,使用相应的命令来重启 MySQL 服务。例如,在 Linux 上,你可能会使用 sudo systemctl restart mysqlsudo service mysql restart。在 Windows 上,你可以通过服务管理器重启 MySQL 服务。

  4. 验证 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.properties

vim config.properties,如下配置:

producer=kafka
#目标 Kafka 集群地址
kafka.bootstrap.servers=hadoop131:9092,hadoop132:9092,hadoop133:9092
#目标 Kafka topic,可静态配置,例如:maxwell,也可动态配置,例如:%{database}_%{table}
kafka_topic=topic_db# mysql login info
host=192.168.56.1
user=maxwell
password=maxwell
jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true#过滤目标数据库中无须采集的表
filter=exclude:gmall.sys_log
#指定数据按照主键分组进入 Kafka 不同分区,避免数据倾斜
producer_partition_by=primary_key

5、启动Maxwell

1)创建Maxwell启动脚本mxw.sh

vi /usr/bin/mxw.sh
# 修改文件权限
chmod 777 /usr/bin/mxw.sh

2)复制如下内容

#!/bin/bashMAXWELL_HOME=/data/maxwell#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fistatus_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 in"start")start_maxwell;;"stop")stop_maxwell;;"restart")stop_maxwellstart_maxwell;;*)echo "Input Args Error...";;
esac

3)执行脚本 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-startbootstrap-complete 分别表示数据快照的开始和结束,而 bootstrap-insert 则表示一个插入操作。ts 字段表示更改事件的时间戳,而 data 字段则包含了更改的具体数据。

参考

  • https://github.com/zendesk/maxwell

这篇关于【数仓】Maxwell软件安装及配置,采集mysql数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790691

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

VMware9.0详细安装

双击VMware-workstation-full-9.0.0-812388.exe文件: 直接点Next; 这里,我选择了Typical(标准安装)。 因为服务器上只要C盘,所以我选择安装在C盘下的vmware文件夹下面,然后点击Next; 这里我把√取消了,每次启动不检查更新。然后Next; 点击Next; 创建快捷方式等,点击Next; 继续Cont

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

IDEA配置Tomcat远程调试

因为不想把本地的Tomcat配置改乱或者多人开发项目想测试,本文主要是记录一下,IDEA使用Tomcat远程调试的配置过程,免得一段时间不去配置到时候忘记(毕竟这次是因为忘了,所以才打算记录的…) 首先在catalina.sh添加以下内容 JAVA_OPTS="-Dcom.sun.management.jmxremote=-Dcom.sun.management.jmxremote.port