canal+kafka+mysql+canal-admin聯合部署+最新版

此貼原創,需要轉載請標明原帖位置,否則將追究

安裝步驟:
1、安裝mysql -(自行安裝)
2、安裝zk+kafka -(自行安裝)
3、安裝canal
4、安裝canal-admin
--------------------------------------------------

一、安裝mysql並開啓主從配置

這裏不再敘說,可以參考這篇帖子:https://www.cnblogs.com/oldAlcazar/p/6835573.html
或者自行百度安裝

主從配置:

#添加這一行就ok  
log-bin=mysql-bin
#選擇row模式
binlog-format=ROW
#配置mysql replaction需要定義,不能和canal的slaveId重複
server_id=1

建立一個專用的同步數據源:

CREATE USER canal IDENTIFIED BY 'canal'; 
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

二、安裝zk+kafka

略…自行百度

三、安裝canal

3.1 下載canal

目前採用的1.1.4最新版本,在 canal1.1.4 中查找 canal 最新deploy 版本
解壓 mkdir /home/canal 並解壓到此目錄 tar -zxvf xxxx.tar.gz

3.2 配置示例數據源

進入config/目錄下,example就是一個示例數據源,這裏一個文件夾就代表一個數據源配置
創建新的數據源並複製示例配置,example可以刪除

新建test數據源
root@md-finereport-1 (12:56:39) conf # mkdir test
複製配置
root@md-finereport-1 (12:57:45) conf # cp example/instance.properties test/
修改配置
root@md-finereport-1 (12:59:03) conf # vim test/instance.properties


#  按需修改成自己的數據庫信息
#################################################
...
canal.instance.master.address=192.168.1.20:3306
# username/password,數據庫的用戶名和密碼
...
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
...
# mq config
canal.mq.topic=test
# 針對庫名或者表名發送動態topic
#canal.mq.dynamicTopic=mytest,.*,mytest.user,mytest\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#庫名.表名: 唯一主鍵,多個表之間用逗號分隔
#canal.mq.partitionHash=mytest.person:id,mytest.role:id
#################################################

3.3返回到conf目錄下操作canal.properties

#因爲要開啓admin管理操作,此次測試是把admin跟canal放在一臺機器上的
#這一行管理配置需要放開
# canal admin config
canal.admin.manager = 127.0.0.1:8089


#這裏是配置數據源管理的  就是前面說到的有哪些目錄就是代表數據源,之前建立的test目錄即爲test數據源名稱,那麼其它數據源類似,多個源配置多個即可
canal.destinations = test,example

# ...
# 可選項: tcp(默認), kafka, RocketMQ===修改爲kafka
canal.serverMode = kafka
# ...
# kafka/rocketmq 集羣配置: 192.168.1.117:9092,192.168.1.118:9092,192.168.1.119:9092 
canal.mq.servers = 127.0.0.1:6667
canal.mq.retries = 0
# flagMessage模式下可以調大該值, 但不要超過MQ消息體大小上限
canal.mq.batchSize = 16384
canal.mq.maxRequestSize = 1048576
# flatMessage模式下請將該值改大, 建議50-200
canal.mq.lingerMs = 1
canal.mq.bufferMemory = 33554432
# Canal的batch size, 默認50K, 由於kafka最大消息體限制請勿超過1M(900K以下)
canal.mq.canalBatchSize = 50
# Canal get數據的超時時間, 單位: 毫秒, 空爲不限超時
canal.mq.canalGetTimeout = 100
# 是否爲flat json格式對象
canal.mq.flatMessage = false
canal.mq.compressionType = none
canal.mq.acks = all
# kafka消息投遞是否使用事務
canal.mq.transaction = false

mq相關參數說明

