Exactly-once Semantics is Possible: Here's How Apache Kafka Does it