Skip to main content

WSO2 MB vs Apache Kafka comparison

When it comes to message broker solutions, those can be categorized into 2 main types
  • Standards based traditional message brokers (e.g. Apache ActiveMQ, RabbitMQ, WSO2 MB, Apache Qpid)
  • Proprietary modern message brokers (e.g. Apache Kafka, Kestrel)
Based on your requirement, you need to select the best category and then go for a specific vendor based on your needs, IT capacity and financial capabilities. In this post, I’m comparing 2 popular message brokers (WSO2 MB and Apache Kafka) from 2 categories. Even though it discusses about 2 specific brokers, you can consider this when comparing these 2 categories of message brokers.




FeatureWSO2 MBApache Kafka
Messaging semanticsRich messaging semantics with features such as
- Transactions
- Persistent/In-memory
Relaxed and proprietary
Supported protocolsJMS 1.0/1.1, AMQP, STOMP, MQTTPropreitary protocol written over TCP
Standard messagingsupports well known standards based messaging
- pub/sub
- request/reply
- point to point
Supports only pub/sub with proprietary protocol
ClusteringIn built clustering without any third party componentsRequires Zoo Keeper to make a cluster
PerformanceConsiderably low due to the standards based messaging semantics and different protocol supportHigher performance due to simpler messaging semantic and proprietary protocol
Deployment complexitySimpler deployment with 2 node cluster which is capable of handling a considerable loadComplex deployment with multiple components deployed in a cluster. Not suitable for moderate messaging requirements
Message flow controlSupported at the MB itself through
- dead letter channels
- QoS
- delivery guarantees
Needs to be done at the client side
Management consoleAvailable with full management capabilities of Queues/Topics and other server runtime monitoringNo native management console
Client supportJava, .Net, C++ and other AMQP clientsClients for Java, C++, Python, Go and others
Compatibilitycompatible with existing messaging systems within the enterprise due to standards based communicationNeed special connectors to be written for existing systems to connect with Kafka
SecuritySecurity can be configured through
- SSL at transport layer
- User based access control for queues
- Role based access control for topics
no SSL support







Based on the above comparison, if you are looking for a high performance, large scale message storage platform which works in isolation without much connectivity to existing systems, you can select Apache Kafka. But your requirements is to build a messaging system which interconnects with existing systems seamlessly and with a moderate performance and easily manageable deployment with rich messaging features, you can select WSO2 MB.
Cheers !!!

Comments

  1. It was really a nice post and i was really impressed by reading this
    Big Data Hadoop Online Training Hyderabad


    ReplyDelete

  2. "Wow, this was actually helpful. That section on workflows vs. projects is a total game-changer—it’s the kind of practical stuff you usually only learn the hard way on the job. Honestly, it's one of the easiest good knowledge of apache-kafka lifecycle guides I’ve come across. Keep it up!"

    ReplyDelete

Post a Comment

Popular posts from this blog

How to protect your APIs with self contained access token (JWT) using WSO2 API Manager and WSO2 Identity Server

In a typical enterprise information system, there is a high chance that people will use different types of systems built by different vendors to implement certain types of functionalities. The APIs might be hosted in an API Manager developed by vendor A and the user management can be implemented using a different vendor (vendor B). In this type of a situation, one system will not be able to directly contact the other system but they want to use both systems in tandem. Self-contained access tokens are used in these types of situations where applications can get the token from one system and use that in another system to access protected resources. In this scenario, the second system does not need to make a contact to the first system over the network to validate the user information since the token is self-contained and it has relevant details about the user. This will improve the token processing time significantly since it completely removes the network interaction. The below fig...

WSO2 ESB creating a response for a "GET" request

When you are creating REST APIs with WSO2 ESB, you may need to send some response message back to the user when something goes wrong. In this kind of scenario, you can create a payload inside the ESB and send it back. For doing this, you can use the below configuration. <api xmlns=" http://ws.apache.org/ ns/synapse " name="LoopBackProxy" context="/loopback">    <resource methods="POST GET">       <inSequence>          <property name="NO_ENTITY_BODY" scope="axis2" action="remove"></property>          <log level="full"></log>          <payloadFactory media-type="xml">             <format>                <m:messageBeforeLoopBack xmlns:m=" http://services...

WSO2 ESB usage of get-property function

What are Properties? WSO2 has a huge set of mediators but property mediator is mostly used mediator for writing any proxy service or API. Property mediator is used to store any value or xml fragment temporarily during life cycle of a thread for any service or API. We can compare “Property” mediator with “Variable” in any other traditional programming languages (Like: C, C++, Java, .Net etc). There are few properties those are used/maintained by ESB itself and on the other hand few properties can be defined by users (programmers). In other words, we can say that properties can be define in below 2 categories: ESB Defined Properties User Defined Properties. These properties can be stored/defined in different scopes, like: Transport Synapse or Default Axis2 Registry System Operation Generally, these properties are read by get-properties() function. This function can be invoked with below 2 variations. get-property(String propertyName) get-property(String scop...