Decision Guide
Microsoft Fabric Real-Time Intelligence offers multiple ways to detect conditions, move data, and trigger responses. Start with what your existing implementation already does, then decide whether you also need a shared event contract. These capabilities can work together rather than replace one another.
Capabilities at a glance
| Capability | What it is | Best for |
|---|---|---|
| Business Events | Schema-defined signals published by Fabric workloads to Real-Time Hub | Discrete, meaningful occurrences that need to reach one or more consumers independently |
| Eventstream | High-throughput streaming pipeline for continuous data | IoT telemetry, clickstreams, logs, and any high-volume continuous data |
| Activator | Rules engine that monitors data and triggers actions | Reacting to conditions in streams or Business Events without writing code |
| Direct API call | HTTP call made from a Notebook or User Data Function to an external service | When you need a synchronous response from a service outside Fabric |
Should I use Business Events?
%%{init: {"themeCSS": "\nsvg { max-width: none !important; }\n.nodeLabel, .edgeLabel, .cluster-label { font-size: 14px !important; }\n.edgeLabel, .edgeLabel p, .labelBkg { background: transparent !important; }\n.edgeLabel rect, .labelBkg { fill: transparent !important; }\n.nodeLabel, .edgeLabel, .cluster-label { color: var(--md-mermaid-label-fg-color); }\n.cluster-label span, .cluster-label p { color: var(--md-mermaid-label-fg-color) !important; }\n.cluster rect { fill: transparent; stroke: var(--md-mermaid-node-fg-color); }\n.node rect, .node circle, .node ellipse, .node polygon, .node path {\n fill: var(--md-mermaid-node-bg-color);\n stroke: var(--md-mermaid-node-fg-color);\n}\n.flowchart-link { stroke: var(--md-mermaid-edge-color); }\nmarker path { fill: var(--md-mermaid-edge-color); }\n", "themeVariables": {"fontFamily": "var(--md-text-font-family)", "fontSize": "14px"}, "flowchart": {"useMaxWidth": false, "htmlLabels": true, "diagramPadding": 16, "nodeSpacing": 32, "rankSpacing": 72, "padding": 8, "subGraphTitleMargin": {"top": 8, "bottom": 64}}}}%%
flowchart TB
A["<b>I need to signal</b> that<br/>something happened"]
B{"Is it a continuous<br/>stream of data?"}
Z1["<b>Use Eventstream</b>"]
C{"Do other workloads<br/>need to act on this?"}
E["<b>Use Business Events</b> ✅"]
Z2["<b>Make a direct API call</b><br/>from a Notebook or UDF"]
A --> B
B -->|"Yes: high-volume, ongoing"| Z1
B -->|"No: a discrete condition occurred"| C
C -->|"Yes"| E
C -->|"No: I need an immediate<br/>response to continue"| Z2When to use each option in Fabric
Use Business Events when:
- A Notebook finishes a transformation and Activator or Eventhouse need to react
- A threshold condition is detected and multiple consumers need to be notified independently
- You want to add a new consumer without modifying the publisher
- Multiple teams need a common representation of the same detected business condition
- You need an explicit schema contract for the data the event carries
Use Eventstream when:
- You are ingesting continuous data from IoT sensors, event producers, or external systems
- You need to process or route high-volume data streams in real time
- You need to process raw records before deciding which business conditions matter
Eventstream can also publish a Business Event when its processing detects a meaningful condition. The stream carries the underlying records; the Business Event represents the finding that other teams need.
Use Activator directly when:
- You want to monitor an existing Eventstream or Eventhouse table for conditions
- You need to trigger alerts or actions without publishing an explicit event
- The logic lives entirely within Activator and no other consumer needs the signal
Make a direct API call when:
- You are in a Notebook or User Data Function and need a synchronous response from an external service
- The call is to a system outside Fabric (a REST API, a database, an external platform)
- You need the result immediately to continue execution in the same workload
What are you building?
Ask a question, share your scenario, or help shape the next developer guide.
Join the conversation on Reddit →