此貼原創,需要轉載請標明原帖位置,否則將追究
安裝步驟:
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
這個時候直接去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 以及數據 還有表名 那麼後續對數據加工即可