Canal1.1.4獲取資料後直接傳送到kafka的Topic中

star-hash發表於2020-11-10

Canal修改配置檔案

第一個配置檔案

vim /opt/canal/conf/canal.properties

在原有Canal已經啟動執行成功的情況下,
停掉服務,找到這個配置檔案中對應項進行修改,

canal.zkServers = hadoop1:2181,hadoop2:2181,hadoop3:2181

# 可選項: tcp(預設), kafka, RocketMQ
canal.serverMode = kafka

canal.instance.tsdb.url = jdbc:mysql://hadoop1:3306/canal_metadata
canal.instance.tsdb.dbUsername = canal
canal.instance.tsdb.dbPassword = 123456

# canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml
  canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml

canal.mq.servers = hadoop1:9092,hadoop2:9092,hadoop3:9092

第二個配置檔案

vim /opt/canal/conf/example/instance.properties

canal.instance.tsdb.url=jdbc:mysql://hadoop1:3306/canal_tsdb
canal.instance.tsdb.dbUsername=canal
canal.instance.tsdb.dbPassword=123456

instance.properties整體配置檔案:

#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0

# enable gtid use true/false
canal.instance.gtidon=false

# position info
canal.instance.master.address=hadoop1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal
canal.instance.tsdb.url=jdbc:mysql://hadoop1:3306/canal_tsdb
canal.instance.tsdb.dbUsername=canal
canal.instance.tsdb.dbPassword=123456

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
#canal.instance.filter.regex=.*\\..*
canal.instance.filter.regex=exercise.user
# table black regex
canal.instance.filter.black.regex=
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# mq config
canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################

上面配置的資料庫需要存在,並且可以連線成功。

這個配置檔案中的canal.instance.filter.regex= 屬性可以對值進行過濾。

mysql 資料解析關注的表,Perl正規表示式.多個正則之間以逗號(,)分隔,轉義符需要雙斜槓(\\) 
常見例子:
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打頭的表:canal\\.canal.*
4. canal schema下的一張表:canal.test1
5. 多個規則組合使用:canal\\..*,mysql.test1,mysql.test2 (逗號分隔)
注意:此過濾條件只針對row模式的資料有效(ps. mixed/statement因為不解析sql,所以無法準確提取tableName進行過濾)

canal.mq.dynamicTopic 表示式說明:

canal 1.1.3版本之後, 支援配置格式:schema 或 schema.table,多個配置之間使用逗號或分號分隔:

  • 例子1:test.test 指定匹配的單表,傳送到以test_test為名字的topic上
  • 例子2:… 匹配所有表,則每個表都會傳送到各自表名的topic上
  • 例子3:test 指定匹配對應的庫,一個庫的所有表都會傳送到庫名的topic上
  • 例子4:test.* 指定匹配的表示式,針對匹配的表會傳送到各自表名的topic上
  • 例子5:test,test1.test1,指定多個表示式,會將test庫的表都傳送到test的topic上,test1.test1的表傳送到對應的test1_test1 topic上,其餘的表傳送到預設的canal.mq.topic值
    為滿足更大的靈活性,允許對匹配條件的規則指定傳送的topic名字,配置格式:topicName:schema 或 topicName:schema.table:
  • 例子1: test:test.test 指定匹配的單表,傳送到以test為名字的topic上
  • 例子2: test:… 匹配所有表,因為有指定topic,則每個表都會傳送到test的topic下
  • 例子3: test:test 指定匹配對應的庫,一個庫的所有表都會傳送到test的topic下
  • 例子4:testA:test.* 指定匹配的表示式,針對匹配的表會傳送到testA的topic下
  • 例子5:test0:test,test1:test1.test1,指定多個表示式,會將test庫的表都傳送到test0的topic下,test1.test1的表傳送到對應的test1的topic下,其餘的表傳送到預設的canal.mq.topic值

canal.mq.partitionHash 表示式說明
canal 1.1.3版本之後, 支援配置格式:schema.table:pk1^pk2,多個配置之間使用逗號分隔:

  • 例子1:test.test:pk1^pk2 指定匹配的單表,對應的hash欄位為pk1 + pk2
  • 例子2:…:id 正則匹配,指定所有正則匹配的表對應的hash欄位為id
  • 例子3:…:pk 正則匹配,指定所有正則匹配的表對應的hash欄位為表主鍵(自動查詢)
  • 例子4: 匹配規則啥都不寫,則預設發到0這個partition上
  • 例子5:… ,不指定pk資訊的正則匹配,將所有正則匹配的表,對應的hash欄位為表名。按表hash: 一張表的所有資料可以發到同一個分割槽,不同表之間會做雜湊 (會有熱點表分割槽過大問題)
  • 例子6: test.test:id,…* , 針對test的表按照id雜湊,其餘的表按照table雜湊
  • 注意:設定匹配規則,多條匹配規則之間是按照順序進行匹配(命中一條規則就返回)

相關文章