ktg-plugin-marketplace/plugins/ms-ai-architect/skills/ms-ai-engineering/references/data-engineering/real-time-streaming-ai.md
Kjell Tore Guttormsen 9ea5a2e6c6 chore(privacy): scrub real-org references from plugin internals (phase 2)
Same bulk replacement applied to plugin-internal KB, examples, fixtures,
tests, and docs. Real organization names, persona names, internal system
identifiers, and domain-specific terms replaced with fictional generic
public-sector entity (DDT) and generic terminology.

Scope:
- okr/ — examples, governance, framework, integrations, sources
- ms-ai-architect/ — KB references (engineering, governance, security,
  infrastructure, advisor), tests/fixtures, agents, docs
- linkedin-thought-leadership/ — voice samples, network-builder,
  examples (genericized identifying headlines to "[your organization]")
- llm-security/ — research notes, scan report

Manual genericization beyond bulk replace:
- okr SKILL.md "Primary user / Domain" — generic Norwegian public sector
- linkedin-voice SKILL.md headline placeholder
- network-builder.md headline placeholder
- high-engagement-posts.md voice sample employer line + hashtag

Phase 3 (factual-attribution review) remains: a few KB files attribute
publicly known transport-sector docs/datasets (e.g. håndbok V440, NVDB)
to the fictional DDT after bulk replace. Needs manual semantic review
to either remove or restore correct citation without re-introducing
affiliation references.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 04:28:15 +02:00

15 KiB

Real-Time Streaming for AI Applications

Last updated: 2026-02 Status: GA Category: Data Engineering for AI


Introduksjon

Sanntidsdatastrømming er en fundamental byggestein for AI-applikasjoner som krever umiddelbar respons på hendelser -- fra IoT-sensorer og transaksjoner til brukeratferd og systemmetrikker. Microsoft Fabric Real-Time Intelligence kombinert med Azure Event Hubs og Apache Kafka gir en komplett plattform for inntak, transformasjon og analyse av strømmedata som mater AI-modeller med oppdatert informasjon.

For norsk offentlig sektor er sanntidsarkitektur særlig relevant for trafikkmonitorering (Direktoratet for digital tjenesteutvikling), helseovervåking, energistyring og beredskapsrespons. Evnen til å oppdage avvik i sanntid og utløse automatiserte handlinger basert på AI-prediksjoner kan redusere responstider dramatisk og forbedre tjenestekvalitet.

Denne referansen dekker arkitekturmønstre for å integrere Event Hubs, Kafka og Fabric Eventstream med AI-applikasjoner, inkludert Spark Structured Streaming, KQL Database for tidsserieanalyse, og mønster for hendelsesfiltrering og avledede strømmer.


Eventstream Connectors and Topologies

Fabric Eventstream Overview

Microsoft Fabric Eventstream er en fullstendig administrert hendelsesinntak- og strømmetjeneste som muliggjør sanntidsdatabehandling uten kode.

Kilde-type Eksempler Autentisering
Microsoft-kilder Azure Event Hubs, Azure IoT Hub, Azure Service Bus Managed identity, SAS
Database CDC Azure SQL DB, PostgreSQL, MySQL, Cosmos DB, SQL MI Connection string
Kafka-kilder Confluent Cloud, Apache Kafka, Amazon MSK SASL/PLAIN, OAuth
Andre skyer Amazon Kinesis, Google Cloud Pub/Sub IAM credentials
Fabric-hendelser Workspace item events, Blob Storage events Built-in

Topology Patterns

                    ┌──────────────┐
   IoT Hub ────────>│              │────> KQL Database (tidsserier)
                    │              │
   Event Hubs ─────>│  Eventstream │────> Lakehouse (Delta tables)
                    │              │
   Kafka ──────────>│  (Filter +   │────> Spark Notebook (ML)
                    │   Transform) │
   CDC (SQL) ──────>│              │────> Derived Stream (Real-Time Hub)
                    └──────────────┘

Konfigurere Event Hubs som kilde

# Eventstream configuration via Fabric UI or API
# Event Hub connection parameters
event_hub_config = {
    "namespace": "my-eventhub-ns.servicebus.windows.net",
    "event_hub": "ai-telemetry",
    "consumer_group": "$Default",
    "data_format": "Json",
    "authentication": "SharedAccessKey"
}

Destinasjoner

Eventstream støtter flere destinasjoner parallelt:

Destinasjon Bruksområde Latens
Eventhouse (KQL Database) Tidsserieanalyse, ad-hoc-spørringer Sekunder
Lakehouse Historisk analyse, Delta Lake lagring Minutter
Spark Notebook Sanntids ML-inferens Sekunder
Derived Stream Viderefordeling til andre forbrukere Sub-sekund
Fabric Activator Automatiserte handlinger og varsler Sekunder
Custom Endpoint Ekstern applikasjonsintegrasjon Variabel

Structured Streaming with Spark

Spark Structured Streaming i Fabric

