Achieving at-least-once delivery guarantee with MQTT Transmission (Sparkplug B) without MQTT Engine

We are running Ignition 8.3.3 with MQTT Transmission publishing Sparkplug B encoded messages to a HiveMQ broker. On the broker side, a HiveMQ Data Policy deserializes the Sparkplug B protobuf payloads and transforms them into JSON. The resulting JSON messages are then forwarded to Azure Event Hubs via the HiveMQ Enterprise Kafka Extension. There is no MQTT Engine or Sparkplug Primary Host Application in this architecture.

On the Transmission side, we have a History Store configured and enabled on the transmitter to buffer data during broker connectivity loss. However, since the Sparkplug B specification defines QoS 0 for NDATA/DDATA messages, there is no protocol-level delivery acknowledgment from the broker, leaving a potential data loss window during transient TCP failures where Transmission considers a message delivered but the broker has not received it.

Is there a supported configuration in MQTT Transmission to publish Sparkplug B data messages at QoS 1, or is QoS 0 strictly mandated by the specification for NDATA/DDATA?

What are the alternatives to tackle this situation?

The Sparkplug specification requires DATA messages be published at QoS 0. However, the Transmission History Store will work as intended when a connection is lost from the MQTT server/broker and you can enable the “Rolling Buffer” in the MQTT Transmission History Store configuration to cover the scenario where messages have been published by Transmission but failed to make it to the broker due to transient TCP failures.