You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »


Discussion threadhere (thread)
Vote threadhere ()
JIRAhere (FLINK-21883)
Release<Flink Version>

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

In the context of reactive mode, we would like to introduce a cooldown period during which no further scaling actions are performed after a scaling action. Indeed, we would like to avoid too frequent scaling operations either in scaling up or in scaling down.

Public Interfaces

This FLIP adds 2 new user configurations:

  • jobmanager.adaptive-scheduler.scaling-interval.min allowing the user to configure the minimum time between 2 scaling operations
  • jobmanager.adaptive-scheduler.scaling-interval.max optional parameter allowing the user to configure the time after which a scaling operation is triggered regardless if the requirements (AdaptiveScheduler#shouldRescale()) are met . I f not set, there will be no forcing of the scaling.

Proposed Changes

Important points are these ones:

  • when new slots are available, Flink should rescale immediately only if last rescale was done more than scaling-interval.min ago otherwise it should schedule a rescale at (last-rescale + scaling-interval.min) time. 
    • if minimum scaling requirements are met (AdaptiveScheduler#shouldRescale), the job is restarted with new parallelism (as before)
    • if minimum scaling requirements are not met but last rescale was done more than scaling-interval.max ago, a rescale is forced.
  • when slots are lost (most of the time after a  TaskManager failure), there will be no change compared to the current behavior:
    1. the pipeline transitions to Restarting state (cf FLIP-160)
    2. then it transitions to Waiting for Resources state (cf FLIP-160) in which the pipeline will not be rescaled before stable resources timeout. This will protect against subsequent scaling operations (slot losses due to more TaskManager failures or slot offerings) during this timeout period (configurable via existing jobmanager.adaptive-scheduler.resource-stabilization-timeout).


The cooldown period will be tied to the Executing state (cf FLIP-160). As a consequence, if the job or the JobManager fail,  the current state of the cooldown period is reset.  

Compatibility, Deprecation, and Migration Plan

Reactive mode and adaptive scheduler are already released but the current behavior has no cooldown period. So the current behavior is equivalent to setting the jobmanager.adaptive-scheduler.scaling-interval.min to 0s with no jobmanager.adaptive-scheduler.scaling-interval.max set. Such default values will have no impact on the users.

But we could also consider that setting a default jobmanager.adaptive-scheduler.scaling-interval.min value to 300s would not really break the user but rather give him a protection against too frequent scale changes.

So this FLIP proposes setting defaults values to jobmanager.adaptive-scheduler.scaling-interval.min = 300s and no jobmanager.adaptive-scheduler.scaling-interval.max (force scaling disabled)

Test Plan

The new cooldown period feature should be covered by comprehensive tests. They should test rescaling in various time conditions:  scaling-interval.min exceeded and not exceeded, scaling-interval.max enabled and disabled, scaling-interval.max exceeded and not exceeded. These tests car be added to existing ExecutingTest.

Rejected Alternatives

rejected the option of adding a queue for scaling requests.

  • No labels