Message Delivery Semantics in Distributed Systems

Today we are going to be talking about message delivery semantics in Apache Kafka. Since interactions using Kafka are mostly asynchronous there are no direct connections between client and server. Moreover, there are no clients and servers of their usual meaning at all. 

Apache Kafka serves as an intermediate asynchronous messaging layer between Producer and Consumer and the latter two are actually can be treated as a client and a server depending on the situation.

Message delivery semantics defines guarantees that can be expected in the worst-case scenarios. 

Delivery semantics rely on the behaviors of the producer, consumer, and broker itself. What can happen in this chain? First of all, no distributed systems are fully reliable. The complexity of factors involved in the chain is tremendous.