Flink StreamSink 和 Checkpoint 理解
Flink StreamSink and Checkpoint Understanding
我编写了一个作业,其中在一个应用程序中有 5 个不同的源和接收器。我正在使用流接收器以镶木地板格式写入数据。作为 parquet sink 在检查点上写入数据。如果其中一个来源得到一些格式错误的记录,而不是我在接收器中得到异常。
但这导致我所有的消费者都停止了。我也无法通过其他接收器写入任何数据。
示例:
source1(kafka)---sink1(s3)
source2(kafka)-sink2(s3)
source3(kafka) - sink3(s3)
我需要了解为什么由于一个接收器发生故障导致所有消费者停止并且没有数据写入 S3。有人可以帮助理解这一点吗,或者我遗漏了什么。
应用程序需要失败,否则顺序性和一致性保证将不再有效。这完全独立于检查点。
如果只有一个任务失败,则一个应用程序中的所有其他任务都需要失败,而且 Flink 无法知道哪些任务相关或不相关。
在你的情况下,你实际上似乎有 3 个独立的应用程序。所以你有三个选择:
如果它们一起失败,您将它们全部放在同一个 StreamExecutionEnvironment
中。
如果所有应用程序都应该 运行 独立,您需要使用不同的参数启动作业 3 次。然后可以独立重新启动三个部署。
如果您仍然只想部署一次,那么您可以生成 3 个 StreamExecutionEnvironment
并让它们 运行 在不同的线程中并行。然后 main 应该加入这些线程。
我编写了一个作业,其中在一个应用程序中有 5 个不同的源和接收器。我正在使用流接收器以镶木地板格式写入数据。作为 parquet sink 在检查点上写入数据。如果其中一个来源得到一些格式错误的记录,而不是我在接收器中得到异常。 但这导致我所有的消费者都停止了。我也无法通过其他接收器写入任何数据。
示例:
source1(kafka)---sink1(s3) source2(kafka)-sink2(s3) source3(kafka) - sink3(s3)
我需要了解为什么由于一个接收器发生故障导致所有消费者停止并且没有数据写入 S3。有人可以帮助理解这一点吗,或者我遗漏了什么。
应用程序需要失败,否则顺序性和一致性保证将不再有效。这完全独立于检查点。
如果只有一个任务失败,则一个应用程序中的所有其他任务都需要失败,而且 Flink 无法知道哪些任务相关或不相关。
在你的情况下,你实际上似乎有 3 个独立的应用程序。所以你有三个选择:
如果它们一起失败,您将它们全部放在同一个 StreamExecutionEnvironment
中。
如果所有应用程序都应该 运行 独立,您需要使用不同的参数启动作业 3 次。然后可以独立重新启动三个部署。
如果您仍然只想部署一次,那么您可以生成 3 个 StreamExecutionEnvironment
并让它们 运行 在不同的线程中并行。然后 main 应该加入这些线程。