Characteristics |
Apache Kafka |
RabbitMQ |
Architecture |
Kafka uses a partitioned log model, which combines messaging queue and publish subscribe approaches. |
RabbitMQ uses a messaging queue. |
Scalability |
Kafka provides scalability by allowing partitions to be distributed across different servers. |
Increase the number of consumers to the queue to scale out processing across those competing consumers. |
Message retention |
Policy based, for example messages may be stored for one day. The user can configure this retention window. |
Acknowledgement based, meaning messages are deleted as they are consumed. |
Multiple consumers |
Multiple consumers can subscribe to the same topic, because Kafka allows the same message to be replayed for a given window of time. |
Multiple consumers cannot all receive the same message, because messages are removed as they are consumed. |
Replication |
Topics are automatically replicated, but the user can manually configure topics to not be replicated. |
Messages are not automatically replicated, but the user can manually configure them to be replicated. |
Message ordering |
Each consumer receives information in order because of the partitioned log architecture. |
Messages are delivered to consumers in the order of their arrival to the queue. If there are competing consumers, each consumer will process a subset of that message. |
Protocols |
Kafka uses a binary protocol over TCP. |
Advanced messaging queue protocol (AMQP) with support via plugins: MQTT, STOMP. |