Summary
Numaflow autoscaling today is purely reactive, scaling between scale.min and scale.max based on pending messages and processing rate. This proposes cron-schedule-based autoscaling: users define time windows with their own min/max bounds (including 0), and the reactive autoscaler operates within the bounds of the active window.
Use cases
- DLQ draining via fallback sink: Numaflow supports a fallback sink, often pointed at a DLQ. Today, reprocessing DLQ messages requires a separate scheduled job. With cron-based autoscaling, the same MonoVertex/Pipeline can sit at
min: 0 and scale up on a schedule to drain the DLQ, no extra infrastructure.
- Pre-warming: scale up ahead of predictable load spikes instead of paying cold-start lag after pending builds up.
- Cost savings: force lower bounds during known-idle windows (nights/weekends).
Proposed spec (starting point)
Extend the existing Scale struct (applies to both MonoVertex and Pipeline vertices):
scale:
min: 0
max: 50
cron:
timezone: "America/Los_Angeles"
schedules:
- start: "0 2 * * *" # nightly DLQ drain
end: "0 3 * * *"
min: 1
max: 5
Outside any window, base min/max apply; inside a window, its bounds override the base.
Summary
Numaflow autoscaling today is purely reactive, scaling between
scale.minandscale.maxbased on pending messages and processing rate. This proposes cron-schedule-based autoscaling: users define time windows with their ownmin/maxbounds (including 0), and the reactive autoscaler operates within the bounds of the active window.Use cases
min: 0and scale up on a schedule to drain the DLQ, no extra infrastructure.Proposed spec (starting point)
Extend the existing
Scalestruct (applies to both MonoVertex and Pipeline vertices):Outside any window, base
min/maxapply; inside a window, its bounds override the base.