By Colin Sullivan
•
January 27, 2025
Most messaging and streaming technologies have the ability to persist data to replay later or allow for stateless application design (persistence) and to guarantee a quality of service - ensuring message delivery (durability). In most messaging technologies this involves storing data on the file system. Some systems, like Kafka, require at least some level of persistent storage and can be tuned via data retention configuration and replication factor. In other systems, like MQTT, a per message QoS dictates durability from none at all to exactly once delivery where replication options vary by vendor. NATS.io enables data durability and persistence when the JetStream subsystem is used, allowing for both persistence/durability and at-most-once delivery at the same time. Regardless of your messaging system choice, configuration around data storage and replication has implications. Many organizations struggle with finding the best choices for their business and make the mistake of defaulting to what is perceived as the safe bet - a data persistence strategy where data is replicated far beyond what is required. This comes with a cost that should not be ignored.