1, ActiveMQ
Apache is a subproject under Apache. Similar to ZeroMQ, it can implement queues as agents and point-to-point technologies. And like RabbitMQ, it can efficiently implement advanced application scenarios with a small amount of code. RabbitMQ, ZeroMQ, and ActiveMQ all support C++, Java,.net, Python, PHP, Ruby, etc.
2, the RabbitMQ
Erlang is an open source message queue written in Erlang. It supports a number of protocols: AMQP, XMPP, SMTP, STOMP, which makes it very heavyweight and suitable for enterprise development. A Broker architecture is also implemented, which means that messages are queued in a central queue before being sent to clients. Good support for Routing, Load balancing, or data persistence.
3, Redis
Is a key-value NoSQL database, development and maintenance is very active, although it is a key-value database storage system, but it itself supports MQ function, so it can be used as a lightweight queue service. The RabbitMQ and Redis queues are executed 1 million times each, and the execution time is recorded once every 100,000 times. The test data is divided into 128Bytes, 512Bytes, 1K, and 10K. The results show that redis performs better than RabbitMQ when data is small and unbearably slow when data is larger than 10K. While Redis performs very well regardless of data size, RabbitMQ performs much worse than Redis.
The team | Out of the team | |||||||
---|---|---|---|---|---|---|---|---|
128B | 512B | 1K | 10K | 128B | 512B | 1K | 10K | |
Redis | 16088 | 15961 | 17094 | 25 | 15955 | 20449 | 18098 | 9355 |
RabbitMQ | 10627 | 9916 | 9370 | 2366 | 3219 | 3174 | 2982 | 1588 |
4, ZeroMQ
Known as the fastest message queuing system, especially for high-throughput demand scenarios. ZMQ is capable of implementing advanced/complex queues that RabbitMQ is not good at, but developers need to put together multiple technical frameworks themselves and the technical complexity is a challenge to the success of MQ. ZeroMQ has a unique non-middleware mode in that you do not need to install and run a message server or middleware because your application will act as a service. All you need to do is simply reference the ZeroMQ library, which you can install using NuGet, and you can happily send messages between applications. However, ZeroMQ only provides non-persistent queues, meaning that data will be lost if the machine goes down. Among them, Twitter’s Storm uses ZeroMQ as the transmission of data stream.
5, Jafka/Kafka
Kafka is a sub-project under Apache, is a high performance cross-language distributed Publish/Subscribe message queue system, and Jafka is incubated on Kafka, that is, an upgraded version of Kafka. It has the following features: fast persistence, which can persist messages with O(1) overhead; High throughput, in a common server can reach 10W/s throughput rate; Fully distributed system, Broker, Producer and Consumer all automatically support distribution and automatically realize complex balancing. Supporting parallel loading of Hadoop data is a viable solution for logging data and offline analysis systems like Hadoop that require real-time processing limitations. Kafka uses Hadoop’s parallel loading mechanism to unify online and offline message processing, which is also valued by the system studied in this topic. Apache Kafka is a very lightweight message system compared with ActiveMQ. Besides excellent performance, it is also a distributed system that works well.
HornetQ, Apache Qpid, Sparrow, Starling, Kestrel, Beanstalkd, Amazon SQS are not analyzed.