It seems Kafka catches up quickly these days, and it is an outright winner against many other existing messaging systems, such as ActiveMQ etc. it must be doing something right. Here is a blog with some performance graphs for Kafka, RabbitMQ and ActiveMQ, Kafka is faster and having much higher throughput. Here is another blog with comparison among several messaging systems on many features, Kafka seems not losing to any in terms of richness of features.
It is the same as I see, many companies and projects are utilizing Kafka, good for its initiators. However, the are three areas where I will be cautious: routing, persistence and message storm.
Routing: Kafka is depending on files to transfer the messages, if there are large number of subscribers, the same message files will need to be copied to many subscribers for many many times, there is inefficiency there. For example, if the same file will need to go to 10 servers on the same rack, the file will go through the rack switch 10 times. If 10 can be reduced to 1, that will be much more efficient. The modern network switches are very capable and sophisticated, they should be able to help with the routing problem.
Persistence: Kafka uses file for persistence and transfer, so all Kafka brokers, publishers and subscribers will need to have disk space dedicated for Kafka. Disk speed and disk failure become two issues: 1. subscriber servers usually are running mission critical applications, Kafka will compete not only CPU (Kafka CPU usage can be capped) but also disk (which is not easy to cap), we can use two disks per server, but that is cost. 2. Disk failure rate is not that low, if we have 10,000 servers in the cluster, many disks will fail over period of time, then Kafka will not work there; however, critical applications running on subscriber servers often are required to have high availability, high throughput, and low latency, many such applications can run without disk, disk/Kafka failure will damage availability. If Kafka subscriber can work without disk, this option should find its uses in many projects.
Message Storm: Kafka will go as fast as it can, that is great, however, it can easily saturate network links, so throttling should be put in many places to prevent message storm to happen, especially in the cases of bootstrapping publishers or subscribers.