Exploring Azure Event Grid - Are Service Bus Topics Dead?
TL;DR - In this 3rd and last article on Azure Event Grid, we'll have a look at how this relates to Azure Service Bus Topics and why they are still relevant. Read my introduction on Azure Event Grid here.
No, Service Bus Topic are not dead.
I don't think that Azure Service Bus Topics are going away any time soon. Although Azure Event Grid also leverage publish-subscribe capabilities and use the concept of "Topics", they are not the same.
Here is why:
-
Message Exchange Patterns - Azure Event Grid uses a push-push-model where all the events are pushed directly to the Event Handlers. Azure Service Bus Topics, however, are using a pulling model where the Message Processor will actively check the topic subscription if there are any new messages available. This means that the Message Processor is capable of controlling when and how many message it wants to process and thus control the load it will handle. With Azure Event Grid you don't, so make sure your handlers can process this.
-
Differences in velocity - Since Azure Service Bus Topics are using a pull-mechanism the Message Processor is in charge of getting new messages. The advantage here is that it has full control on the pace it is processing messages. That said, if they can't keep up with the ingestion throughput the messages will only pile up until the size of the topic has been met. With Azure Event Grid however you are no longer in charge since they will push your messages to the Event Handlers. This means that your Event Handler needs to be capable to handle the load and provide some throttling to protect itself from crashing, Event Grid will retry the delivery anyway
-
Throughput - Azure Event Grid promises 10 million events per second (*), per region. This is far more than what Azure Service Bus can handle, unless you distribute it across multiple Service Bus Namespaces for which they have a soft limit of 100 per subscription, that's not even close.
-
Message & Event Sizes - Azure Service Bus supports message sizes up to 256 kb for Basic/Standard or even 1MB for Premium. The event limit for Azure Event Grid is 64 kb which is a lot less than Service Bus Basic. Of course, there is still the Claims Check pattern to bypass these limitations.
In summary, I think they have their own use-cases where I see Service Bus Topics more for a fan-out transactional processing, but with a smaller throughput where Azure Event Grid is more used for as an eventing infrastructure that provides higher velocity for near-real-time processing.
As with every technology you need to compare both and see which one is best for your scenario.
Thanks for reading,
Tom Kerkhove.
(*) Update 070/07/2020 - Event Grid has defined per-instance service limitations which are lower. For most recent service limitations we recommend reading "Azure subscription and service limits, quotas, and constraints"