Redis Stream → LLM Enrich → Kafka hero
Strongly Certified · Streaming Workflow

Redis Stream → LLM Enrich → Kafka

Redis events in, structured LLM enrichment out, republish to Kafka.

Consumes events from a Redis stream (XREADGROUP with consumer group; at-least-once via XACK), enriches each event with a small LLM that emits a 4-field classification + suggested-action JSON, validates the shape against a strict JSON schema, then publishes the enriched event to a Kafka topic for downstream consumers. Pairs streaming-redis-source 1.0.0 with streaming-kafka-producer 1.0.0.

≤3s
Redis-XADD to Kafka publish (p95)
XREADGROUP
At-least-once via XACK
Schema-validated
JSON-schema strict enrichment

The voice loop, end-to-end.

No black box. Each step is a typed-frame node you can edit, monitor, and replace.

01

An upstream service writes an event to Redis via XADD. streaming-redis-source consumes via XREADGROUP with a configured consumer group.

02

streaming-prompt-template renders an enrichment prompt with the raw event JSON. The LLM emits a 4-field enrichment object: event_class enum / severity 0-9 / summary / suggested_action.

03

streaming-structured-output validates the enrichment against a strict JSON schema. On validation failure, emit_recovery_on_failure produces a fallback recovery payload that still publishes.

04

streaming-kafka-producer publishes the enriched event to a downstream Kafka topic with gzip compression and acks=all. session_id is the partition key for per-session ordering.

Built for production. Day Two-ready.

Streaming graph contract, observability, and cost discipline come standard. The agent ships with a full test suite that runs in CI on every node version bump.

Two new primitives paired

First template to use both streaming-redis-source 1.0.0 (input via XREADGROUP) and streaming-kafka-producer 1.0.0 (output with gzip + acks=all). Operators learn the source/sink pair pattern in one workflow.

Source 1.0.0Sink 1.0.0End-to-end

At-least-once

XACK on every successful round-trip and incrementally during long sessions. A pod crash mid-batch redelivers un-ACKed entries via the consumer group's PEL after the visibility timeout. Idempotency-key downstream on redis_id.

XACKPEL replayCrash-safe

Strict schema enrichment

streaming-structured-output validates the LLM emit against a JSON schema with additionalProperties=false. event_class is an enum, severity is an integer 0-9. Bad emits emit a fallback recovery instead of poisoning the downstream topic.

Strict schemaadditionalProperties=falseRecovery emit

Distinct from alert shape

Every input event flows through (no conditional drop) — this is event ENRICHMENT, not alert filtering. Downstream consumers subscribe to events.enriched for analytics, fan-out routers, vector indexers.

Enrichment, not alertingUniversal flowAnalytics-ready

Three-port failure

Redis source / Kafka producer / structured-output all have independent error_out ports that fan into one failure_webhook. The on-call sees all three failure surfaces on one channel without operator effort.

Three sourcesOne channelFan-in

Live span tree

Each enrichment writes a span tagged with redis_mode / redis_key / redis_id and the published Kafka topic. Filter the canvas overlay by redis_id to debug per-event enrichment behaviour.

ADR-S14Per-eventEnd-to-end trace

Real services. Your stack.

Every dependency is a registered Strongly service or a model you control. Swap any one of them in the install wizard. The graph stays intact.

Source
streaming-redis-source 1.0.0 — XREADGROUP / consumer group
Sink
streaming-kafka-producer 1.0.0 — gzip + acks=all + session_id partition key
LLM model
gpt-4o-mini default — emits 4-field enrichment JSON
Validator
streaming-structured-output — strict JSON schema, recovery on failure

Tune it. Don't fork it.

The marketplace template is the graph. Every customisation below is a config change or a single-node addition - never a rewrite.

Per-class fan-out

Replace the single Kafka producer with a streaming-conditional matching event_class and one streaming-kafka-producer per port (per-class topic).

Hybrid alert + enrich

Keep the enrich pipeline AND add a parallel branch: streaming-conditional matching severity ≥ 7 drops to a streaming-webhook-response for immediate alerting.

Schema-driven routing

Extend the LLM schema with a recommended_consumer enum field; use streaming-llm-router predicating on that to deliver per-consumer tailored payloads.

Cost-bounded batching

Wire streaming-aggregator between Redis and the prompt (max 20 events / 10s window). Change the prompt to enrich a batch in one LLM call.

Vector embedding

Replace LLM classification with streaming-embed to attach a dense embedding to every event for downstream similarity search.

Production. Not pilots.

We don't leave until it runs. Talk to a forward-deployed engineer about deploying Redis Stream → LLM Enrich → Kafka into your environment with your STT, your LLM, your TTS, your data.

Schedule a Demo