Is there existing software for a production-ready low-latency distributed log? The idea is to store input messages to services before they are sent to the service itself. When the service starts up, it takes the most recent snapshot of its state and replays the input messages. If the service is deterministic, multiple instances of the service could be run at once. This would give both high-availability, and zero downtime deployments.
There are many logs available, but some are high latency, some are not quite distributed/clusterable, and some are not yet production ready.
Available distributed log software
Kafka
NATS Streaming
TANK
DistributedLog
Pulsar
RocketMQ
Liftbridge
Jocko
LogDevice
Requirements
Message/event persistence (either in memory or also on disk)
Message ordering within a topic/partition
At-least-once-delivery: Message acknowledgements between publisher and server (for publish operations) and between subscriber and server (to confirm message delivery)
Historical message replay by subject: New subscriptions may specify a start position in the stream of messages stored for the subscribed subject's channel.
High availability: Should have multiple clustered nodes, with replication between them
Low latency: If we're going to be waiting until two nodes have received the message before sending it on, then it has to be low latency. Ideally just a few milliseconds, but nothing more than tens of milliseconds. This is the main reason why it seems Kafka is unsuitable for this.
Are there any options I have missed?