R2-D2
Dashboard
Node Red
Restreaming
The Force
UpdatedNever
v1.0.0

Overview

Loading…
R2-D2
Dashboard
Node Red
Restreaming
The Force
UpdatedNever
v1.0.0
DDroidspeak / Docs
Operator handbook
Droidspeak
What is R2-D2?
Runtime architectureAuth — Keycloak migration plan
FleetRestreamingGalaxy MapThe RepublicTemple ArchivesSTANAG 4817The Force
Tech StackNext.js 15 + React 19Tailwind v4ZustandTanStack Table + DataViewhls.jsLow-latency playerreagraphoglreact-grid-layoutMonacoScalar API Referencefumadocs
Cluster InfraTrailBaseReductStoreRestreamer (datarhei/core)TBMQKeycloakLonghornkube-vipIngress (Caddy + nginx-ingress + Traefik)Netbird
Operator QA Runbook
Install — RKE2Install — Dokploy
Contributor guideRelease Notes
Cluster Infra

TBMQ

The MQTT broker R2-D2 uses for Temple Archives feed-sync and the HoloNet topic explorer.

TBMQ is the MQTT 3 / 5 broker R2-D2 leans on for two surfaces:

  • Temple Archives feed-sync subscribes to topics, applies persistence rules from archives-config.yaml, and writes through Farsight for long-term query.
  • HoloNet (an embed on The Force) is the live MQTT topic explorer — operators browse current traffic without writing it.

It's the same broker both surfaces talk to, with the same topic map.

TBMQ is pass-through only. Never assume retention or replay. Anything you need to query later must be persisted by a subscriber at ingest time — into TrailBase, ReductStore, or a Postgres tenant — not by asking the broker for old messages. A consumer that joins late sees only messages published after it subscribes.

Where it sits

Chart / valuestbmq/ in the parent repo
State storeredis-cluster for HA
In-cluster URL(broker host configured per environment)

redis-cluster prevention (applied 2026-05-18)

tbmq/values.yaml's redis-cluster.redis block was hardened after a node-rebuild incident:

  • topologySpreadConstraints (maxSkew=1, replaces soft anti-affinity).
  • preStop hook for graceful master failover.
  • An initContainer that wipes 1-byte nodes.conf.

Current layout: 2-1-1-2 redis pods across worker1/2/3/4. Rolling restart is via kubectl apply -f <rendered redis-statefulset> because helm upgrade is blocked by a kafka StatefulSet selector drift.

Corrupted nodes.conf (1-byte file) takes the redis-cluster — and TBMQ — down. Recovery: ephemeral debug container, delete nodes.conf, CLUSTER FORGET + CLUSTER MEET + CLUSTER REPLICATE to restore HA. Also triggered by rke2-agent restart on a host node. The full step-by-step recipe is captured as a project memory note.

Operator quick-reference

SymptomFirst check
Temple Archives losing subscriptionsredis-cluster — check nodes.conf sizes on each pod
HoloNet shows no live topicsBroker reachability from the HoloNet embed's namespace
Slow MQTT publish ackredis-cluster pod placement (uneven shard load)

What TBMQ is not used for

  • Real-time video. That's the Restreamer + HLS path.
  • Dashboard internal events. Internal cross-page state goes through zustand and route handlers, not MQTT.

See also

  • Temple Archives — feed-sync consumer
  • The Force — HoloNet embed

Restreamer (datarhei/core)

The FFmpeg process supervisor that owns live RTSP/RTMP → HLS/RTMP transcoding.

Keycloak

OIDC identity — R2-D2 theme, hardened realm, and the dashboard's auth integration.

On this page

Where it sitsredis-cluster prevention (applied 2026-05-18)Operator quick-referenceWhat TBMQ is not used forSee also