Beanstalkd is a queue and nothing else — no persistence by default, no clustering, no management UI — which makes it about the smallest thing that is genuinely a broker rather than a table.
services:
queue:
image: schickling/beanstalkd
command: ["-b", "/data", "-f", "1000"]
volumes:
- beanstalk:/data
volumes:
beanstalk:
-b turns on the binlog, without which a restart loses every job in the tube; -f sets how often it is fsynced in milliseconds, and the trade between durability and throughput is that one number. For a worker pool of two or three processes this is enough, and the operational surface is a single binary with no configuration file. The moment you want routing, fanout or a dead-letter mechanism, it is the wrong tool and no amount of application code fixes that.