【 TiDB 使用环境】生产\测试环境\ POC
【 TiDB 版本】6.x
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
1.当我配置TiCDC中的cdc changefeed 配置文件changefeed_config.to时,将topic设置’.'为分隔符
[sink]
dispatchers = [
{matcher = [‘.’], topic = “tidb.{schema}.{table}”},
]
2.在tiflow/cdc/sink/mq/codec/avro.go源码中会将注册schema-registry的subject中所有’.'替换为 ‘_’ ,导致我反序列化时候,根据我的topic="tidb.{schema}.{table}"找不到对应的subject导致报错,TiCDC原码:
const (
replacementChar = “_”
)
func sanitizeTopic(name string) string {
return strings.ReplaceAll(name, “.”, replacementChar)
}
3.kafka-connect源码WorkerSinkTask.java中默认根据topic名称去schema-registry中进行解析,这样导致跟原生kafka-connect不兼容,需要重新定制开发
private SinkRecord convertAndTransformRecord(final ConsumerRecord<byte, byte> msg) {
SchemaAndValue keyAndSchema = retryWithToleranceOperator.execute(() →
keyConverter.toConnectData(msg.topic(), msg.headers(), msg.key()),
Stage.KEY_CONVERTER, keyConverter.getClass());
…ignor other
}
Question:为什么要将’.‘替换成’_’ ?