The biggest difference, IMO, is that Kafka is typically used when a message will be consumed by multiple consumers, whereas RabbitMQ or SQS generally send a message to a single consumer.<p>We use it to ingest ~40mb&#x2F;s and fan it out to a number of consuming applications.<p>I&#x27;ll also add that if you put some thought behind your topic replication and partitioning you can build some incredibly resilient applications.  Also that &quot;immutable&quot; isn&#x27;t necessarily true, it&#x27;s common for Kafka topics to roll off messages based on time or size.  (That&#x27;s just to clarify for those not familiar with Kafka.  I realize that you mean messages are not deleted or modified once written to a topic, other than by topic retention settings)