The most voted answer covers most part but I would like to high light use case point of view. Can kafka do that rabbit mq can do, answer is yes but can rabbit mq do everything that kafka does, the answer is no. So what is the thing that rabbit mq cannot do that makes kafka apart, that is distributed message processing. With this now read back the most voted answer and it will make more sense. To elaborate, take a use case where you need to create a messaging system that has super high throughput for example "likes" in facebook and You have chosen rabbit mq for that. You created an exchange and queue and a consumer where all publishers (in this case FB users) can publish 'likes' messages. Since your throughput is high, you will create multiple threads in consumer to process messages in parallel but you still bounded by the hardware capacity of the machine where consumer is running. Assuming that one consumer is not sufficient to process all messages - what would you do? Can you add one more consumer to queue - no you cant do that. Can you create a new queue and bind that queue to exchange that publishes 'likes' message, answer is no cause you will have messages processed twice. That is the core problem that kafka solves. It lets you create distributed partitions (Queue in rabbit mq) and distributed consumer that talk to each other. That ensures your messages in a topic gets processes by consumers distributed in various nodes (Machines). Kafka brokers ensures that messages get load balanced across all partitions of that topic. Consumer group make sure that all consumer talk to each other and message does not get processed twice. But in real life you will not face this problem unless your through put is seriously high because rabbit mq can also process data very fast even with one consumer.