十堰網(wǎng)站建設哪家好推廣營銷方案
要介紹maxwell的工作原理,首先需要講一下mysql主從復制的原理
mysql主從復制原理:
如上圖,左邊是master主節(jié)點,右邊是slave從節(jié)點
工作流程:
1.往主節(jié)點mysql的數(shù)據(jù)庫中寫入數(shù)據(jù),產(chǎn)生數(shù)據(jù)變化,主節(jié)點的binlog二進制日志文件監(jiān)控到數(shù)據(jù)變化,就會記錄下數(shù)據(jù)的變更記錄(注意這個過程是數(shù)據(jù)先寫到數(shù)據(jù)庫成功之后,然后才能被binlog日志記錄)
2.slave從節(jié)點中含有一個線程(上圖中未顯示)在時刻監(jiān)控主節(jié)點binlog日志的變化。當該線程監(jiān)控到主節(jié)點的binlog日志發(fā)生了變化,從節(jié)點會開啟兩個線程,一個是I/O線程,一個是SQL線程
3.其中I/O線程會前往主節(jié)點的binlog日志尋找變更的日志記錄,找到之后,會將變更的日志返回到I/O線程。之后I/O線程會將數(shù)據(jù)寫入到從節(jié)點自己的一個臨時的中繼日志Relaylog(relaylog不是binlog)。
4.此時SQL線程發(fā)現(xiàn)relaylog發(fā)生了變化,SQL線程開始工作,relaylog將會對SQL線程replay一下(此處假設binlog中記錄的就是sql語句,當然binlog有很多模式,不是只能放sql語句),把sql語句重播之后,就可以把數(shù)據(jù)寫入從節(jié)點的mysql數(shù)據(jù)中。
5.假設這次讀寫完畢且后續(xù)沒有數(shù)據(jù)變更,I/O線程和SQL線程將會進入睡眠狀態(tài),當從節(jié)點監(jiān)控主節(jié)點binlog日志的線程監(jiān)控到主節(jié)點的binlog發(fā)生了變化,I/O線程和SQL線程就會又開始重新開始工作
如此循環(huán)往復。。。
slave從節(jié)點之所以沒有顯示它自己的binlog日志,是因為還沒有節(jié)點監(jiān)控它,如果此時新增一個節(jié)點監(jiān)控slave的變化,便可以給slave節(jié)點開一個binlog。
maxwell是怎么工作的呢,很簡單,它會把自己偽裝成一個mysql的slave,maxwell的工作原理其實就等于mysql主從復制的原理
當然maxwell內(nèi)部工作和mysql的slave工作有一些細微的差異,感興趣的可以接著往下看
maxwell也會有I/O線程讀取主節(jié)點的binlog,然后寫入一個類似于(但不是)relaylog的東西,然后將讀取的數(shù)據(jù)也進行重播,但重播之后,轉(zhuǎn)化的格式并非Mysql所需要的格式,而是json格式,并且轉(zhuǎn)化成json后也不會往mysql里寫,而是發(fā)送給kafka等。這就是Maxwell的工作原理。