ticbc数据同步kafka消费数据解析失败

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】 4.0.9
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】通过ticdc将数据同步到kafka中,在java项目中读取kafka的消息,通过tidb官方案例解析数据报错


当approve_date字段数据为null时能解析成功,当它不为null时解析失败,失败原因是

读取数据流的时候将最后一段截掉了,不再是一个json对象,转换json失败
【资源配置】
【附件:截图/日志/监控】

那是你代码问题呀 python能解析这个json

这段解析的代码是官方案例的代码

json 数据格式的功能是在 6.3 才 GA 的,请升级新版。

copy paste 你还得debug 不是复制就能用

根据您的描述,可能是因为 TiCDC 同步到 Kafka 的数据格式不符合您的预期,导致在 Java 项目中读取 Kafka 消息时解析失败。具体原因可能是 TiCDC 同步到 Kafka 的数据格式与您的 Java 项目中解析数据的方式不兼容,或者 TiCDC 同步到 Kafka 的数据本身存在问题。

为了更好地解决您的问题,我建议您按照以下步骤进行排查:

  1. 确认 TiCDC 同步到 Kafka 的数据格式是否符合您的预期。可以使用 Kafka 自带的命令行工具 kafka-console-consumer 来查看 Kafka 中的消息内容,以及消息的格式是否符合您的预期。例如,可以使用以下命令来查看 Kafka 中名为 my_topic 的 Topic 中的消息:

    kafka-console-consumer --bootstrap-server localhost:9092 --topic my_topic --from-beginning
    

    如果 TiCDC 同步到 Kafka 的数据格式不符合您的预期,可以尝试调整 TiCDC 的配置,或者修改 Java 项目中解析数据的方式。

  2. 确认 Java 项目中解析数据的方式是否正确。可以检查 Java 项目中解析数据的代码,确认代码是否正确,是否符合 TiCDC 同步到 Kafka 的数据格式。如果 Java 项目中解析数据的方式存在问题,可以尝试修改代码,或者使用其他方式来解析数据。

  3. 如果以上两个步骤都没有解决问题,可以尝试在 TiCDC 和 Kafka 之间增加一个数据格式转换的中间件,例如 Apache Kafka Connect,将 TiCDC 同步到 Kafka 的数据格式转换为您的 Java 项目中可以解析的格式。

希望以上建议能够帮助您解决问题。如果您需要更多帮助,请提供更多详细信息,我会尽力为您提供帮助。

Tidb通过TiCDC同步数据到kafka中,value的0~7位标志value的长度,如果一个Message中有多个Event,第一个的value可能多解析了一个字节后面的value可能少解析了一个字节,到时都会报错,这个有解决方案吗,并不是我自己写的解析方法,是通过TicdcEventDecoder()来解析的,我没做改动

根据您的描述,TiCDC 同步到 Kafka 的数据中,value 的前 8 个字节标志着 value 的长度,但是在一个 Message 中有多个 Event 的情况下,第一个 Event 的 value 可能多解析了一个字节,后面的 Event 的 value 可能少解析了一个字节,导致解析失败。您想知道是否有解决方案。

针对这个问题,我建议您可以尝试以下两种解决方案:

  1. 修改 TiCDC 的配置,将多个 Event 合并成一个 Message。可以通过修改 TiCDC 的 sink 配置来实现。具体来说,可以将 sink 配置中的 format 参数设置为 canal-json,并将 canal-jsonbatch-size 参数设置为一个较大的值,例如 1000。这样 TiCDC 就会将多个 Event 合并成一个 Message,避免了多个 Event 的 value 长度标志位的问题。

  2. 修改 Java 项目中解析数据的方式,避免多个 Event 的 value 长度标志位的问题。具体来说,可以在 Java 项目中使用 TicdcEventDecoder 解析数据时,先读取 value 的前 8 个字节,获取 value 的长度,然后再读取对应长度的字节作为 value。这样即使在一个 Message 中有多个 Event,也可以正确地解析每个 Event 的 value。

希望以上建议能够帮助您解决问题。如果您需要更多帮助,请提供更多详细信息,我会尽力为您提供帮助。

我现在的tidb版本是4.0.9,这个版本没有canal-json这种协议格式,只有canal协议格式而且batch-size和canal格式有冲突



,第二种方式我现在的解析方式就是这种出现问题的,还有其他的解决方法吗

你这肯定不支持要你自己编码了 6.5的功能 你迁移到4.0

没编码能力建议升级数据库

https://docs.pingcap.com/zh/tidb/stable/ticdc-sink-to-cloud-storage
这个能同步kafka的数据到s3 你直接读s3吧

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。