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 Topic 中明明有可拉取的訊息,為什麼 poll 不到Kafka
- 獲取url中?後面傳遞的引數
- kafka檢視topicKafka
- Flutter 中的資料的獲取Flutter
- filebeat將日誌傳送到kafka不同分割槽的方法Kafka
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- Vue+echart 展示後端獲取的資料Vue後端
- 從session中獲取資料Session
- created mounted 動態獲取資料渲染後,獲取DOM問題
- Spark拉取Kafka的流資料,轉插入HBase中SparkKafka
- Mysql增量寫入Hdfs(一) --將Mysql資料寫入Kafka TopicMySqlKafka
- Kafka原理剖析之「Topic建立」Kafka
- Mysql在資料插入後立即獲取插入的IdMySql
- [譯]Flask教程–將表單資料傳送到模板Flask
- 從 falcon api 中獲取資料API
- java獲取前端頁面傳送的cookie中的資訊Java前端Cookie
- Kafka原始碼篇 --- 你一定能get到的Producer的初始化及後設資料獲取流程Kafka原始碼
- 爬取LeetCode題目——如何傳送GraphQL Query獲取資料LeetCode
- kafka2.x常用命令筆記(一)建立topic,檢視topic列表、分割槽、副本詳情,刪除topic,測試topic傳送與消費Kafka筆記
- vue3中獲取proxy包裹的資料Vue
- 如何在瀏覽器中的網路控制中快速找到傳送到後端的請求瀏覽器後端
- 如何獲取想要的資料?
- js獲取url傳遞引數,js獲取url?號後面的引數JS
- kafka-eagle刪除topic需要tokenKafka
- jquery和bootstrap獲取checkbox選中的多行資料jQueryboot
- Oracle獲取資料庫中的物件建立語句Oracle資料庫物件
- 使用 Win32 API 將原始資料傳送到印表機Win32API
- DevExpress中獲取GridControl排序之後的ListdevExpress排序
- 登入驗證判斷,獲取後臺資料
- 關於POST傳值太大後端獲取不到後端
- 【譯】如何在React Hooks中獲取資料?ReactHook
- 在小程式後端中轉獲取介面資料,繞過前端呼叫限制後端前端
- 如獲取獲取關聯資料的文件跟模型的關聯資料集呢模型
- SpringMVC的資料獲取問題SpringMVC
- 想獲取JS載入網頁的源網頁的原始碼,不想獲取JS載入後的資料JS網頁原始碼
- 怎樣獲取jstree的節點資料_大資料獲客是怎樣獲取精準客源的JS大資料
- React 中獲取資料的 3 種方法:哪種最好?React