【问题标题】:Flink pipeline without a data sink with checkpointing on没有数据接收器的 Flink 管道,带有检查点
【发布时间】:2021-08-25 20:56:16
【问题描述】:

我正在研究构建一个没有数据接收器的 flink 管道。即我的管道在成功调用数据存储时结束。

在这种情况下,如果我们不使用接收器操作符,检查点将如何工作?

因为检查点基于 pre-checkpoint epoch(所有事件保持在状态或发送到 sinks)和 post-checkpoint epoch 的概念。 flink 管道是否需要接收器?

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    是的,接收器是 Flink 执行模型的一部分:

    Flink 中的 DataStream 程序是实现 数据流的转换(例如,过滤、更新状态、 定义窗口,聚合)。最初创建数据流 来自各种来源(例如,消息队列、套接字流、文件)。 结果通过接收器返回,例如可以写入数据 到文件或标准输出(例如命令行 终端)

    有人可能会争辩说,对数据存储的调用是您可以使用的实际接收器实现。您可以定义自己的接收器并在那里执行数据存储调用。

    我并不热衷于您的数据存储区的详细信息,但可以假设您正在序列化这些事件并以某种方式将它们发送到数据存储区。在这种情况下,您可以将所有元素流向接收器运算符,并将这些元素中的每一个存储在一些ListState 中,您可以连续卸载和发送。这样,如果您的应用程序需要升级,飞行记录不会丢失,并且会在作业恢复后恢复并发送。

    【讨论】:

    • 当有一个侧输出流拆分某些消息的处理时,flink 如何跟踪检查点。这个操作符也需要是 Sink 吗?
    • @Gayatri 不,side output 不是 sink,它只是 Flink 生成的 DAG 中的另一个节点。获得侧面输出的结果是 DataStream[A],您可以将接收器应用到它。
    • 如果该侧输出流随后由 processFunc 处理并且没有接收器,是否会导致检查点出现任何问题?进程函数基本上是进行 api 调用。而已。或者我确实需要将 api 调用实现为 SinkFunc
    • 所以我遇到的理论似乎相互矛盾。根据本文档ci.apache.org/projects/flink/flink-docs-stable/api/java/org/…,似乎需要接收器。但是这个讨论说一个人可以活下去apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/…
    • @Gayatri 有趣。你可以构建一个只有一个侧面输出的小程序,你可以在没有接收器的地方实现它并测试它的行为。我会尽快进行快速测试并相应地更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多