Flink重啓策略機制RestartStrategy源碼解讀

版權說明:本專欄是作者在日常工作期間對技術的不斷深入研究後的沉澱,辛苦碼字總結而成。嚴禁轉載,嚴禁作爲商業用途轉發。歡迎同行加入大數據技術羣QQ:427560730

版本號:Flink1.10.0

重啓策略概覽:

public static RestartStrategies.RestartStrategyConfiguration noRestart() {
        return new RestartStrategies.NoRestartStrategyConfiguration();
    }

    public static RestartStrategies.RestartStrategyConfiguration fallBackRestart() {
        return new RestartStrategies.FallbackRestartStrategyConfiguration();
    }

    public static RestartStrategies.RestartStrategyConfiguration fixedDelayRestart(int restartAttempts, long delayBetweenAttempts) {
        return fixedDelayRestart(restartAttempts, Time.of(delayBetweenAttempts, TimeUnit.MILLISECONDS));
    }

    public static RestartStrategies.RestartStrategyConfiguration fixedDelayRestart(int restartAttempts, Time delayInterval) {
        return new RestartStrategies.FixedDelayRestartStrategyConfiguration(restartAttempts, delayInterval);
    }

    public static RestartStrategies.FailureRateRestartStrategyConfiguration failureRateRestart(int failureRate, Time failureInterval, Time delayInterval) {
        return new RestartStrategies.FailureRateRestartStrategyConfiguration(failureRate, failureInterval, delayInterval);
    }

Flink支持多種重啓策略,可以在程序中發生故障時選擇不同的重啓模式進行重啓。常用的重啓策略可以從源碼中看書:

  • noRestart
  • fallBackRestart
  • fixedDelayRestart
  • failureRateRestart

parseConfiguration方法

parseConfiguration方法輸入兩個參數:String類型的restartstrategyKind和ReadableConfig類型的configuration,從源碼中可以看出根據var2=restartstrategyKind.toLowerCase()的hashCode值進行匹配給變量var3進行賦值,這樣可以有效的防止hash衝突的問題。

  • 當restartstrategyKind爲"none",“off”,“disable"時var3等於"0”,“1”,“2”,此時重啓策略爲noRestart。
  • 當restartstrategyKind爲"fixed-delay",“fixeddelay"時,var3等於"3”,“4”。
case 3:
case 4:
     int attempts = (Integer)configuration.get(RestartStrategyOptions.RESTART_STRATEGY_FIXED_DELAY_ATTEMPTS);
     Duration delay = (Duration)configuration.get(RestartStrategyOptions.RESTART_STRATEGY_FIXED_DELAY_DELAY);
     return fixedDelayRestart(attempts, delay.toMillis());

int類型的attempts表示flink作業失敗前的重啓次數。Duration類型的delay表示兩次重啓之間的延遲時間
這裏都調用的是RestartStrategyOptions這個類。

  • 當restartstrategyKind爲"failure-rate",“failurerate"時,var3等於"5”,“6”。
case 5:
case 6:
     int maxFailures = (Integer)configuration.get(RestartStrategyOptions.RESTART_STRATEGY_FAILURE_RATE_MAX_FAILURES_PER_INTERVAL);
     Duration failureRateInterval = (Duration)configuration.get(RestartStrategyOptions.RESTART_STRATEGY_FAILURE_RATE_FAILURE_RATE_INTERVAL);
     Duration failureRateDelay = (Duration)configuration.get(RestartStrategyOptions.RESTART_STRATEGY_FAILURE_RATE_DELAY);
     return failureRateRestart(maxFailures, Time.milliseconds(failureRateInterval.toMillis()), Time.milliseconds(failureRateDelay.toMillis()));

int類型的maxFailures表示flink作業最大失敗次數,failureRateInterval表示flink故障率的時間間隔,failureRateDelay表示兩個重啓之間的延遲時間。

代碼測試

// set up the execution environment
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    // operate in Event-time
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    // create a checkpoint every 5 seconds
    env.enableCheckpointing(5000)
    // try to restart 60 times with 10 seconds delay (10 Minutes)
    env.setRestartStrategy(RestartStrategies.fixedDelayRestart(60, Time.of(10, TimeUnit.SECONDS)))

歡迎加羣,一起學習,羣號:427560730
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章