开发者社区> 问答> 正文

两个客户端同时运行并订阅了同一个canal服务端,客户端就无法消费且报错,并且binlog日志会丢失

com.alibaba.otter.canal.protocol.exception.CanalClientException: deserializer failed at com.alibaba.otter.canal.client.CanalMessageDeserializer.deserializer(CanalMessageDeserializer.java:54) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.receiveMessages(SimpleCanalConnector.java:322) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.getWithoutAck(SimpleCanalConnector.java:314) at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.getWithoutAck(SimpleCanalConnector.java:286) at com.alibaba.otter.CanalClient.main(CanalClient.java:135)

原提问者GitHub用户MoRongQin

展开
收起
山海行 2023-04-28 11:56:13 620 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    这个问题可能是由于多个客户端同时订阅了同一个Canal服务端,导致消息重复消费以及binlog日志丢失所致。为了避免这种情况发生,建议您采取以下措施:

    确保每个客户端都使用唯一的client id。Canal服务端会根据client id来区分不同的客户端,如果多个客户端使用相同的client id,就会导致消息重复消费和binlog日志丢失。

    确保每个客户端订阅的表不重复。如果多个客户端订阅了相同的表,就会导致消息重复消费和binlog日志丢失。

    确保每个客户端都使用独立的线程来消费消息。如果多个客户端使用相同的线程来消费消息,就会导致消息重复消费和binlog日志丢失。

    如果您需要多个客户端同时订阅同一个Canal服务端,建议您使用分布式锁来控制消息消费。这样可以确保每个客户端都能够独立消费消息,避免消息重复消费和binlog日志丢失。

    如果您仍然无法解决问题,请尝试升级到最新版本,并检查文档以获取更多信息。如果问题仍然存在,请联系您的技术支持团队进行帮助和支持。

    2023-04-28 16:08:12
    赞同 展开评论 打赏
  • 为了保序,只能单客户端消费

    原回答者GitHub用户agapple

    2023-04-28 14:59:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
大规模日志数据平台架构面临的问题与挑战 立即下载
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载