產(chǎn)品正式上線有一段時(shí)間了,用戶量越來越多,對(duì)產(chǎn)品進(jìn)行深入的商業(yè)分析這件事逐漸被提上了日程。此時(shí),就需要搭建一套系統(tǒng)能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的采集,處理和展示。
系統(tǒng)架構(gòu)
做了一些調(diào)研,最后決定用ElasticStack架構(gòu),也就是 Kafka+ELK 的架構(gòu)。架構(gòu)實(shí)現(xiàn)參照文章 ?【 ES 私房菜 】系統(tǒng)運(yùn)維數(shù)據(jù)分析平臺(tái)架構(gòu)
系統(tǒng)主要架構(gòu)如圖所示:

具體實(shí)現(xiàn)為:
1. Maxwell 鏈接數(shù)據(jù)庫(kù),讀取Mysql數(shù)據(jù)庫(kù)中的BinLog文件,并將內(nèi)容轉(zhuǎn)化為json格式發(fā)送給 Kafka。
2. Kafka接收消息并實(shí)現(xiàn)轉(zhuǎn)發(fā)
3. Logstash 從Kafka 讀取轉(zhuǎn)發(fā)的消息,并經(jīng)過一定的數(shù)據(jù)處理后存入Elastcisearch
4. Elasticsearch按照一定的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)
5. Kibana展示Elastcisearch存儲(chǔ)的數(shù)據(jù)
組件搭建
Maxwell
Maxwell?能夠讀取MySQL 數(shù)據(jù)庫(kù)的 binlogs,并將binlog中的更新以JSON的格式轉(zhuǎn)發(fā)給Kafka,Kinesis,RabbitMQ, Google Cloud Pub/Sub 或者Redis 等第三方數(shù)據(jù)存儲(chǔ)或轉(zhuǎn)發(fā)工具。
數(shù)據(jù)庫(kù)配置
在數(shù)據(jù)庫(kù)連接Maxwell之前,需要先對(duì)數(shù)據(jù)庫(kù)做一些配置。
1. 配置MySQL的binlogs 格式為row
$ vi my.cnf
[mysqld]
server-id=1
log-bin=master
binlog_format=row
2. MySQL數(shù)據(jù)庫(kù)新建一個(gè)用戶 maxwell,并為其配置相關(guān)權(quán)限
mysql> GRANT ALL on maxwell.* to 'maxwell'@'%' identified by 'XXXXXX';
mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell'@'%';?
Maxwell docker搭建
1. 調(diào)試maxwell和MySQL的連接,可將producer定義為輸出
docker run -ti --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='XXXXXX' --host='mysql_host' --producer=stdout
若連接正常,則一旦MySQL中的binlog文件有更新,maxwell會(huì)接收文件更新,并打印輸出。
2. Maxwell連接kafka,將mysql消息發(fā)送到kafka
搭建好kafka后(后文會(huì)介紹如何docker搭建kafka),maxwell可以將producer設(shè)置為kafka,此時(shí)maxwell能夠?qū)ySQL中的數(shù)據(jù)更新發(fā)送給kafka。
docker run -ti --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='XXXXXX' --host='mysql_host' --producer=kafka --kafka.bootstrap.servers=kafka_host:9092 --log_level=debug
配置 log_level 的環(huán)境變量值為debug可以查看maxwell運(yùn)行時(shí)更加詳細(xì)的log輸出。不配置次環(huán)境變量時(shí)默認(rèn)為 info。
若一切正常,kafka 的 maxwell 的topic的consumer能夠收到MySQL的binlog數(shù)據(jù)更新,格式為json。
以上為maxwell 的docker搭建和配置。后文會(huì)繼續(xù)介紹 kafka, elk等的docker搭建。