參數名 參數說明 默認值
canal.mq.servers kafka爲bootstrap.servers rocketMQ中爲nameserver列表 127.0.0.1:6667
canal.mq.retries 發送失敗重試次數 0
canal.mq.batchSize kafka爲ProducerConfig.BATCH_SIZE_CONFIG#rocketMQ無意義 16384
canal.mq.maxRequestSize kafka爲ProducerConfig.MAX_REQUEST_SIZE_CONFIG #rocketMQ無意義 1048576
canal.mq.lingerMs kafka爲ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建議將該值調大, 如: 200 rocketMQ無意義 1
canal.mq.bufferMemory kafka爲ProducerConfig.BUFFER_MEMORY_CONFIG rocketMQ無意義 33554432
canal.mq.acks kafka爲ProducerConfig.ACKS_CONFIG#rocketMQ無意義 all
canal.mq.kafka.kerberos.enable kafka爲ProducerConfig.ACKS_CONFIG#rocketMQ無意義 false
canal.mq.kafka.kerberos.krb5FilePath kafka kerberos認證#rocketMQ無意義 …/conf/kerberos/krb5.conf
canal.mq.kafka.kerberos.jaasFilePath kafka kerberos認證#rocketMQ無意義 …/conf/kerberos/jaas.conf
canal.mq.producerGroup kafka無意義#rocketMQ爲ProducerGroup名Canal-Producer
canal.mq.accessChannel kafka無意義#rocketMQ爲channel模式,如果爲aliyun則配置爲cloud local
--------- --------- ---------
canal.mq.vhost= rabbitMQ配置
canal.mq.exchange= rabbitMQ配置
canal.mq.username= rabbitMQ配置
canal.mq.password= rabbitMQ配置
canal.mq.aliyunuid= rabbitMQ配置
canal.mq.canalBatchSize 獲取canal數據的批次大小 50
canal.mq.canalGetTimeout 獲取canal數據的超時時間 100
canal.mq.parallelThreadSize mq數據轉換並行處理的併發度 8
canal.mq.flatMessage 是否爲json格式如果設置爲false,對應MQ收到的消息爲protobuf格式需要通過CanalMessageDeserializer進行解碼 false
canal.mq.topic mq裏的topic名
canal.mq.dynamicTopic mq裏的動態topic規則, 1.1.3版本支持
canal.mq.partition 單隊列模式的分區下標, 1
canal.mq.partitionsNum 散列模式的分區數
canal.mq.partitionHash 散列規則定義庫名.表名 : 唯一主鍵,比如mytest.person: id1.1.3版本支持新語法,見下文

四、安裝canal-admin

4.1 下載canal-admin

目前採用的1.1.4最新版本,在 canal1.1.4 中查找 canal 最新admin 版本
解壓 mkdir /home/canal-admin 並解壓到此目錄 tar -zxvf xxxx.tar.gz

4.2 配置相關配置

進入config目錄修改application.yml

server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
#這是admin需要存相關的配置信息
  address: 127.0.0.1:3306
  #單獨的庫拿來保存admin相關的數據源
  database: canal_manager
  #需要賬號密碼,建議是其它獨立的賬戶,不要跟主從同步的原賬號和密碼相同
  username: canal
  password: canal
  driver-class-name: com.mysql.jdbc.Driver
  #這裏注意  只需要配置地址以及數據庫名字即可,參考:jdbc:mysql://172.0.0.1:3306/canal_manager?Unicode=true&characterEncoding=UTF-8&useSSL=false
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

配置完成需要到上述配置的數據庫中初始化此框架對應的表:
初始化SQL腳本里會默認創建canal_manager的數據庫,建議使用root等有超級權限的賬號進行初始化 b. canal_manager.sql默認會在conf目錄下,也可以通過鏈接下載 canal_manager.sql
配置完成直接去啓動:

sh bin/startup.sh並查看日誌:


vi logs/admin.log

2019-08-31 15:43:38.162 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8089 (http)
2019-08-31 15:43:38.180 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8089"]
2019-08-31 15:43:38.191 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2019-08-31 15:43:38.194 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.29
....
2019-08-31 15:43:39.789 [main] INFO  o.s.w.s.m.m.annotation.ExceptionHandlerExceptionResolver - Detected @ExceptionHandler methods in customExceptionHandler
2019-08-31 15:43:39.825 [main] INFO  o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [public/index.html]

此時代表canal-admin已經啓動成功,可以通過 http://127.0.0.1:8089/ 訪問,默認密碼:admin/123456
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WJKT4qWk-1573970119774)(en-resource://database/1447:0)]

這個時候直接去canal工程裏面進行啓動canal
root@md-finereport-1 (13:21:51) canal # sh bin/startup.sh

這個時候看下日誌:tail -f logs/canal/canal.log 以及數據源讀取日誌:tail -f logs/test/test.log
沒有問題即成功 那麼回到控制檯刷新admin主頁即可得到對應的service
會自動給你掃描進來
嘻嘻嘻嘻嘻嘻嘻嘻尋

對應的表監聽操作也會同時啓動起來:
在這裏插入圖片描述

注意canal跟canal-admin是在同一臺機器上,一定要注意,如果不是請修改 canal下的 config/canal.properties當中的第一個canal.admin.manager對應的地址

這個時候我們操作數據庫去修改數據 那麼就可以到kafka看到對應的數據了
在這裏插入圖片描述

對應的返回結果集字符串:

{
  "data": [
    {
      "aarr": "你好-測試"
    }
  ],
  "database": "tests",
  "es": 1573968472000,
  "id": 6,
  "isDdl": false,
  "mysqlType": {
    "aarr": "varchar(255)"
  },
  "old": null,
  "pkNames": null,
  "sql": "",
  "sqlType": {
    "aarr": 12
  },
  "table": "test_canal",
  "ts": 1573968473257,
  "type": "INSERT"
}

涉及到了操作類型 insert 以及數據 還有表名 那麼後續對數據加工即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章