大数据技术之Maxwell基础知识
大数据技术之Maxwell基础知识
文章目录
- 大数据技术之Maxwell基础知识
- 0、写在前面
- 1、Maxwell 概述
- 1.1 Maxwell 定义
- 1.2 Maxwell 工作原理
- 1.2.1 MySQL 主从复制过程
- 1.2.2 Maxwell 的工作原理
- 1.2.3 MySQL 的 binlog
- 1.3 Maxwell与Cannal对比
- 2. Maxwell 使用
- 2.1 Maxwell 安装部署
- 2.1.1 安装地址
- 2.1.2 安装部署
- 2.1.3 MySQL 环境准备
- 2.1.4 初始化 Maxwell 元数据库
- 2.1.5 Maxwell 进程启动
0、写在前面
1.3.0版本开始不支持JDK8,本文是尚硅谷的教学文档,并加以个人学习记录
- Maxwell版本:
Maxwell1.2.9
- Zookeeper版本:
Zookeeper3.4.5
- Kafka版本:
Kafka2.4.1
- MySQL版本:
MySQL5.7
1、Maxwell 概述
1.1 Maxwell 定义
Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取 MySQL 二进制日志 Binlog,并生成JSON
格式的消息,作为生产者发送给 Kafka,Kinesis、 RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序
。
官网地址:http://maxwells-daemon.io/
1.2 Maxwell 工作原理
1.2.1 MySQL 主从复制过程
-
Master 主库将改变记录,写到二进制日志(
binary log
)中 -
Slave 从库向 mysql master 发送
dump 协议
,将 master 主库的binary log events
拷贝到它的中继日志(relay log
); -
Slave 从库读取并重做中继日志中的事件,将改变的数据
同步
到自己的数据库。
1.2.2 Maxwell 的工作原理
Maxwell 的工作原理很简单,就是把自己
伪装成 MySQL 的一个 slave
,然后以 slave的身份假装从 MySQL(master)复制数据。
1.2.3 MySQL 的 binlog
(1)什么是 binlog
MySQL 的二进制日志可以说 MySQL 最重要的日志了,它记录了所有的 DDL 和DML(除了数据查询语句)语句
,以事件
形式记录,还包含语句所执行的消耗的时间
,MySQL 的二进制日志是事务安全型
的。
一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景:
-
其一:MySQL Replication 在 Master 端开启binlog,Master 把它的二进制日志传递给 slaves 来达到 master-slave
数据一致
的目的。 -
其二:自然就是
数据恢复
了,通过使用 mysqlbinlog 工具来使恢复数据。
二进制日志包括两类文件:二进制日志索引文件
(文件名后缀为.index
)用于记录所有的二进制文件,二进制日志文件
(文件名后缀为.00000*
)记录数据库所有的 DDL 和DML(除了数据查询语句)语句事件。
(2)binlog 的开启
-
找到 MySQL 配置文件的位置
-
Linux:
/etc/my.cnf
如果/etc 目录下没有,可以通过
locate my.cnf
查找位置
-
Windows: MySQL安装目录下的
\my.ini
文件-
在 mysql 的配置文件下,修改配置
-
在[mysqld] 区块,设置/添加
log-bin=mysql-bin
-
这个表示binlog 日志的前缀
是 mysql-bin,以后生成的日志文件就是 mysql-bin.000001
的文件后面的数字按顺序
生成,每次 mysql 重启或者到达单个文件大小的阈值时
,新生一个文件,按顺序编号。
(3)binlog 的分类设置
mysql的binlog 格式有三种,分别是 STATEMENT
,MIXED
,ROW
。
在配置文件中可以选择配置 binlog_format=statement|mixed|row
三种格式的区别:
- statement
语句级
,binlog 会记录每次一执行写操作的语句
。
相对 row 模式节省空间
,但是可能产生不一致性
,比如
update test set create_date=now();
如果用 binlog 日志进行恢复,由于执行时间不同可能产生的数据就不同。
优点: 节省空间
缺点: 有可能造成数据不一致。
- row
行级
, binlog 会记录每次操作后每行记录的变化
。
优点:保持数据的
绝对一致性
。因为不管 sql 是什么,引用了什么函数,他只记录执行后的效果。缺点:占用
较大空间
。
- mixed
混合
级别,statement 的升级版,一定程度上解决了 statement 模式因为一些情况而造成的数据不一致问题。
默认还是statement
,在某些情况下,譬如:
当函数中包含 UUID() 时;
包含 AUTO_INCREMENT 字段的表被更新时;
执行 INSERT DELAYED 语句时;
用 UDF 时;
会按照 ROW
的方式进行处理。
优点:节省空间,同时兼顾了一定的一致性。
缺点:还有些极个别情况依旧会造成不一致,另外 statement 和 mixed 对于需要对
三种方式,binlog 监控的情况都不方便。
综合上面对比,Maxwell 适合做监控分析,选择 row格式比较合适
1.3 Maxwell与Cannal对比
对比 | Canal | Maxwell |
---|---|---|
语言 | java | java |
数据格式 | 格式自由 | json |
采集数据模式 | 增量 | 全量/增量 |
数据落地 | 定制 | 支持 kafka 等多种平台 |
HA | 支持 | 支持 |
2. Maxwell 使用
2.1 Maxwell 安装部署
2.1.1 安装地址
(1) Maxwell 官网地址:http://maxwells-daemon.io/
(2) 文档查看地址:http://maxwells-daemon.io/quickstart/
2.1.2 安装部署
(1) 软件基础,读者需要提前安装好 kafka 和 MySQL,此文档不再赘述。
(2) 上传 maxwell-1.29.2.tar.gz 到/opt/software 下
(3) 解压 maxwell-1.29.2.tar.gz 的安装包到/opt/module 下
[whybigdata@node01 software]$ tar -zxvf maxwell-1.29.2.tar.gz - C /opt/module/
2.1.3 MySQL 环境准备
(1)修改 mysql 的配置文件,开启 MySQL
[whybigdata@node01 software]$ sudo vim /etc/my.cnf
在[mysqld]模块下添加以下内容
[mysqld] server_id=1
log-bin=mysql-bin binlog_format=row
#binlog-do-db=test_maxwell并重启 Mysql 服务
[whybigdata@node01 software]$ sudo systemctl restart mysqld登录 mysql 并查看是否修改完成
[whybigdata@node01 ~]$ mysql -uroot -p123456 mysql> show variables like '%binlog%';
查看下列属性
binlog_format | ROW
binlog-do-db=test_maxwell表示只监控test_maxwell这个库,不加这个参数表示监控所有库;
监控多个库(例如:test_maxwell、my_test),不能写成「binlog-do-db=test_maxwell,my_test」,必须写成:
binlog-do-db=test_maxwell
binlog-do-db=my_test
如果想监控上百个库,上述方法过于繁琐,可以直接设置不需要监控的库
binlog-ignore-db=test_maxwell_10000
(2)进入/var/lib/mysql
目录,查看 MySQL 生成的 binlog 文件
[whybigdata@node01 ~]$ cd /var/lib/mysql
[whybigdata@node01 mysql]$ sudo ls -l
总用量 188500
-rw-r-----. 1 mysql mysql 154 11 月 17 16:30 mysql-bin.000001
-rw-r-----. 1 mysql mysql 154 11 月 17 16:30 mysql-bin.index
注:MySQL 生成的 binlog 文件初始大小一定是
154
字节,然后前缀是 log-bin 参数配置的,后缀是默认从.000001,然后依次递增。除了 binlog 文件文件以外,MySQL 还会额外生产一个.index 索引文件用来记录当前使用的 binlog 文件。
2.1.4 初始化 Maxwell 元数据库
(1) 在 MySQL 中建立一个 maxwell 库用于存储 Maxwell 的元数据
[whybigdata@node01 module]$ mysql -uroot -p123456
mysql> CREATE DATABASE maxwell;
(2) 设置 mysql 用户密码安全级别
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
此处,如果出现错误,请尝试以下方式:
install plugin validate_password soname 'validate_password.so';
(3) 分配一个账号可以操作该数据库
123456是指你自己设置的maxwell用户的密码
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456'
(4)分配这个账号可以监控其他数据库的权限
mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
(5)刷新权限
mysql> flush privileges;
mysql库下的user表;
2.1.5 Maxwell 进程启动
Maxwell 进程启动方式有如下两种:
(1) 使用命令行参数启动 Maxwell 进程
[whybigdata@node01 maxwell-1.29.2]$ bin/maxwell --user='maxwell' --password='123456' --host='node01'producer=stdout
-
user 连接 mysql 的用户
-
password 连接 mysql 的用户的密码
-
host mysql 安装的主机名
-
producer 生产者模式(stdout:控制台 kafka:kafka 集群)
启动结果
监控实例:新增数据
(2)修改配置文件,定制化启动 Maxwell 进程
[whybigdata@node01 maxwell-1.29.2]$ cp config.properties.example config.properties
[whybigdata@node01 maxwell-1.29.2]$ vim config.properties
[whybigdata@node01 maxwell-1.29.2]$ bin/maxwell -- config ./config.properties
启动结果
监控update的数据
结束!
相关文章:

