Yes, there is ransac, and you have also flann (which is an approximate nearest neightbor approach). However, in standard datasets, when processing them offline, the results will stay pretty the same between runs. The problem with rosbag is that you cannot know which frames will be processed. And if you use "approx_sync:=true", you cannot know which frames will be synchronized.
You may try to slow down the rosbag, to avoid skipping frames:
rosbag play -r 0.5 ...