Canal1.1.4獲取資料後直接傳送到kafka的Topic中
文章目錄
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雜湊
- 注意:設定匹配規則,多條匹配規則之間是按照順序進行匹配(命中一條規則就返回)
相關文章
- 將CSV的資料傳送到kafka(java版)KafkaJava
- 刪除Kafka中topicKafka
- 獲取url中?後面傳遞的引數
- Kafka Topic 中明明有可拉取的訊息,為什麼 poll 不到Kafka
- kafka工具kafka-topic.shKafka
- kafka檢視topicKafka
- Flutter 中的資料的獲取Flutter
- filebeat將日誌傳送到kafka不同分割槽的方法Kafka
- Android前後端gson傳輸資料和listview獲取positionAndroid後端View
- 從session中獲取資料Session
- Android中ListView控制元件onItemClick事件中獲取listView傳遞的資料AndroidView控制元件事件
- Spark拉取Kafka的流資料,轉插入HBase中SparkKafka
- Vue+echart 展示後端獲取的資料Vue後端
- 在ActionForm中如何獲取session中的資料?ORMSession
- Mysql增量寫入Hdfs(一) --將Mysql資料寫入Kafka TopicMySqlKafka
- created mounted 動態獲取資料渲染後,獲取DOM問題
- Kafka原理剖析之「Topic建立」Kafka
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- form表單提交,後臺怎麼獲取select的值?後臺直接獲取即可,和input方式一樣。ORM
- [譯]Flask教程–將表單資料傳送到模板Flask
- Mysql在資料插入後立即獲取插入的IdMySql
- 二、傳送請求,獲取響應資料
- Kafka原始碼篇 --- 你一定能get到的Producer的初始化及後設資料獲取流程Kafka原始碼
- 如何在瀏覽器中的網路控制中快速找到傳送到後端的請求瀏覽器後端
- vue3中獲取proxy包裹的資料Vue
- 從 falcon api 中獲取資料API
- 從資料字典中獲取ash資訊
- kafka2.x常用命令筆記(一)建立topic,檢視topic列表、分割槽、副本詳情,刪除topic,測試topic傳送與消費Kafka筆記
- 在RFT中如何獲取JTable中的所有資料?
- iOS 8 3之後如何獲取App內的資料iOSAPP
- javascript獲取物件直接量中的屬性和屬性值JavaScript物件
- 獲取某個資料所在資料列表中的行數 mysqlMySql
- listview 後天獲取選中項的值View
- CentOS6.9安裝Filebeat監控Nginx的訪問日誌傳送到KafkaCentOSNginxKafka
- js獲取url傳遞引數,js獲取url?號後面的引數JS
- Oracle獲取資料庫中的物件建立語句Oracle資料庫物件
- android如何獲取listview中的任意行資料AndroidView
- Android ListView中獲取選中行資料的方法AndroidView