diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java index 13a86f5d173d7f..484fdc657fb214 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java @@ -484,7 +484,7 @@ public long getAvailableBeForTask(long jobId, long previousBeId) throws LoadExce try { Map beIdToConcurrentTasks = getBeCurrentTasksNumMap(); - // 1. Find if the given BE id has available slots + // 1. Find if the given BE id has more than half of available slots if (previousBeId != -1L && availableBeIds.contains(previousBeId)) { // get the previousBackend info Backend previousBackend = Env.getCurrentSystemInfo().getBackend(previousBeId); @@ -499,7 +499,7 @@ public long getAvailableBeForTask(long jobId, long previousBeId) throws LoadExce } else { idleTaskNum = beIdToMaxConcurrentTasks.get(previousBeId); } - if (idleTaskNum > 0) { + if (idleTaskNum > (Config.max_routine_load_task_num_per_be >> 1)) { return previousBeId; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java index a3e20b46bdc6ce..18b7c5c9d682b6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java @@ -299,7 +299,8 @@ private void submitTask(long beId, TRoutineLoadTask tTask) throws LoadException } // try to allocate a task to BE which has idle slot. - // 1. First is to check if the previous allocated BE is available. If yes, allocate task to previous BE. + // 1. First is to check if the previous allocated BE has more than half of available slots. + // If yes, allocate task to previous BE. // 2. If not, try to find a better one with most idle slots. // return true if allocate successfully. return false if failed. // throw exception if unrecoverable errors happen.