apache/druid · warning

Killing task[%s] as it failed to return start time.

Error message

Killing task[%s] as it failed to return start time.

What it means

In SeekableStreamSupervisor, after collecting results from tasks reporting their start times, any task whose future completed with an error has no valid start time. The supervisor logs a warning and kills that task with a 'Failed to return start time' reason so the task can be relaunched cleanly. This is a supervisor-level recovery action, not necessarily a query failure.

Source

Thrown at indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:3739

        taskData.status = taskStorage.getStatus(taskId).get();
      }
    }

    // update status of pending completion tasks in pendingCompletionTaskGroups
    for (List<TaskGroup> taskGroups : pendingCompletionTaskGroups.values()) {
      for (TaskGroup group : taskGroups) {
        for (Entry<String, TaskData> entry : group.tasks.entrySet()) {
          entry.getValue().status = taskStorage.getStatus(entry.getKey()).get();
        }
      }
    }

    final List<Either<Throwable, Boolean>> results = coalesceAndAwait(futures);
    for (int i = 0; i < results.size(); i++) {
      // Ignore return value; but kill tasks that failed to return anything at all.
      if (results.get(i).isError()) {
        String taskId = futureTaskIds.get(i);
        log.noStackTrace().warn(results.get(i).error(), "Killing task[%s] as it failed to return start time.", taskId);
        killTask(taskId, "Failed to return start time: %s", results.get(i).error().getMessage());
      }
    }
  }

  /**
   * Checks the duration of {@link #activelyReadingTaskGroups}, requests them
   * to checkpoint themselves if they have exceeded the specified run duration
   * or if early stop has been requested. If checkpoint is successful, the
   * {@link #partitionOffsets} are updated and checkpointed tasks are moved to
   * {@link #pendingCompletionTaskGroups}.
   */
  private void checkTaskDuration() throws ExecutionException, InterruptedException
  {
    final List<ListenableFuture<Map<PartitionIdType, SequenceOffsetType>>> futures = new ArrayList<>();
    final List<Integer> futureGroupIds = new ArrayList<>();

    final boolean stopTasksEarly;

View on GitHub (pinned to 9b90983fd2)

Solutions

  1. Inspect the warning's attached exception and the killed task's logs to find the root cause of the task not reporting a start time.
  2. Verify connectivity and credentials to the stream (Kafka brokers / Kinesis endpoint) from the task's middleManager/peons.
  3. Check consumer configuration (bootstrap servers, region, ingestion spec offsets) and task memory settings; tasks will typically be recreated automatically by the supervisor.
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: A Kafka/Kinesis read-only or read-write task's reportStartMetrics/start-time future completes with Either.error, e.g. the task threw while initializing its consumer, crashed before emitting its status, or its HTTP status endpoint returned an error.

Common situations: Tasks fail to start because of broker connectivity issues, expired/invalid credentials, a task container OOM, or deserialization errors in the stream partition records, so they never report a start time.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/662bee9cac43a8b1. Report an issue: GitHub.