I know some people use Akka with Persistence module, but I would welcome other alternatives.
If you're on the JVM then ActiveMQ (and other Java queues) will usually run embedded and have options to use a database for persistence.
- https://nsq.io/
- https://nats.io/Reliable and durable? Emphatically not Redis, and at that point you probably want to just start looking at SQS.
(I've had good luck shipping products as docker-compose files, these days. Even to fairly backwards clients.)
"nsqd is the daemon that receives, queues, and delivers messages to clients."
You can configure Redis for durability. The docs[1] page for persistence has a good examination of the pros and cons.
It's something to be aware of and to have backup plans for, but we've been using Redis as our primary datastores for over a year with only one or two instance failures which were quickly resolved within minutes by failing over to replicas, with no data loss.
It's important to make this distinction because there are commonly-used systems that offer a best-effort style persistence that usually works fine, but explicitly warn developers not to trust it, and developers rarely understand that.
We badly need to get better at distinguishing between true, production-level data integrity and "probably fine".
What other options would you recommend, that can provide at least once delivery and are lighweight enough not to require zookeeper etc?
Here's a good post (and series) about distributed logs and NATS design issues: https://bravenewgeek.com/building-a-distributed-log-from-scr...