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 / values | tbmq/ in the parent repo |
| State store | redis-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).preStophook 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
| Symptom | First check |
|---|---|
| Temple Archives losing subscriptions | redis-cluster — check nodes.conf sizes on each pod |
| HoloNet shows no live topics | Broker reachability from the HoloNet embed's namespace |
| Slow MQTT publish ack | redis-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