开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC如果里面有异步任务或者定时任务,一样还在执行?

Flink CDC我发现 FlinkJava部署以后 当一个job 自己cancel后,呢个任务其实没有被杀死。如果里面有异步任务或者定时任务,一样还在执行?我在一个人job里 弄了个定时器,每隔一段时间执行一次。后来我把这个任务cancel,看了一下日志,这个定时器竟然还在执行。这个 有什么钩子嘛?可以检测到job已经被我cancel了,然后我自己把定时器删了也可以。

展开
收起
真的很搞笑 2023-09-06 18:57:23 58 0
1 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中,当使用 Flink Java API 部署任务后,如果您取消了一个 job,任务本身并不会立即停止。这是因为 Flink 的取消操作只是发送一个取消信号给任务,而不会强制停止任务的执行。

    这意味着在取消任务后,其中的异步任务或定时任务可能仍然在继续执行,直到它们完成或被显式停止。

    如果您想在取消任务时自动停止定时器或其他异步任务,您可以在任务的 cancel() 方法中添加逻辑来手动停止这些任务。在 cancel() 方法中,您可以通过访问任务上下文或其他相关对象来获取对定时器或异步任务的引用,并调用相应的方法来停止它们的执行。

    以下是一个示例代码片段,演示了如何在任务取消时手动停止定时器:
    ```public class MyJob implements SourceFunction, CheckpointedFunction, ...

    private transient ScheduledExecutorService timer;
    
    @Override
    public void run(SourceContext<String> ctx) {
        timer = Executors.newSingleThreadScheduledExecutor();
    
        // 设置定时任务
        timer.scheduleAtFixedRate(() -> {
            // 执行定时任务的逻辑
        }, initialDelay, period, TimeUnit.MILLISECONDS);
    
        // 其他业务逻辑...
    
        // 在任务取消时停止定时器
        while (running) {
            // 等待任务取消
        }
    
        // 取消定时器
        timer.shutdown();
    }
    
    @Override
    public void cancel() {
        // 设置任务取消标志
        running = false;
    }
    
    // ...
    

    }

    ```

    请注意,示例中的代码片段是一个简化的示例,实际情况下可能需要根据您的具体任务逻辑进行适当的调整。

    2023-09-19 11:52:37
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载