MongoShake icon indicating copy to clipboard operation
MongoShake copied to clipboard

mongoshake同步kafka,重启后部分数据丢失

Open lenovore opened this issue 2 years ago • 4 comments

mongoshake版本:v2.8.2

写入mongodb数据(100W),通过restful接口监控mongoshake,15:01左右数据写入完成,但此时查看kafka,还在持续的写入message,大概写入了有80W。

看mongoshake机器资源,内存有大约2GB占用没有释放完。然后(15:02)mongshake重启,导致剩余的20W数据丢失了(没有写入到kafka)。

image image image

是我这边哪里配置错了吗? collector.txt

lenovore avatar Feb 27 '23 07:02 lenovore

出现重启数据丢失感觉是,数据没有成功写入kafka后就更新了位点。这样情况怎么解决呢,有没有人知道

lenovore avatar Feb 27 '23 11:02 lenovore

tunnel/kaka_writer.go有段代码,AckRequired false,应该是不会获取kafka的ack。 image

设置为true重新编译后跑起,数据全都堵在logs_queue中,只有拉取,没有写入。日志中,get远大于apply

[2023/02/28 14:44:40 CST] [INFO] [name=default-0, stage=incr, get=467065, filter=70, worker_consume=36538, worker_apply=36538, worker_failed_times=0, write_success=0, tps=0, ckpt_times=0, retransimit_times=0, tunnel_traffic=44.70MB, lsn_ckpt={0[0, 0], 1970-01-01 08:00:00}, lsn_ack={0[0, 0], 1970-01-01 08:00:00}]] [2023/02/28 14:44:45 CST] [INFO] [name=default-0, stage=incr, get=467065, filter=70, worker_consume=36538, worker_apply=36538, worker_failed_times=0, write_success=0, tps=0, ckpt_times=0, retransimit_times=0, tunnel_traffic=44.70MB, lsn_ckpt={0[0, 0], 1970-01-01 08:00:00}, lsn_ack={0[0, 0], 1970-01-01 08:00:00}]]

lenovore avatar Feb 28 '23 06:02 lenovore

现在确实是这样的,kafka写到内部tunnel.inputChan就算成功,没有去严格计算写入kafka队列成功,成功后就会更新位点。所以会出现这样的问题。 目的是MongoDB时有做强一致写入DB成功后,才更新位点。

zhangst avatar Feb 28 '23 07:02 zhangst

感谢回复!! 这样的话,如果源写入量大,只要mongoshake重启,那肯定就会丢部分到kafka的数据了。 有没有好的办法避免丢数据呢,比如从配置上来讲,调整写入kafka速率。 这块后面有没有计划处理下呢。

lenovore avatar Feb 28 '23 08:02 lenovore