一句話描述:利用MySQL Binlog+Kafka即可實(shí)現(xiàn)
MySQL Binlog
MySQL的二進(jìn)制日志可以說是MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句,以事件形式記錄,還包含語句所執(zhí)行的消耗的時(shí)間,MySQL的二進(jìn)制日志是事務(wù)安全型的。

binlog日志有兩個(gè)最重要的使用場(chǎng)景。
- mysql主從復(fù)制:mysql replication在master端開啟binlog,master把它的二進(jìn)制日志傳遞給slaves來達(dá)到master-slave數(shù)據(jù)一致的目的。
- 數(shù)據(jù)恢復(fù):通過mysqlbinlog工具來恢復(fù)數(shù)據(jù)。

binlog日志包括兩類文件:
- 二進(jìn)制日志索引文件(文件名后綴為.index)用于記錄所有的二進(jìn)制文件。
- 二進(jìn)制日志文件(文件名后綴為.00000*)記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句select)語句事件。
利用MySQL Binlog+Kafka傳遞數(shù)據(jù)變更消息
場(chǎng)景:想要統(tǒng)計(jì)新訂單的實(shí)時(shí)增加情況?想要實(shí)時(shí)跟蹤庫存的變化?想要訂閱業(yè)務(wù)數(shù)據(jù)庫的變更?下游業(yè)務(wù)希望實(shí)時(shí)感知數(shù)據(jù)庫的變更,但頻繁查詢?cè)隽繑?shù)據(jù)又影響業(yè)務(wù)數(shù)據(jù)庫性能。如何又快又好的做好這些事,而又不影響線上數(shù)據(jù)庫的性能?
實(shí)現(xiàn)思路:代碼對(duì)接上游業(yè)務(wù)數(shù)據(jù)庫,實(shí)時(shí)對(duì)Binlog數(shù)據(jù)分析、解析、PB格式序列化和壓縮后,將數(shù)據(jù)庫變更推送到Kafka。下游各應(yīng)用消費(fèi)Kafka的數(shù)據(jù)從而實(shí)時(shí)獲取上游業(yè)務(wù)庫的數(shù)據(jù)變更。

這樣,如果下游系統(tǒng)是使用ES系統(tǒng)的話,就可以再message system注冊(cè)成為consumer,一旦上游數(shù)據(jù)庫產(chǎn)生變更,就可以及時(shí)獲取到kafka發(fā)來的消息,將mysql數(shù)據(jù)庫變更同步到elasticsearch庫里。