In distributed systems, "messages arrive exactly once" is nearly a fantasy. Networks fail, nodes die, responses get lost. If a producer sends a message but doesn't receive an ACK, it doesn't know if it arrived. Resend and duplicates appear; don't resend and loss happens. This dilemma is the starting point of ingestion reliability.
Realistic distributed systems mostly guarantee At-least-once. "Better duplicates than loss" is the choice. Then who handles duplicates? The answer: consumers implement idempotency. Today we cover five axes of reliability — idempotency, ordering, retries, deduplication, DLQ.