apache/seatunnel · warning

Failed to broadcast FlushSignal from task {}

Error message

Failed to broadcast FlushSignal from task {}

What it means

SourceFlowLifeCycle.onTimerTick periodically broadcasts a FlushSignal via collector.sendFlushSignal. If that call throws, this warning is logged (non-fatal) naming the current task. The flush of source-side buffered data for this tick is skipped; checkpointing may be delayed or marked incomplete for that interval.

Source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/task/flow/SourceFlowLifeCycle.java:203

        register();
    }

    /**
     * Timer callback invoked by the {@code timerFlushWorker} thread pool.
     *
     * <p>Acquires the {@code checkpointLock} (the same monitor that {@link #triggerBarrier} uses)
     * so that flush signals and barriers are strictly serialized — a FlushSignal either completes
     * entirely before a Barrier or queues behind it, never crossing it.
     */
    private void onTimerTick() {
        if (prepareClose) {
            return;
        }
        try {
            collector.sendFlushSignal(
                    currentTaskLocation.getJobId(), currentTaskLocation.getTaskID());
        } catch (Exception e) {
            log.warn("Failed to broadcast FlushSignal from task {}", currentTaskLocation, e);
        }
    }

    private Address getEnumeratorTaskAddress() throws ExecutionException, InterruptedException {
        return (Address)
                runningTask
                        .getExecutionContext()
                        .sendToMaster(new GetTaskGroupAddressOperation(enumeratorTaskLocation))
                        .get();
    }

    @Override
    public void close() throws IOException {
        try {
            context.getEventListener().onEvent(new ReaderCloseEvent());
            reader.close();
            super.close();
        } finally {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Usually ignorable if it appears only during job shutdown/cancel; confirm job completed or was cancelled as expected.
  2. If it appears during normal running, check task/worker health and engine logs around the timestamp for transport or operation failures.
  3. Retry the job if checkpoint data loss was observed; verify checkpoint interval vs flush interval alignment.
  4. Upgrade if a known race between timer ticks and task teardown is fixed in a later SeaTunnel version.

Example fix

// before: flush timer keeps firing during task teardown
// (race logs this warning at cancel)
// after: cancel the flush timer before closing the task
sourceFlowLifeCycle.closeFlushTimer(); // ensure timer stopped before cancel completes
Defensive patterns

Strategy: retry

Try / catch

// engine logs and continues; no caller-side hook
if (logContains("Failed to broadcast FlushSignal")) {
    verifyJobCompletionOrRestart();
}

Prevention

When it happens

Trigger: The periodic flush timer fires and sendFlushSignal(jobId, taskID) throws, e.g. because the target operation/transport is unavailable, the task is shutting down, or an internal messaging error occurs.

Common situations: Tasks being cancelled/restarted while the timer tick fires concurrently; cluster node shutdown mid-flush; transient engine-internal communication failures between task and collector.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/680355dcc5b18d94. Report an issue: GitHub.