In this book we examined two messaging technologies at a high level in order to better understand their general characteristics. This was by no means a comprehensive list of the pros and cons of each technology, but instead an exercise in understanding how the design choices of each one impact their feature sets, and an introduction into the high-level mechanics of message delivery.
ActiveMQ represents a classic broker-centric design that handles a lot of the complexity of message distribution on behalf of clients. It provides a relatively simple setup that works for a broad range of messaging use cases. In implementing the JMS API, it provides mechanisms such as transactions and message redelivery on failure. ActiveMQ is implemented through a set of Java libraries, and aside from providing a standalone broker distribution, can be embedded within any JVM process, such as an application server or IoT messaging gateway.
Kafka, on the other hand, is a distributed system. It provides a functionally simpler broker that can be horizontally scaled out, giving many orders of magnitude higher throughput. It provides massive performance at the same time as fault tolerance through the use of replication, avoiding the latency cost of synchronously writing each message to disk.
ActiveMQ is a technology that focuses on ephemeral movement of data—once consumed, messages are deleted. When used properly, the amount of storage used is low—queues consumed at the rate of message ...