Skip to content

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"| Z2

When 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 →

Ask in our community

Join developers discussing Microsoft Fabric on Reddit.
Not a member yet? Join r/MicrosoftFabric.