-
Notifications
You must be signed in to change notification settings - Fork 7.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
zookeeper中没有cursor或很久才更新一次,必须配置canal.destinations参数才会按照canal.zookeeper.flush.period频率更新cursor值 #2616
Comments
额. 等了好久, 有cursor了........
|
那个cursor的问题. 我找到原因了, 但是还不知道为啥 @agapple 大佬就能帮忙瞅瞅么, 这样的话我以后要是加instance还得重启canal啊. 要不然加不到canal.destinations里啊. |
看代码逻辑是定时任务每秒都会同步一次,同步的是当前内存中的cursor,内存中的cursor更新是由cilent端Ack之后才会更新,所以只有client端Ack之后才会更新 并以period频率同步zk |
我是canal-> kafka的模式, 是不是不存在client ack? |
mq模式 send成功就会ack了。 |
那这就有问题了, 我生产已经跑了一年了, 应用消费数据都没问题, 偶然发现一个canal instance没有cursor文件, 其他的instance cursor文件更新频率并非 |
这个情况的话,还得再检查下吧,,没有cursor文件的是否是default-instance模式呢? |
先感谢你哈 我现在是发现必须配置 canal.destinations 更新频率才正常, 其实也不能完全这么说, |
最近测试canal刚好也遇到这个问题,测试之后发下问题如下: 此时就会出现,一直无法获取到EntryType.TRANSACTIONEND的情况。结合b看,就无法满足更新offset的条件。 EntryEventSink关键源代码 下面代码,在遵循原来代码逻辑的情况下,可以保证,同一个事务的头尾可以同时被发送。如此,就可以正常更新offset了。 |
👍 |
老哥提个mr啊, 等着作者修复就不知道啥时候了 |
遇到同样的问题,使用gtid模式,无法在zk中更新cursor,不使用gtid模式就是正常的,但是数据库主备切换后会报错,太难了。。。 |
我后面也有遇到,你可以参考下哦 https://blog.csdn.net/ZSZSZSxh/article/details/105826492 |
按照你的方式给代码贴上去,显示commitGtid 未定义,你贴的代码是完整的吗? |
@Fanduzi 原因分析是对的,主要是因为空事务发送时只发送了begin,没有配套带上begin/commit事件,导致在gtid模式下位点更新时一直看不到commit事件 |
这个没有位点 怎么解决呢 ,admin 集群模式 zk没有位点啊 |
@agapple 大佬 |
@saigu 哥哥 解决了吗 |
看起来1.1.5的release已经修复了这个bug,可以升级一波试试 |
Question
canal 1.1.4
mysql 5.7.26
zookeeper 3.4.14
kafka 2.12-2.4.0
单点. 发现zookeeper没有cursor, 没存位点信息啊
canal.properties
instance.properties
The text was updated successfully, but these errors were encountered: