The following throws declaration can be removed :
private DBMSEvent extractEvent(BinlogPosition position)
throws InterruptedException, ExtractorException
{
...
This does not bring any compilation error, which means these exceptions are never thrown.
This is why the extractor will try to extract once again (without any notice of previous errors)
Now throwing the error, so that extractor stops cleanly.