MongoShake
MongoShake copied to clipboard
mongoshake同步kafka,重启后部分数据丢失
mongoshake版本:v2.8.2
写入mongodb数据(100W),通过restful接口监控mongoshake,15:01左右数据写入完成,但此时查看kafka,还在持续的写入message,大概写入了有80W。
看mongoshake机器资源,内存有大约2GB占用没有释放完。然后(15:02)mongshake重启,导致剩余的20W数据丢失了(没有写入到kafka)。
是我这边哪里配置错了吗? collector.txt
出现重启数据丢失感觉是,数据没有成功写入kafka后就更新了位点。这样情况怎么解决呢,有没有人知道
tunnel/kaka_writer.go有段代码,AckRequired false,应该是不会获取kafka的ack。
设置为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}]]
现在确实是这样的,kafka写到内部tunnel.inputChan就算成功,没有去严格计算写入kafka队列成功,成功后就会更新位点。所以会出现这样的问题。 目的是MongoDB时有做强一致写入DB成功后,才更新位点。
感谢回复!! 这样的话,如果源写入量大,只要mongoshake重启,那肯定就会丢部分到kafka的数据了。 有没有好的办法避免丢数据呢,比如从配置上来讲,调整写入kafka速率。 这块后面有没有计划处理下呢。