網(wǎng)站的建設模式是指什么時候開始百度seo優(yōu)化服務項目
大數(shù)據(jù)技術之Maxwell基礎知識
文章目錄
- 大數(shù)據(jù)技術之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 環(huán)境準備
- 2.1.4 初始化 Maxwell 元數(shù)據(jù)庫
- 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
格式的消息,作為生產者發(fā)送給 Kafka,Kinesis、 RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平臺的應用程序
。
官網(wǎng)地址:http://maxwells-daemon.io/
1.2 Maxwell 工作原理
1.2.1 MySQL 主從復制過程
-
Master 主庫將改變記錄,寫到二進制日志(
binary log
)中 -
Slave 從庫向 mysql master 發(fā)送
dump 協(xié)議
,將 master 主庫的binary log events
拷貝到它的中繼日志(relay log
); -
Slave 從庫讀取并重做中繼日志中的事件,將改變的數(shù)據(jù)
同步
到自己的數(shù)據(jù)庫。
1.2.2 Maxwell 的工作原理
Maxwell 的工作原理很簡單,就是把自己
偽裝成 MySQL 的一個 slave
,然后以 slave的身份假裝從 MySQL(master)復制數(shù)據(jù)。
1.2.3 MySQL 的 binlog
(1)什么是 binlog
MySQL 的二進制日志可以說 MySQL 最重要的日志了,它記錄了所有的 DDL 和DML(除了數(shù)據(jù)查詢語句)語句
,以事件
形式記錄,還包含語句所執(zhí)行的消耗的時間
,MySQL 的二進制日志是事務安全型
的。
一般來說開啟二進制日志大概會有 1%的性能損耗。二進制有兩個最重要的使用場景:
-
其一:MySQL Replication 在 Master 端開啟binlog,Master 把它的二進制日志傳遞給 slaves 來達到 master-slave
數(shù)據(jù)一致
的目的。 -
其二:自然就是
數(shù)據(jù)恢復
了,通過使用 mysqlbinlog 工具來使恢復數(shù)據(jù)。
二進制日志包括兩類文件:二進制日志索引文件
(文件名后綴為.index
)用于記錄所有的二進制文件,二進制日志文件
(文件名后綴為.00000*
)記錄數(shù)據(jù)庫所有的 DDL 和DML(除了數(shù)據(jù)查詢語句)語句事件。
(2)binlog 的開啟
-
找到 MySQL 配置文件的位置
-
Linux:
/etc/my.cnf
如果/etc 目錄下沒有,可以通過
locate my.cnf
查找位置
-
Windows: MySQL安裝目錄下的
\my.ini
文件-
在 mysql 的配置文件下,修改配置
-
在[mysqld] 區(qū)塊,設置/添加
log-bin=mysql-bin
-
這個表示binlog 日志的前綴
是 mysql-bin,以后生成的日志文件就是 mysql-bin.000001
的文件后面的數(shù)字按順序
生成,每次 mysql 重啟或者到達單個文件大小的閾值時
,新生一個文件,按順序編號。
(3)binlog 的分類設置
mysql的binlog 格式有三種,分別是 STATEMENT
,MIXED
,ROW
。
在配置文件中可以選擇配置 binlog_format=statement|mixed|row
三種格式的區(qū)別:
- statement
語句級
,binlog 會記錄每次一執(zhí)行寫操作的語句
。
相對 row 模式節(jié)省空間
,但是可能產生不一致性
,比如
update test set create_date=now();
如果用 binlog 日志進行恢復,由于執(zhí)行時間不同可能產生的數(shù)據(jù)就不同。
優(yōu)點: 節(jié)省空間
缺點: 有可能造成數(shù)據(jù)不一致。
- row
行級
, binlog 會記錄每次操作后每行記錄的變化
。
優(yōu)點:保持數(shù)據(jù)的
絕對一致性
。因為不管 sql 是什么,引用了什么函數(shù),他只記錄執(zhí)行后的效果。缺點:占用
較大空間
。
- mixed
混合
級別,statement 的升級版,一定程度上解決了 statement 模式因為一些情況而造成的數(shù)據(jù)不一致問題。
默認還是statement
,在某些情況下,譬如:
當函數(shù)中包含 UUID() 時;
包含 AUTO_INCREMENT 字段的表被更新時;
執(zhí)行 INSERT DELAYED 語句時;
用 UDF 時;
會按照 ROW
的方式進行處理。
優(yōu)點:節(jié)省空間,同時兼顧了一定的一致性。
缺點:還有些極個別情況依舊會造成不一致,另外 statement 和 mixed 對于需要對
三種方式,binlog 監(jiān)控的情況都不方便。
綜合上面對比,Maxwell 適合做監(jiān)控分析,選擇 row格式比較合適
1.3 Maxwell與Cannal對比
對比 | Canal | Maxwell |
---|---|---|
語言 | java | java |
數(shù)據(jù)格式 | 格式自由 | json |
采集數(shù)據(jù)模式 | 增量 | 全量/增量 |
數(shù)據(jù)落地 | 定制 | 支持 kafka 等多種平臺 |
HA | 支持 | 支持 |
2. Maxwell 使用
2.1 Maxwell 安裝部署
2.1.1 安裝地址
(1) Maxwell 官網(wǎng)地址: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 環(huán)境準備
(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表示只監(jiān)控test_maxwell這個庫,不加這個參數(shù)表示監(jiān)控所有庫;
監(jiān)控多個庫(例如:test_maxwell、my_test),不能寫成「binlog-do-db=test_maxwell,my_test」,必須寫成:
binlog-do-db=test_maxwell
binlog-do-db=my_test
如果想監(jiān)控上百個庫,上述方法過于繁瑣,可以直接設置不需要監(jiān)控的庫
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
字節(jié),然后前綴是 log-bin 參數(shù)配置的,后綴是默認從.000001,然后依次遞增。除了 binlog 文件文件以外,MySQL 還會額外生產一個.index 索引文件用來記錄當前使用的 binlog 文件。
2.1.4 初始化 Maxwell 元數(shù)據(jù)庫
(1) 在 MySQL 中建立一個 maxwell 庫用于存儲 Maxwell 的元數(shù)據(jù)
[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;
此處,如果出現(xiàn)錯誤,請嘗試以下方式:
install plugin validate_password soname 'validate_password.so';
(3) 分配一個賬號可以操作該數(shù)據(jù)庫
123456是指你自己設置的maxwell用戶的密碼
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456'
(4)分配這個賬號可以監(jiān)控其他數(shù)據(jù)庫的權限
mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
(5)刷新權限
mysql> flush privileges;
mysql庫下的user表;
2.1.5 Maxwell 進程啟動
Maxwell 進程啟動方式有如下兩種:
(1) 使用命令行參數(shù)啟動 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 集群)
啟動結果
監(jiān)控實例:新增數(shù)據(jù)
(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
啟動結果
監(jiān)控update的數(shù)據(jù)
結束!