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