大数据技术之Maxwell基础知识
大数据技术之Maxwell基础知识 文章目录大数据技术之Maxwell基础知识0、写在前面1、Maxwell 概述1.1 Maxwell 定义1.2 Maxwell 工作原理1.2.1 MySQL 主从复制过程1.2.2 Maxwell 的工作原理1.2.3 MySQL 的 binlog1.3 Maxwell与Cannal对比2. Maxwell 使用2.1 Maxwell 安装部署2.1.…...

元数据管理实践数据血缘
元数据管理实践&数据血缘 什么是元数据?元数据MetaData狭义的解释是用来描述数据的数据,广义的来看,除了业务逻辑直接读写处理的那些业务数据,所有其它用来维持整个系统运转所需的信息/数据都可以叫作元数据。比如…...

SQL的优化【面试工作】
SQL的优化 最近看到群友在讨论这块的优化,感觉不管工作和面试,都是用上的,记录下吧!(不然又记不住) 优化点: 处理和优化复杂的 SQL 查询可以有以下几个方向: 1.优化查询语句本身 首先,可以优化 SQL 查询语句本身,尽量让其更加简洁、高效。 …...
Kotlin 40. Dependency Injection 依赖注入以及Hilt在Kotlin中的使用,系列3:Hilt 注释介绍及使用案例
一起来学Kotlin:概念:27. Dependency Injection 依赖注入以及Hilt在Kotlin中的使用,系列3:Hilt 注释介绍及使用案例 此系列博客中,我们将主要介绍: Dependency Injection(依赖注入)…...

