【 TiDB 使用环境】生产环境
【 TiDB 版本】 v5.2.3
【复现路径】
ticdc同步到kafka,表内有longtext字段存储带有<>信息的值,发送到kafka显示为\u003e\u003d信息,与库里的信息不符。
【资源配置】
【附件:截图/日志/监控】
CDC 后面的版本才支持 binrary
如果是用的 Canal-json,tidb V5.4.1 之后的版本才支持 binrary
<转义成\u003e,是因为name字段设置为varchar吗?只有binary不会被转义吗?
varchar 和 longtext ,text,binrary 这些类型定义编码是不一样的,所以处理也不一样
如果varchar 能满足的话,换成varchar 就没这毛病了
测试了在5.2.3环境下varchar/longtext/binary都不可以。5.4.1之后binary可以是吗?还有其他方式不变更数据内容同步到kafka吗
可以在5.4.1 之后的版本上做下测试,Canal-json 是 5.4.0 做过一些增强实现,我不太确定
binary 肯定是可以的
cdc不能单独升级对吧,只能统一升级tidb?这个短时间不太可能全局升级。还有其他方式不变更数据内容同步到kafka吗?
对,只能统一 的升级,如果要升级,就建议升级到 6.1 LTS
用原生的协议 或者 avro
https://docs.pingcap.com/zh/tidb/stable/ticdc-open-protocol#列标志位
https://docs.pingcap.com/zh/tidb/stable/ticdc-avro-protocol
需要自己写client consumer 来做处理了…
这是正常的阿,接收需要在处理一下的
参考这个帖子
最后一段:
canal-json decoder 参考实现:
tiflow/canal_json_decoder.go at master · pingcap/tiflow (github.com)
基本上是 hard 模式了~
cdc 不是直接到kafka的吗,接收时候在哪里可以处理?
有样例吗
cdc 是直接到 kafka 阿,但是从kafka 接收数据的时候,就需要自行处理。
ticdc 标准的协议有样例
https://github.com/pingcap/tiflow/tree/master/examples/java
https://github.com/pingcap/tiflow/tree/master/cmd/kafka-consumer