canal-spring icon indicating copy to clipboard operation
canal-spring copied to clipboard

比官方示例慢一些,想知道是哪些地方会导致慢,怎么优化,或者能说一下怎么设计的,感谢

Open aitxiaogang opened this issue 11 months ago • 11 comments

比官方示例慢一些,想知道是哪些地方会导致慢,怎么优化,或者能说一下怎么设计的,感谢

aitxiaogang avatar Mar 15 '24 06:03 aitxiaogang

同样环境下,对比官方示例慢接近1秒

aitxiaogang avatar Mar 15 '24 06:03 aitxiaogang

感谢提出这个问题,大概执行流程如下:

  1. 入口是 ICanalClient 中的 handleListening 方法,监听原始的canal消息
  2. IMessageHandler 中使用 EntryListenerContext 找到表名对应的 EntryListener 。以及处理转换原始消息,获取每一行的数据。
  3. RowDataHandler 中使用 IConvertFactory 创建实体对象,根据 CanalEntry.EventType 确定执行EntryListener 的那个方法。

xizixuejie avatar Mar 15 '24 07:03 xizixuejie

感谢回复,建议你创建一个QQ或者微信群,大家群策群力一起优化。另外发现你代码写的很整洁,点赞

aitxiaogang avatar Mar 15 '24 07:03 aitxiaogang

image 抛出异常,消息没有回滚。请教异常处理机制是什么

aitxiaogang avatar Mar 15 '24 08:03 aitxiaogang

canal.async 默认为true,设置为false才会回滚消息。 但是如果你是用的tcp模式或者 canal.mq.flat-message 设置为false了,由于AbstractMessageHandler 中catch异常没抛出,我改一下。

xizixuejie avatar Mar 15 '24 08:03 xizixuejie

消息拉取间隔设置0延时有什么不好的地方吗

aitxiaogang avatar Mar 15 '24 08:03 aitxiaogang

tcp模式下 canal.timeout 设置为 -1 kafka模式下 canal.timeout 设置为 0

xizixuejie avatar Mar 15 '24 09:03 xizixuejie

不知道啊,我一直是设置的1

xizixuejie avatar Mar 15 '24 09:03 xizixuejie

请教一个问题,看了官方文档没有找到答案。canal客户端或者说你的这个项目如果停止了,再重新启动这个程序的时候怎么获取到停止的这段时间数据库数据的变化历史呢

aitxiaogang avatar Mar 15 '24 09:03 aitxiaogang

如果消息没被消费,客户端会自动拉取的

如果你是连了其他的mq,那就存到消息中间件里了;如果你是直连的,应该是存到canal的服务端了

xizixuejie avatar Mar 15 '24 10:03 xizixuejie

能说一下怎么配置rabbitMQ消费方式吗,virtual-host不知道设置什么格式。另外我看源码不管哪种消费方式都添加了超时配置,怎么取消超时机制呢

aitxiaogang avatar Mar 18 '24 03:03 aitxiaogang