diff --git a/charts/canal-server/Chart.yaml b/charts/canal-server/Chart.yaml index 4c1ab2f..d05852e 100644 --- a/charts/canal-server/Chart.yaml +++ b/charts/canal-server/Chart.yaml @@ -25,7 +25,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 +version: 0.0.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/charts/canal-server/configs/canal.properties b/charts/canal-server/configs/canal.properties index 897bfca..07bf2f6 100644 --- a/charts/canal-server/configs/canal.properties +++ b/charts/canal-server/configs/canal.properties @@ -86,13 +86,17 @@ canal.instance.get.ddl.isolation=false canal.instance.parser.parallel=true ## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors() +{{- if .Values.ServerConf.instanceParserParallelThreadSize }} +canal.instance.parser.parallelThreadSize = {{ .Values.ServerConf.instanceParserParallelThreadSize }} +{{- else }} #canal.instance.parser.parallelThreadSize = 16 +{{- end }} ## disruptor ringbuffer size, must be power of 2 canal.instance.parser.parallelBufferSize=256 # table meta tsdb info -canal.instance.tsdb.enable={{ .Values.TsdbDBConf.enabled }} +canal.instance.tsdb.enable={{ .Values.TsdbDBConf.enabled | default "false" }} canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:} {{- if .Values.TsdbDBConf.enabled }} canal.instance.tsdb.url=jdbc:mysql://{{ .Values.TsdbDBConf.canal_tsdb_mysql_address }}:{{ .Values.TsdbDBConf.canal_tsdb_mysql_port }}/{{ .Values.TsdbDBConf.canal_tsdb_db_name }}?characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC @@ -124,15 +128,21 @@ canal.auto.scan.interval=5 # set this value to 'true' means that when binlog pos not found, skip to latest. # WARN: pls keep 'false' in production env, or if you know what you want. -canal.auto.reset.latest.pos.mode=false -#canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml +canal.auto.reset.latest.pos.mode={{ .Values.ServerConf.autoResetLatestPosMode | default "false" }} +{{- if .Values.TsdbDBConf.enabled }} canal.instance.tsdb.spring.xml=classpath:spring/tsdb/mysql-tsdb.xml +{{- else }} +canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml +{{- end }} canal.instance.global.mode=spring canal.instance.global.lazy=false canal.instance.global.manager.address=${canal.admin.manager} -#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml +{{- if include "zkServers" . }} +canal.instance.global.spring.xml = classpath:spring/default-instance.xml +{{- else }} canal.instance.global.spring.xml=classpath:spring/file-instance.xml -#canal.instance.global.spring.xml = classpath:spring/default-instance.xml +{{- end }} +#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml ################################################## ######### MQ Properties ############# diff --git a/charts/canal-server/configs/instance.properties b/charts/canal-server/configs/instance.properties index 674e3ff..6836be2 100644 --- a/charts/canal-server/configs/instance.properties +++ b/charts/canal-server/configs/instance.properties @@ -9,10 +9,10 @@ canal.instance.mysql.slaveId={{ .item.mysql.slaveId.number }} canal.instance.gtidon={{ .item.gtidon }} # position info canal.instance.master.address={{ .item.master.address }} -canal.instance.master.journal.name= -canal.instance.master.position= -canal.instance.master.timestamp= -canal.instance.master.gtid= +canal.instance.master.journal.name={{ .item.master.journalName }} +canal.instance.master.position={{ .item.master.position }} +canal.instance.master.timestamp={{ .item.master.timestamp }} +canal.instance.master.gtid={{ .item.master.gtid }} # rds oss binlog canal.instance.rds.accesskey= @@ -20,19 +20,28 @@ canal.instance.rds.secretkey= canal.instance.rds.instanceId= # table meta tsdb info -canal.instance.tsdb.enable=true +canal.instance.tsdb.enable={{ $.Values.TsdbDBConf.enabled }} #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb?characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC #canal.instance.tsdb.dbUsername=canal #canal.instance.tsdb.dbPassword=canal -#canal.instance.standby.address = -#canal.instance.standby.journal.name = -#canal.instance.standby.position = -#canal.instance.standby.timestamp = -#canal.instance.standby.gtid= + +## Standby mysql instance +{{- if .item.standby.enabled }} +canal.instance.standby.address = {{ .item.standby.address }} +canal.instance.standby.journal.name={{ .item.standby.journalName }} +canal.instance.standby.position={{ .item.standby.position }} +canal.instance.standby.timestamp={{ .item.standby.timestamp }} +canal.instance.standby.gtid={{ .item.standby.gtid }} +{{- end }} + +{{- if .item.standby.enabled }} +{{ include "canal.instance.enable.detection" . }} +{{- end }} + # username/password -canal.instance.dbUsername={{ .item.dbUsername | quote }} -canal.instance.dbPassword={{ .item.dbPassword | quote }} +canal.instance.dbUsername={{ .item.dbUsername }} +canal.instance.dbPassword={{ .item.dbPassword }} canal.instance.connectionCharset=UTF-8 # enable druid Decrypt database password @@ -40,10 +49,10 @@ canal.instance.enableDruid=false #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ== # table regex -canal.instance.filter.regex={{ .item.filter.regex }} +canal.instance.filter.regex={{ .item.filter.regex | quote }} # table black regex -canal.instance.filter.black.regex={{ .item.filter.black.regex }} +canal.instance.filter.black.regex={{ .item.filter.black.regex | quote }} # 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 diff --git a/charts/canal-server/templates/NOTES.txt b/charts/canal-server/templates/NOTES.txt index 36bf838..1c4c2cd 100644 --- a/charts/canal-server/templates/NOTES.txt +++ b/charts/canal-server/templates/NOTES.txt @@ -1,3 +1,7 @@ +CHART NAME: {{ .Chart.Name }} +CHART VERSION: {{ .Chart.Version }} +APP VERSION: {{ .Chart.AppVersion }} + 1. Get the application URL by running these commands: {{- if .Values.ingress.enabled }} {{- range $host := .Values.ingress.hosts }} @@ -17,6 +21,33 @@ {{- else if contains "ClusterIP" .Values.service.type }} export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "canal-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" + echo "canal-client connect 127.0.0.1:8080 to use your application" kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT {{- end }} + +2. Set instance name to use by canal-client: +{{- range .Values.InstanceConf.canal.instance }} + - Instance name: {{ .name }} + +- Sync master from: {{ .master.address }} + {{- if .standby.enabled }} + +- Sync standby from: {{ .standby.address }} + +- Enabled HA: {{ .standby.enabled }} + {{- end }} + {{- if ne .filter.regex ".*\\..*" }} + +- filter: {{ .filter.regex | quote }} + \- black: {{ .filter.black.regex | quote }} + {{- end }} +{{- end }} + +3. Tsdb information: +{{- if .Values.TsdbDBConf.enabled }} +mysql: {{ .Values.TsdbDBConf.canal_tsdb_mysql_address }}:{{ .Values.TsdbDBConf.canal_tsdb_mysql_port }}/{{ .Values.TsdbDBConf.canal_tsdb_db_name }} +{{- else }} +local h2. +{{- end }} + +{{- if (include "zkServers" .) }} +4. canal-client use example + +CanalConnector connector = CanalConnectors.newClusterConnector("zkServers:2181", "example-instance", "", ""); +{{- end }} \ No newline at end of file diff --git a/charts/canal-server/templates/_helpers.tpl b/charts/canal-server/templates/_helpers.tpl index 3e90998..8649a01 100644 --- a/charts/canal-server/templates/_helpers.tpl +++ b/charts/canal-server/templates/_helpers.tpl @@ -147,4 +147,17 @@ return canal-server instance instance.properties mount resouce string. subPath: {{ .name }}-instance.properties name: config {{- end }} +{{- end }} + +{{/* +canal-server instance HA detection config. +*/}} +{{- define "canal.instance.enable.detection" }} +## heartbeat instance HA config +canal.instance.detecting.enable=true +#canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now() +canal.instance.detecting.sql=select 1 +canal.instance.detecting.interval.time=3 +canal.instance.detecting.retry.threshold=3 +canal.instance.detecting.heartbeatHaEnable=true {{- end }} \ No newline at end of file diff --git a/charts/canal-server/templates/configmap.yaml b/charts/canal-server/templates/configmap.yaml index bae2e31..f028bf3 100644 --- a/charts/canal-server/templates/configmap.yaml +++ b/charts/canal-server/templates/configmap.yaml @@ -7,7 +7,7 @@ data: {{- range $key, $values := .Values.InstanceConf.canal.instance }} {{- $_ := set $ "item" $values }} {{ $values.name }}-instance.properties: | -{{- tpl ($.Files.Get "configs/instance.properties") $ | indent 4 }} +{{ tpl ($.Files.Get "configs/instance.properties") $ | indent 4 }} {{- end }} canal.properties: | {{ tpl ($.Files.Get "configs/canal.properties") $ | indent 4 }} \ No newline at end of file diff --git a/charts/canal-server/templates/service.yaml b/charts/canal-server/templates/service.yaml index 9e119e4..c411234 100644 --- a/charts/canal-server/templates/service.yaml +++ b/charts/canal-server/templates/service.yaml @@ -7,17 +7,26 @@ metadata: spec: type: {{ .Values.service.type }} ports: - - port: {{ .Values.service.ports.canal }} + - port: {{ .Values.service.ports.canal.port }} targetPort: tcp-canal protocol: TCP name: tcp-canal + {{- if and (contains .Values.service.type "NodePort") (typeIs "int" .Values.service.ports.canal.nodePort) }} + nodePort: {{ .Values.service.ports.canal.nodePort }} + {{- end }} - port: {{ .Values.service.ports.admin }} targetPort: tcp-admin protocol: TCP name: tcp-admin + {{- if and (contains .Values.service.type "NodePort") (typeIs "int" .Values.service.ports.admin.nodePort) }} + nodePort: {{ .Values.service.ports.admin.nodePort }} + {{- end }} - port: {{ .Values.service.ports.metrics }} targetPort: http-metrics protocol: TCP name: http-metrics + {{- if and (contains .Values.service.type "NodePort") (typeIs "int" .Values.service.ports.metrics.nodePort) }} + nodePort: {{ .Values.service.ports.metrics.nodePort }} + {{- end }} selector: {{- include "canal-server.selectorLabels" . | nindent 4 }} diff --git a/charts/canal-server/values.yaml b/charts/canal-server/values.yaml index 7b3622c..ae9d7cf 100644 --- a/charts/canal-server/values.yaml +++ b/charts/canal-server/values.yaml @@ -8,7 +8,7 @@ image: registry: ghcr.io repository: dellnoantechnp/canal-server # Overrides the image tag whose default is the chart appVersion. - tag: "v0.0.1" + tag: "v1.1.6" ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -48,9 +48,15 @@ service: ## @param service.ports.metrics; metrics service port ## ports: - canal: 11111 - admin: 11110 - metrics: 11112 + canal: + port: 11111 + nodePort: 30011 + admin: + port: 11110 + nodePort: 30010 + metrics: + port: 11112 + nodePort: 30012 ## configure the canal-server detail ServerConf: @@ -78,6 +84,20 @@ ServerConf: ## @param canalServerMode specify canal server-mode, eg. tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ ## canalServerMode: tcp + ## @param autoResetLatestPosMode type boolean, set this value to 'true' means that when binlog pos not found, skip to latest. + ## WARN: pls keep 'false' in production env, or if you know what you want. + ## + autoResetLatestPosMode: false + ## @param instanceParserParallelThreadSize type int, concurrent thread number, default 60% available processors + ## suggest not to exceed Runtime.getRuntime().availableProcessors() + ## + instanceParserParallelThreadSize: 4 + ## @param instanceBinlogFormat type list, repl mysql binlog format + ## + instanceBinlogFormat: "ROW,STATEMENT,MIXED" + ## + + InstanceConf: ## @param canal.instance.gtidon boolean, for instance gtid mode. ## @param canal.instance.mysql.slaveId.autoGenerate boolean, for auto generate instance serverID. @@ -85,6 +105,7 @@ InstanceConf: ## canal: instance: + ## Support multi instance. - name: example mysql: slaveId: @@ -93,20 +114,39 @@ InstanceConf: gtidon: false master: address: 127.0.0.1 - dbUsername: canal - dbPassword: canal - filter: - regex: ".*\\..*" - black: - regex: "mysql\\.slave_.*" - - name: futures - mysql: - slaveId: - autoGenerate: false - number: 12345 - gtidon: false - master: + ## @param journalName type string, it's mysql-binlog name, default none. + ## + journalName: "" + ## @param position type int, it's binlog position, default none. + ## + position: "" + ## @param timestamp type int of microseconds-timestamp, it's mysql binlog timestamp, default none. + ## Example SQL: select FLOOR(UNIX_TIMESTAMP(NOW(3)) * 1000) as NOW_ms; + ## + timestamp: "" + ## @param gtid type is int, it's position of master gtid, default none. + ## + gtid: "" + standby: + ## @param enable standby mysql slave. + ## if true, it will be auto enable instance.detection check. + ## if true, it will be auto enable instance.detection.heartbeatHaEnable. + ## + enabled: true address: 127.0.0.1 + ## @param journalName type string, it's mysql-binlog name, default none. + ## + journalName: "" + ## @param position type int, it's binlog position, default none. + ## + position: "" + ## @param timestamp type int of microseconds-timestamp, it's mysql binlog timestamp, default none. + ## Example SQL: select FLOOR(UNIX_TIMESTAMP(NOW(3)) * 1000) as NOW_ms; + ## + timestamp: "" + ## @param gtid type is int, it's position of master gtid, default none. + ## + gtid: "" dbUsername: canal dbPassword: canal filter: @@ -114,13 +154,6 @@ InstanceConf: black: regex: "mysql\\.slave_.*" -## configure canal repl source from mysql detail -ReplSourceConf: - MySQL_REPL_address: 127.0.0.1 - MySQL_REPL_port: 3306 - MySQL_REPL_user: canal - MySQL_REPL_password: canal_pass - ## configure canal tsdb database by mysql detail TsdbDBConf: enabled: true @@ -321,7 +354,7 @@ affinity: {} zookeeper: ## @param zookeeper.enabled Switch to enable or disable the Zookeeper helm chart ## - enabled: false + enabled: true auth: ## @param zookeeper.auth.enabled Enable Zookeeper auth, it's always false. ## @@ -347,263 +380,4 @@ externalZookeeper: ## - zkServer1:2181 ## - zkServer2:2181 ## - servers: [] - -config: - canal: | - # tcp bind ip - canal.ip= - # register ip to zookeeper - canal.register.ip= - canal.port="{{ .Values.ServerConf.canalPortNumber }}" - canal.metrics.pull.port="{{ .Values.ServerConf.canalMetricsPortNumber }}" - - # canal instance user/passwd - # canal.user = canal - # canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458 - - # canal admin config - #canal.admin.manager = 127.0.0.1:8089 - canal.admin.port="{{ .Values.ServerConf.canalAdminPortNumber }}" - canal.admin.user="{{ .Values.ServerConf.canalAdminUser }}" - canal.admin.passwd=${CANAL_ADMIN_CIPHERTEXT_PASSWORD:4ACFE3202A5FF5CF467898FC58AAB1D615029441} - - # admin auto register - #canal.admin.register.auto = true - #canal.admin.register.cluster = - #canal.admin.register.name = - canal.zkServers= - - # flush data to zk - canal.zookeeper.flush.period=1000 - canal.withoutNetty=false - - # tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ - canal.serverMode={{ .Values.ServerConf.canalServerMode}} - - # flush meta cursor/parse position to file - canal.file.data.dir=${canal.conf.dir} - canal.file.flush.period=1000 - - ## memory store RingBuffer size, should be Math.pow(2,n) - canal.instance.memory.buffer.size=16384 - ## memory store RingBuffer used memory unit size , default 1kb - canal.instance.memory.buffer.memunit=1024 - - ## meory store gets mode used MEMSIZE or ITEMSIZE - canal.instance.memory.batch.mode=MEMSIZE - canal.instance.memory.rawEntry=true - - ## detecing config - canal.instance.detecting.enable=false - #canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now() - canal.instance.detecting.sql=select 1 - canal.instance.detecting.interval.time=3 - canal.instance.detecting.retry.threshold=3 - canal.instance.detecting.heartbeatHaEnable=false - - # support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery - canal.instance.transaction.size=1024 - - # mysql fallback connected to new master should fallback times - canal.instance.fallbackIntervalInSeconds=60 - - # network config - canal.instance.network.receiveBufferSize=16384 - canal.instance.network.sendBufferSize=16384 - canal.instance.network.soTimeout=30 - - # binlog filter config - canal.instance.filter.druid.ddl=true - canal.instance.filter.query.dcl=false - canal.instance.filter.query.dml=false - canal.instance.filter.query.ddl=false - canal.instance.filter.table.error=false - canal.instance.filter.rows=false - canal.instance.filter.transaction.entry=false - canal.instance.filter.dml.insert=false - canal.instance.filter.dml.update=false - canal.instance.filter.dml.delete=false - - # binlog format/image check - canal.instance.binlog.format=ROW,STATEMENT,MIXED - canal.instance.binlog.image=FULL,MINIMAL,NOBLOB - - # binlog ddl isolation - canal.instance.get.ddl.isolation=false - - # parallel parser config - canal.instance.parser.parallel=true - - ## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors() - #canal.instance.parser.parallelThreadSize = 16 - - ## disruptor ringbuffer size, must be power of 2 - canal.instance.parser.parallelBufferSize=256 - - # table meta tsdb info - canal.instance.tsdb.enable=true - canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:} - #canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL; - canal.instance.tsdb.url=jdbc:mysql://${CANAL_TSDB_MYSQL_ADDRESS:127.0.0.1}:${CANAL_TSDB_MYSQL_PORT:3306}/${CANAL_TSDB_DB_NAME:canal_tsdb}?characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC - canal.instance.tsdb.dbUsername=${CANAL_TSDB_USER:canal} - canal.instance.tsdb.dbPassword=${CANAL_TSDB_PASSWORD:canal} - - # dump snapshot interval, default 24 hour - canal.instance.tsdb.snapshot.interval=24 - - # purge snapshot expire , default 360 hour(15 days) - canal.instance.tsdb.snapshot.expire=360 - - ##################################################### - ############# destinations ############# - ##################################################### - canal.destinations=example - # conf root dir - canal.conf.dir=../conf - - # auto scan instance dir add/remove and start/stop instance - canal.auto.scan=true - canal.auto.scan.interval=5 - - # set this value to 'true' means that when binlog pos not found, skip to latest. - # WARN: pls keep 'false' in production env, or if you know what you want. - canal.auto.reset.latest.pos.mode=false - #canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml - canal.instance.tsdb.spring.xml=classpath:spring/tsdb/mysql-tsdb.xml - canal.instance.global.mode=spring - canal.instance.global.lazy=false - canal.instance.global.manager.address=${canal.admin.manager} - #canal.instance.global.spring.xml = classpath:spring/memory-instance.xml - canal.instance.global.spring.xml=classpath:spring/file-instance.xml - #canal.instance.global.spring.xml = classpath:spring/default-instance.xml - - ################################################## - ######### MQ Properties ############# - ################################################## - # aliyun ak/sk , support rds/mq - canal.aliyun.accessKey= - canal.aliyun.secretKey= - canal.aliyun.uid= - canal.mq.flatMessage=true - canal.mq.canalBatchSize=50 - canal.mq.canalGetTimeout=100 - - # Set this value to "cloud", if you want open message trace feature in aliyun. - canal.mq.accessChannel=local - canal.mq.database.hash=true - canal.mq.send.thread.size=30 - canal.mq.build.thread.size=8 - - ################################################## - ######### Kafka ############# - ################################################## - kafka.bootstrap.servers=127.0.0.1:9092 - kafka.acks=all - kafka.compression.type=none - kafka.batch.size=16384 - kafka.linger.ms=1 - kafka.max.request.size=1048576 - kafka.buffer.memory=33554432 - kafka.max.in.flight.requests.per.connection=1 - kafka.retries=0 - kafka.kerberos.enable=false - kafka.kerberos.krb5.file="../conf/kerberos/krb5.conf" - kafka.kerberos.jaas.file="../conf/kerberos/jaas.conf" - - ################################################## - ######### RocketMQ ############# - ################################################## - rocketmq.producer.group=test - rocketmq.enable.message.trace=false - rocketmq.customized.trace.topic= - rocketmq.namespace= - rocketmq.namesrv.addr=127.0.0.1:9876 - rocketmq.retry.times.when.send.failed=0 - rocketmq.vip.channel.enabled=false - rocketmq.tag= - - ################################################## - ######### RabbitMQ ############# - ################################################## - rabbitmq.host= - rabbitmq.virtual.host= - rabbitmq.exchange= - rabbitmq.username= - rabbitmq.password= - rabbitmq.deliveryMode= - - ################################################## - ######### Pulsar ############# - ################################################## - pulsarmq.serverUrl= - pulsarmq.roleToken= - pulsarmq.topicTenantPrefix= - instance: | - ################################################# - ## mysql serverId , v1.0.26+ will autoGen - {{- if not .Values.InstanceConf.canal.instance.mysql.salveId.autoGenerate }} - #canal.instance.mysql.slaveId= - {{- else }} - canal.instance.mysql.slaveId={{ .Values.InstanceConf.canal.instance.mysql.salveId.number }} - {{- end }} - # enable gtid use true/false - canal.instance.gtidon="{{ .Values.InstanceConf.canal.instance.gtidon }}" - - # position info - canal.instance.master.address={{ .Values.InstanceConf.canal.instance.master.address }} - 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?characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC - #canal.instance.tsdb.dbUsername=canal - #canal.instance.tsdb.dbPassword=canal - #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={{ .Values.InstanceConf.canal.instance.dbUsername }} - canal.instance.dbPassword={{ .Values.InstanceConf.canal.instance.dbPassword }} - 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={{ .Values.InstanceConf.canal.instance.filter.regex }} - - # table black regex - canal.instance.filter.black.regex={{ .Values.InstanceConf.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 - - # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) - #canal.instance.filter.black.field=test1.t_product:subject/product_image,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,topic2:mytest2\\..*,.*\\..* - canal.mq.partition=0 - - # hash partition config - #canal.mq.enableDynamicQueuePartition=false - #canal.mq.partitionsNum=3 - #canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6 - #canal.mq.partitionHash=test.table:id^name,.*\\..* - ################################################# \ No newline at end of file + servers: [] \ No newline at end of file