MQTT moves bytes. Sparkplug B makes them mean something.
Sparkplug B is an open specification, maintained at the Eclipse Foundation, that defines how industrial devices should use MQTT: a fixed topic namespace, a compact Protocol Buffers payload encoding, and a session-state model built on birth and death certificates. It makes MQTT data self-describing and tells every consumer which publishers are online and which values are current.
A fixed topic form, and messages that carry the protocol's logic.
Strengths
Interoperability between compliant tools without custom parsing, low bandwidth on constrained networks, explicit types and units, and trustworthy online/stale semantics out of the box.
Limits
The topic namespace mirrors the network — groups, edge nodes, devices — not the business. Mapping into an ISA-95-shaped UNS is still your modeling work.
Binary
Payloads are Protobuf, not JSON. Generic MQTT consumers cannot read Sparkplug topics without a decoder — by design, not by accident.
Typical traps in real deployments.
- Equating Sparkplug B with a UNS. It standardizes payloads and session state; it does not design your business hierarchy or governance.
- Pointing plain MQTT/JSON consumers at Sparkplug topics and wondering why they show garbage.
- Ignoring alias handling and rebirth: a consumer joining mid-stream must request a rebirth to learn the metric map, not guess.
- Choosing group and node IDs casually — they are the top of your namespace, and renaming them later breaks every subscriber.
Where Sparkplug B sits in the stack.
Sparkplug B is the payload-and-state layer many UNS deployments run on, and a clean fit with the Minimum Technical Requirements — edge driven, report by exception, open, lightweight. ISA-95 contributes the business hierarchy its device-centric topics lack, contextualization carries on where its units and properties stop, and reliable, freshness-aware data is one of the concrete markers AI readiness work checks. You can lint your own payloads and topics with the free Sparkplug B linter.