Fabric Notebooks kan lese direkte fra Eventstream via Spark Structured Streaming uten manuell tilkoblingskonfigurasjon.

# Les strømmende data fra Eventstream i Fabric Notebook
# Parameter-verdier settes automatisk via "Read with Spark" i UI

df_stream = (
    spark.readStream
    .format("fabricEventStream")
    .option("eventstream.itemid", "<auto-populated>")
    .option("eventstream.datasourceid", "<auto-populated>")
    .load()
)

# Vis skjema
df_stream.printSchema()

Transformasjoner på strømmende data

from pyspark.sql.functions import col, window, avg, count, from_json
from pyspark.sql.types import StructType, StringType, DoubleType, TimestampType

# Definer skjema for innkommende JSON
schema = StructType() \
    .add("sensorId", StringType()) \
    .add("temperature", DoubleType()) \
    .add("humidity", DoubleType()) \
    .add("timestamp", TimestampType())

# Parse JSON og beregn vindusaggregater
parsed_stream = (
    df_stream
    .select(from_json(col("body").cast("string"), schema).alias("data"))
    .select("data.*")
)

# 5-minutters glidende vindu med aggregater
windowed_aggregates = (
    parsed_stream
    .withWatermark("timestamp", "10 minutes")
    .groupBy(
        window(col("timestamp"), "5 minutes", "1 minute"),
        col("sensorId")
    )
    .agg(
        avg("temperature").alias("avg_temp"),
        avg("humidity").alias("avg_humidity"),
        count("*").alias("event_count")
    )
)

Skrive til Delta Lake (Lakehouse)

# Skriv strømmede data til Delta-tabell med optimalisering
query = (
    windowed_aggregates
    .writeStream
    .format("delta")
    .outputMode("append")
    .option("checkpointLocation", "Tables/_checkpoints/sensor_agg")
    .trigger(processingTime="1 minute")  # Batch hvert minutt
    .toTable("sensor_aggregates")
)

query.awaitTermination()

Optimalisering av strømmeskrivinger

Teknikk Beskrivelse Anbefalt bruk
Trigger interval processingTime="1 minute" batches hendelser Reduserer små filer
Optimized Write spark.databricks.delta.optimizeWrite.enabled Automatisk filstørrelsesoptimalisering
Partitioning partitionBy("date", "sensorId") Når filtrering på partisjonsnøkler er vanlig
Repartition repartition(48) før skriving Parallellisering over CPU-kjerner
Coalesce coalesce(4) for lav throughput Unngår for mange små filer

KQL Database for Time-Series Analytics

Eventhouse og KQL Database

KQL Database i Fabric er optimalisert for tidsseriedata og gir sub-sekund spørringsrespons over milliarder av rader.

// Tidsserieanalyse med KQL
// Beregn glidende gjennomsnitt for sensortemperatur
SensorData
| where Timestamp > ago(24h)
| summarize AvgTemp = avg(Temperature) by bin(Timestamp, 5m), SensorId
| render timechart
// Anomalideteksjon med innebygd series_decompose_anomalies
let min_t = ago(7d);
let max_t = now();
SensorData
| make-series AvgTemp = avg(Temperature)
    on Timestamp from min_t to max_t step 1h
    by SensorId
| extend (anomalies, score, baseline) =
    series_decompose_anomalies(AvgTemp, 1.5, -1, 'linefit')
| mv-expand Timestamp to typeof(datetime),
    AvgTemp to typeof(double),
    anomalies to typeof(int),
    score to typeof(double),
    baseline to typeof(double)
| where anomalies != 0

Sammenligning: KQL Database vs Lakehouse for strømmedata

Egenskap KQL Database Lakehouse (Delta)
Optimal for Tidsserier, logdata, IoT Strukturert analyse, ML-trening
Spørrespråk KQL SQL, PySpark
Latens Sub-sekund Sekunder til minutter
Retensjon Konfigurerbar policy Ubegrenset (manuell VACUUM)
Innebygd ML Anomalideteksjon, forecasting Via notebooks
Format Proprietært (optimalisert) Delta Lake (åpent)
One Logical Copy Ja, til OneLake Native

Event Filtering and Derived Streams

Filtrering i Eventstream

Eventstream støtter no-code transformasjoner direkte i strømmen:

  • Filter: Fjern hendelser basert på betingelser
  • Manage Fields: Velg, omdøp, fjern felt
  • Group By: Aggreger over tidsvindu
  • Union: Kombiner flere strømmer
  • Expand: Flatten nestede strukturer

Derived Streams (avledede strømmer)

Eventstream (rå data)
    │
    ├── Filter: temperature > 50 ──> Derived Stream: "high-temp-alerts"
    │                                      │
    │                                      ├──> Activator (varsling)
    │                                      └──> KQL Database
    │
    ├── Group By: 5min avg ────────> Derived Stream: "sensor-aggregates"
    │                                      │
    │                                      └──> Lakehouse
    │
    └── All events ────────────────> KQL Database (rå logging)

