ticdc同步到kafka

【 TiDB 使用环境】生产环境
【 TiDB 版本】 v5.2.3
【复现路径】
ticdc同步到kafka,表内有longtext字段存储带有<>信息的值,发送到kafka显示为\u003e\u003d信息,与库里的信息不符。
【资源配置】
【附件:截图/日志/监控】


image

CDC 后面的版本才支持 binrary

如果是用的 Canal-json,tidb V5.4.1 之后的版本才支持 binrary

https://docs.pingcap.com/zh/tidb/stable/ticdc-canal-json

<转义成\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 来做处理了…

已升级到6.1.2但是仍存在转义问题,无论是longtext,binary,char/varchar还是avro、canal-json、maxwell。


image

这是正常的阿,接收需要在处理一下的
参考这个帖子

最后一段:
canal-json decoder 参考实现:
tiflow/canal_json_decoder.go at master · pingcap/tiflow (github.com)

基本上是 hard 模式了~ :cowboy_hat_face:

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