public static void atomicMoveWithFallback(Path source, Path target) throws IOException {
        atomicMoveWithFallback(source, target, true);
    }
Attempts to move source to target atomically and falls back to a non-atomic move if it fails.
This function also flushes the parent directory to guarantee crash consistency.

@throws IOException if both atomic and non-atomic moves fail, or parent dir flush fails.
clients/src/main/java/org/apache/kafka/common/utils/Utils.java