I don\'t have any previous experience with *MQs and I\'m looking to build knowledge on JMS and message queues in general. That way, I wonder whether I should start with ActiveMQ
Apache Kafka can be characterized as a "Distributed Streaming Platform" where as ActiveMQ, a MOM, (messaging oriented middleware) is a "General Purpose message broker".
Kafka does one thing, and one thing really well: in a publish/subscribe (pub/sub) architecture, messages are written to topics (logs distributed by partition), which consumers then consume from by offset. Kafka, which is built for the cloud, with very high throughput in mind, focuses on this, and these days is the go-to for asynchronous messaging.
ActiveMQ supports both pub/sub and point-to-point semantics. In the latter, a queue handles single messages between a single producer and a specific consumer. This, like pub/sub, is asynchronous, but works slightly differently: if a consumer gets a message on the queue but fails to acknowledge it, the message is then sent to another consumer. ActiveMQ also supports supports several messaging protocols, including AMQP, STOMP, JMS, CAMEL and MQTT.
While Apache Kafka may be the go-to for simple async communication; ActiveMQ seems to be preferred by some for more complicated routing patterns, like enterprise patterns, however, many argue that Kafka is an improvement over ActiveMQ, for reasons such as higher throughput, more efficient management of partitions for logs/topics, and finer-grained ACLs for consumers consuming a topic.