Content-Based Routing

# Pseudo-kode for content-based routing via Spark
from pyspark.sql.functions import col

# Les fra Eventstream
raw_stream = spark.readStream.format("fabricEventStream").load()

# Route basert på hendelsestype
critical_events = raw_stream.filter(col("severity") == "CRITICAL")
info_events = raw_stream.filter(col("severity") == "INFO")

# Skriv til forskjellige destinasjoner
critical_query = (
    critical_events.writeStream
    .format("delta")
    .toTable("critical_alerts")
)

info_query = (
    info_events.writeStream
    .format("delta")
    .toTable("info_logs")
)

Streaming SLAs and Backpressure Handling

SLA-dimensjoner for strømmesystemer

Dimensjon Mål Metric
End-to-end latens < 5 sekunder for varsler P99 latens
Throughput Minimum events/sek som må håndteres Events per second
Data completeness Ingen tapte hendelser Missing event rate
Processing guarantee At-least-once eller exactly-once Delivery semantics
Recovery time Tid fra feil til normal drift RTO

Backpressure-strategier

# Spark Structured Streaming med rate limiting
query = (
    df_stream
    .writeStream
    .format("delta")
    .option("maxOffsetsPerTrigger", 10000)  # Begrens per batch
    .trigger(processingTime="30 seconds")
    .toTable("processed_events")
)

Event Hubs Partisjonering for skalering

# Event Hubs partisjonskonfigurasjon
# Anbefalt: 4-32 partisjoner avhengig av throughput
# Hver partisjon støtter opptil 1 MB/s inntak, 2 MB/s uttak

# Fabric Eventstream håndterer automatisk partisjonskonsumering
# For manuell Kafka-tilgang:
kafka_config = {
    "kafka.bootstrap.servers": "eventstream-xxx.servicebus.windows.net:9093",
    "subscribe": "es_topic",
    "kafka.sasl.mechanism": "PLAIN",
    "kafka.security.protocol": "SASL_SSL",
    "startingOffsets": "latest",
    "maxOffsetsPerTrigger": 50000
}

df = spark.readStream.format("kafka").options(**kafka_config).load()

Retry Policy for Spark Job Definitions

For produksjonsmiljøer anbefales Spark Job Definitions over Notebooks:

Parameter Anbefalt verdi Begrunnelse
Retry enabled Ja Automatisk gjenstart ved feil
Max retries Ubegrenset For kontinuerlige strømmejobber
Retry interval 60 sekunder Unngå storm of retries
Checkpoint Alltid konfigurert Gjenoppta fra siste posisjon

Monitoring

Spark Structured Streaming UI gir innebygde metrikker:

  • Input Rate (hendelser/sekund)
  • Process Rate (hendelser/sekund)
  • Batch Duration (ms)
  • Input Rows per batch
  • Operation Duration breakdown

Arkitekturmonstre for AI med sanntidsdata

Lambda Architecture (hybrid batch + streaming)

                    ┌───────────────────┐
                    │   Event Hubs /    │
                    │   Kafka Source     │
                    └─────┬────┬────────┘
                          │    │
              ┌───────────┘    └──────────────┐
              │                               │
     ┌────────▼────────┐            ┌─────────▼──────────┐
     │  Speed Layer     │            │  Batch Layer        │
     │  (Eventstream    │            │  (Data Factory +    │
     │   + KQL DB)      │            │   Lakehouse)        │
     └────────┬─────────┘            └─────────┬──────────┘
              │                               │
     ┌────────▼───────────────────────────────▼──────────┐
     │              Serving Layer                         │
     │    (Power BI, AI Models, REST APIs)               │
     └───────────────────────────────────────────────────┘

Kappa Architecture (rent strømmende)

Forenklet arkitektur der all data behandles som strømmer:

Event Source ──> Eventstream ──> Spark Structured Streaming
                                       │
                                       ├──> Delta Table (append-only)
                                       ├──> ML Inference (real-time)
                                       └──> KQL Database (analytics)

Referanser


For Cosmo

  • Bruk denne referansen når brukeren trenger sanntidsdatabehandling for AI-modeller, IoT-integrasjon, eller hendelsesdrevet arkitektur på Microsoft Fabric.
  • Anbefal Eventstream + KQL Database for tidsserieanalyse og anomalideteksjon med sub-sekund latens, og Eventstream + Lakehouse for historisk ML-trening.
  • For norsk offentlig sektor: Fremhev at Fabric Eventstream kjorer som SaaS i europeisk region (Norway East/West Europe), noe som forenkler personvernhensyn sammenlignet med selvhostede Kafka-clustere.
  • Bruk Spark Job Definitions (ikke Notebooks) i produksjon for strømmejobber, med retry-policy aktivert for høy tilgjengelighet.
  • Anbefal Derived Streams for å dele sanntidsdata mellom team uten å duplisere infrastruktur -- en enkelt Eventstream kan mate flere destinasjoner med forskjellige transformasjoner.