Kafka is a lower-level system than RabbitMQ. It doesn't support:
* Topic routing. With RabbitMQ you can bind queue X to exchange Y with the routing keys "foo.bar." and "foo..baz". The queue will then get all messages matching those keys. That allows for very flexible pub-sub-style routing of messages; we use this extensively. As far as I can see, not really possible with Kafka without message duplication.
* Nacking model. Since Kafka queues are strictly linear, if a consumer fails to consume a message and wants to nack it and then process the remaining messages, it can't do so, since it has a single "read head". It would have to re-enqueue the message in that case.
* Prioritization. Not supported. You will have to create topics for different priorities and then consume those topics at a different rate depending on the priority.
* Message TTL.
And it's susceptible to network partitions, just like RabbitMQ.
* Topic routing. With RabbitMQ you can bind queue X to exchange Y with the routing keys "foo.bar." and "foo..baz". The queue will then get all messages matching those keys. That allows for very flexible pub-sub-style routing of messages; we use this extensively. As far as I can see, not really possible with Kafka without message duplication.
* Nacking model. Since Kafka queues are strictly linear, if a consumer fails to consume a message and wants to nack it and then process the remaining messages, it can't do so, since it has a single "read head". It would have to re-enqueue the message in that case.
* Prioritization. Not supported. You will have to create topics for different priorities and then consume those topics at a different rate depending on the priority.
* Message TTL.
And it's susceptible to network partitions, just like RabbitMQ.