We are facing a critical decision in which we need to choose the right tool for a real time telemetry processing and monitoring system.
The system has two main purposes:
We have two concerns:
In our use-case, most of the data consumers will be web clients in contrast to what we discovered so far -> both RabbitMQ and Kafka are mostly used in cloud based platforms in which most of the data consumers are services and not clients.
Usually data consumers from Kafka or RabbitMQ are load balanced and messaged are not replicated for each client.
.
Thank you :)
Kafka has partitioned topics, so each consumer group consumes messages independently. RabbitMQ has an exchange type called fanout
that is used to deliver messages to all queues on the exchange, so that could be used for a similar purporse.
If you have a large number of clients (hundreds or thousands), I would not use a RabbitMQ fanout exchange. Kafka can scale horizontally and could handle a fairly large number of partitions. For latency purposes, it is generally recommended that you follow the rule of no more than 100 x b x r, where b is the number of brokers in a Kafka cluster and r is the replication factor.
There are other systems designed specifically for high-volume event processing. Have you looked at Event Store, or for cloud-based, Azure Event Hub?
Something to also consider in your technology choice is that Kafka also includes the Kafka Streams API, which lets you do stream processing within your application. It also includes a queryable statestore, which can be used to drive your dashboards.
Consumers in Kafka can opt to receive all messages, with a variety of native client libraries (Java, C/C++, python, Go, etc), and in addition a REST proxy for sending/receiving data from Kafka.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With