1000亿数据、30W级qps如何架构?来一个天花板案例
1000亿级存储、30W级qps系统如何架构?来一个天花板案例 说在前面 在尼恩的(50)读者社群中,经常遇到一个 非常、非常高频的一个架构面试题,类似如下: 千万级数据,如何做系统架构?亿…...

人工智能及其应用(蔡自兴)期末复习
人工智能及其应用(蔡自兴)期末复习 相关资料: 人工智能期末复习 人工智能复习题 人工智能模拟卷 人工智能期末练习题 1 ⭐️绪论 人工智能:人工智能就是用人工的方法在机器(计算机)上实现的智能࿰…...

openpnp - configure - 矫正里程碑
文章目录openpnp - configure - 矫正里程碑概述备注ENDopenpnp - configure - 矫正里程碑 概述 进入矫正里程碑了 查找问题 现在第一个问题是X轴的齿隙矫正 根据提示, 将顶部相机移动到主基准点上, 选择容差(就选用默认的0.025), 开始矫正. 正好开机后, 使能了视觉原点归零. …...

JavaScript高级程序设计读书分享之8章——8.2创建对象
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 创建Object的实例 let person new Object(); person.name "Nicholas"; person.age 29; person.job "Software Engineer"; person.sayName function() { console.log(this…...

关于Could not build wheels for opencv-python-headless, which is...报错的解决方案
在通过最新版pip在线安装package:opencv-python-headless的时候,会产生报错信息,主要为 ERROR: Failed building wheel for opencv-python-headless ERROR: Could not build wheels for opencv-python-headless, which is required to insta…...

【K3s】第1篇 K3s入门级介绍及架构详解
1、什么是 K3s? K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。K3s 有以下增强功能: 打包为单个二进制文件。使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作…...
Java学习--反射
1. 反射 1.1 反射的概述: **专业的解释(了解一下):**是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法ÿ…...
应用和迭代(名词解释)
应用和迭代是什么意思 应用: ● 一个完整的前端应用,一般用应用脚手架创建,包含路由,页面,状态等 ● 一个应用对应一个代码仓库 ● 应用的分组(业务中心,数据中台等)只用于逻辑分类&…...

HTMLCollection 和 NodeList 区别
Node 和 Element DOM 是一棵树,所有节点都是 NodeNode 是 Element 的基类Element 是其他 HTML 元素的基类,如 HTMLDivElement HTMLCollection 和 NodeList HTMLCollection 是 Element 的集合NodeList 是 Node 的集合 <body><p id"p1&qu…...

fork()出来一个进程,这个进程的父进程是从哪来的?
基本概念fork() creates a new process by duplicating the calling process. The new process is referred to as the child process. The calling process is referred to as the parent process.fork()是一个系统调用,不是一个函数。详细信息可以,man…...

结构体内存对齐
结构体相信大家已经了解过了,现在我们深入讨论一个问题,计算结构体的大小 也是很热门的一个考点:结构体内存对齐 先看看下面结构体的大小 typedef struct Test {char a;char b;char c; }Test; 很容易看出答案为3,结构体的大小位…...

【C语言进阶】指针进阶
今日所做之事勿候明天,自我所做之事勿候他人。 --歌德 目录 指针进阶(更深层次的理解): 一.字符指针 二.指针数组 三.数组指针 1.数组指针的定义: 2.&数组名和数组名: 3.数组指针的使用: 四.数组参数,指针参数 1.一维数组传参:…...
java:Class的isPrimitive方法使用
java:Class的isPrimitive方法使用 1 前言 java中Class类的isPrimitive方法,用于检查类型是否为基本类型。java虚拟机创建了int、byte、short、long、float、double、boolean、char这8种基础信息,以及void,一共9种。为这9种类型时…...

TCP 握手过程 三次 四次
蛋老师视频 SYN 同步 ACK 确认 FIN 结束 核心机制是确定哪些请求或响应需要丢弃 SYN、ACK、FIN 通过 1/0 设置开启/关闭 开启SYN后,报文中会随机生成 Sequence序号 用于校验 (应用可能发起多个会话,可以区分) 服务器的同步序…...

windows 下 安裝mysql 5.7.41 (64位) 超简单方式
文章目录1. 安装包下载2.安装步骤3. 服务卸载方式4. 配上 my.ini 常用配置1. 安装包下载 注意,截至2023年2月23日,MySQL所有版本不提供ARM芯片架构的Windows版本(8.0.12开始支持Red Hat系统的ARM版本),所以ARM架构的Windows无法安装MySQL&am…...

二叉树——二叉树的最近公共祖先
二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...

生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...