Compute Managed Batch (CMB), a homegrown batch queueing system⟶Kueue, on Kubernetes-native Titus
Netflix built Compute Managed Batch in 2018 because nothing in the Kubernetes ecosystem did what it needed. Seven years later, the open-source Kueue project did all of that and the features CMB never shipped — so Netflix moved millions of batch jobs onto it in a four-week production migration.
Built to do what Kubernetes couldn't in 2018. Seven years later, Kubernetes could — so they gave up the homegrown queue for the open one.
CMB: built in 2018, before Kubernetes had an answer
Netflix built Compute Managed Batch (CMB) in 2018, “before or alongside many of the open-source batch compute offerings available today,” to run workloads to completion on top of Titus, Netflix’s container platform. CMB organized work through a tenant hierarchy — internal tenants for grouping, leaf tenants that actually hold queues — with each tenant assigned weighted, fair-shared capacity split between reserved and shared pools.
The shared pool was fair-shared, but only at admission time: once CMB let a job in, “it ran to completion regardless of shifts in fair-share demand,” because CMB had no preemption at all.
REQUIREMENTS
What the replacement had to do natively
The team wanted the features CMB “offered or strived to offer” — fair sharing, hierarchical tenants, capacity management, priority queuing — plus the ones CMB had never managed to ship natively: preemption, all-or-nothing scheduling, topology-aware scheduling. The migration itself had its own bar: zero lift for CMB’s end users, no regression in container launch rate or overall throughput, and a full replacement of CMB’s queuing and scheduling logic, not a bolt-on.
THE OPTIONS
Kueue, YuniKorn, or Volcano
The team evaluated Kueue against alternatives like YuniKorn and Volcano. Both of those replace pod scheduling by the kube-scheduler outright, and Netflix worried that swapping out Titus’s own scheduling profiles for someone else’s could fragment job placement and hurt efficiency. Kueue took a narrower job: it queues and admits work but leaves pod scheduling to the existing scheduler, letting it integrate with Titus’s scheduling profiles instead of replacing them. It also had adoption momentum, could operate on primitives like v1.Pod and batch/v1.Job with room to grow into RayJob/RayCluster later, and supported the multi-tenant quota management Netflix needed across heterogeneous hardware.
THE CALL
Migrate the engine, keep the front door the same
Netflix built “Netflix Batch” on top of Kueue, running inside each Kueue-enabled Titus cell, with a custom router directing jobs from Titus federation to the right cell. For operators, migrating a tenant became “as simple as clicking a button” in the UI — internal tenants converted to Cohorts, leaf tenants to a ClusterQueue plus LocalQueue, and the old capacity configuration mapped onto resource flavors and nominal quotas. The same button gave instant rollback.
The team migrated its largest, most complex customer first rather than last, to build confidence before touching everyone else — a bet that paid off, since the production migration lasted only 4 weeks. They also had to run Kueue at far higher QPS, burst, and groupKindConcurrency than its defaults to hit Netflix’s throughput needs, something they derisked early with load tests in a development environment built to mimic Titus.
CONSEQUENCES
Millions of jobs later, preemption finally works
Kueue is now fully rolled out in production, managing millions of batch workloads. Netflix has since productionized Preemption-based Fair Sharing: tenants can lend idle reserved capacity to others while keeping their own reservation semantics, and higher-priority workloads can preempt lower-priority ones instead of waiting behind them — the exact capability CMB never had. Compute has seen a “significant increase in average resource utilization” as a result, though the post doesn’t attach a number to it.
When an open-source project catches up to everything your homegrown system does, and adds the features you never got around to building, the harder call is admitting the build was right for its year — not for this one.
The same build-then-retire arc: a homegrown scheduler or pub/sub system built because open source didn't do the job yet, replaced once it did.
A plain-language, AI-drafted and human-edited retelling of the article published on netflixtechblog.com,
reorganized and explained in our own structure and words, with original analysis in the editor's
note above. The facts, numbers, and decisions belong to the original author and are not altered.
For the full depth, read the source.