mac環境canal+mysql+kafka的安裝及使用

yleizzz發表於2019-12-04



為了實現 實時同步資料,在mac環境搭建了canal,mysql,kafka的一套流程

使用canal加mysql加kafka的方式傳遞資料


mysql 資料來源頭

canal模仿slave衝mysql取資料。。是一個管道

kafka 將canal獲取的資料放入kafka 。然後消費(程式獲取kafka的佇列。消費資料)


  1. mysql安裝

    這個就不詳述了。。不要安裝最新版的mysql。本人親測8.0版本和canal不一定能很好的相容

    所以。。安裝了mysql5.7

    安裝命令(這樣安裝 安裝的是8.0版本)

    brew install mysql


   2.java安裝

  不管是canal還是kafka都是需要java環境的。。

   也不能用最新版的java,推薦使用java8也就是jdk8

   最好是從官網oracle下載


安裝方法:

https://blog.csdn.net/oumuv/article/details/84064169


3.canal安裝

在裝calal之前 確保mysql 及 java8 環境安裝好了


下載地址: https://github.com/alibaba/canal/releases

下載 canal.deployer-1.1.4.tar.gz

在家目錄下面新建一個canal目錄.直接解壓就行

官方檔案已經編譯好了,不需再編譯

需要新增賬戶(canal@%及canal@local)

在canal/bin目錄下有幾個指令碼檔案,startup.sh 啟動服務用的,stop.sh 停止服務用的

在canal/logs目錄下放的是日誌檔案。

在canal/conf目錄下放的是配置檔案。

例項配置檔案

canal/conf/example/instance.properties


例項的配置檔案。。決定了 你連線哪個例項的資料庫 可以精確到表


instance.properties中比較重要的引數

#例項

canal.instance.master.address = 127.0.0.1:3306

#db

canal.instance.dbUsername = canal

canal.instance.dbPassword = canal

canal.instance.defaultDatabaseName =test

canal.instance.connectionCharset = UTF-8

#table

# table regex

canal.instance.filter.regex = test.ttt

#mq topic

canal.mq.topic=test12345

上面這樣配置 就代表了。。通過canal連線127.0.0.1中的test庫的ttt表,放到一個叫做test12345的topic裡面

驗證canal是否和mysql連線 只需要在mysql的程式裡面檢視是否有一個複製連線(因為canal就是模仿了一個slave)


還有一個全域性的檔案

表示了需要連線的kafka zookeeper等

canal/conf/canal.properties

列舉canal連線kafka的重要引數

canal.id= 1#如果有多個canal 這個值和叢集中的canal不能衝突

canal.ip=172.17.61.113#canal的ip

canal.port= 11111

canal.zkServers=172.17.61.113:2181#zookeeper的ip:port

canal.serverMode = kafka

canal.destinations = example

#mq

canal.mq.servers = 172.17.61.113:9092#kafka的ip:port


上面有些關於kafka的引數 是 需要kafka安裝好之後才能陪得(因為已經裝好了 所以先列舉出來)


4.kafka安裝

kafka安裝時需要zookeeper的。。

但是一般zookeeper會整合在kafka裡面 所以不需要特別單獨安裝(也可以單獨安裝)

mac環境安裝命令如下

brew install kafka

一直等安裝完成就行


執行kafka是需要依賴於zookeeper的,所以安裝kafka的時候也會包含zookeeper。

kafka的安裝目錄:/usr/local/Cellar/kafka/2.0.0/bin

kafka的配置檔案目錄:/usr/local/Cellar/kafka/2.0.0/bin

kafka服務的配置檔案:/usr/local/etc/kafka/server.properties

zookeeper配置檔案: /usr/local/etc/kafka/zookeeper.properties 


# server.properties中的重要配置 需要修改的引數
  1. listeners=PLAINTEXT://172.17.61.113:9092

  2. advertised.listeners=PLAINTEXT://172.17.61.113:9092


zookeeper 配置檔案我在安裝的時候 沒有做任何修改


然後 通過上面配置canal.properties 就連線上kafka


kafka的基本命令

首先,啟動zookeeper:

zookeeper-server- start /usr/ local /etc/kafka/zookeeper.properties

然後,啟動kafka

kafka- server -start /usr/local/etc/kafka/ server .properties

建立一個“使用單個分割槽”、“只有一個副本”、名為“test”的主題的topic


kafka-topics 
--create 
--zookeeper 
localhost
:2181 
--replication-factor 1 
--partitions 1 
--topic 
test
(建立topic,這個topic。我們在canal中已經有了配置)


檢視建立的topic,執行list topic命令:
kafka-topics --list --zookeeper 172.17.61.113:2181


生產訊息
kafka-console-producer --broker-list 172.17.61.113:9092 --topic test
(訊息資料由canal自動傳送。所以這裡的命令我們只有明白就行)

消費訊息(這個地方就可以最後來檢視mysql+canal+kafka是否已經聯動起來了)
kafka-console-consumer --bootstrap-server 172.17.61.113:9092 --topic test12345 --from-beginning

我在mysql裡面的test庫的ttt表裡加了一條記錄
然後反應在kafka就是如下結果

{"data":[{"id":"13","var":"ded"}],"database":"test","es":1575448571000,"id":8,"isDdl":false,"mysqlType":{"id":"int(11)","var":"varchar(5)"},"old":null,"pkNames":["id"],"sql":"","sqlType":{"id":4,"var":12},"table":"ttt","ts":1575448571758,"type":"INSERT"}



這就表示整個mysql+canal+kafka已經成功了


接下來只要等著程式那邊去消費這個佇列資訊就好了



















來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30127122/viewspace-2666893/,如需轉載,請註明出處,否則將追究法律責任。

相關文章