【发布时间】:2021-08-25 20:56:16
【问题描述】:
我正在研究构建一个没有数据接收器的 flink 管道。即我的管道在成功调用数据存储时结束。
在这种情况下,如果我们不使用接收器操作符,检查点将如何工作?
因为检查点基于 pre-checkpoint epoch(所有事件保持在状态或发送到 sinks)和 post-checkpoint epoch 的概念。 flink 管道是否需要接收器?
【问题讨论】:
标签: apache-flink flink-streaming
我正在研究构建一个没有数据接收器的 flink 管道。即我的管道在成功调用数据存储时结束。
在这种情况下,如果我们不使用接收器操作符,检查点将如何工作?
因为检查点基于 pre-checkpoint epoch(所有事件保持在状态或发送到 sinks)和 post-checkpoint epoch 的概念。 flink 管道是否需要接收器?
【问题讨论】:
标签: apache-flink flink-streaming
是的,接收器是 Flink 执行模型的一部分:
Flink 中的 DataStream 程序是实现 数据流的转换(例如,过滤、更新状态、 定义窗口,聚合)。最初创建数据流 来自各种来源(例如,消息队列、套接字流、文件)。 结果通过接收器返回,例如可以写入数据 到文件或标准输出(例如命令行 终端)
有人可能会争辩说,对数据存储的调用是您可以使用的实际接收器实现。您可以定义自己的接收器并在那里执行数据存储调用。
我并不热衷于您的数据存储区的详细信息,但可以假设您正在序列化这些事件并以某种方式将它们发送到数据存储区。在这种情况下,您可以将所有元素流向接收器运算符,并将这些元素中的每一个存储在一些ListState 中,您可以连续卸载和发送。这样,如果您的应用程序需要升级,飞行记录不会丢失,并且会在作业恢复后恢复并发送。
【讨论】:
DataStream[A],您可以将接收器应用到它。