Exactly-once delivery really depends where and how you actually "deliver". Even if your writes are idempontent you need to know if they have been properly committed on the other side, not trivial. If the system you are committing your output offers version control and/or proper transactional support then delivery can be eventually re-conciliated, otherwise with no such assumptions it is pretty much impossible.
Apache Flink's snapshotting algorithm solely guarantees exactly-once application state access, plain and simple.