Flink StreamSink и Checkpoint Понимание - PullRequest
1 голос
/ 05 марта 2020

Я написал работу, где 5 разных источников и приемников есть в одном приложении. Я пишу данные в формате паркета с использованием потокового приемника. В качестве паркетной мойки напишите данные на КПП. Если один из источников получит некоторые записи о неисправностях, я получу исключение в приемнике. Но это заставило моего потребителя остановиться. Я также не могу записывать данные другими приемниками.

Пример:

source1 (kafka) --- sink1 (s3) source2 (kafka) -sink2 (s3) source3 (kafka) ) - sink3 (s3)

Мне нужно понять, почему из-за сбоя одного приемника происходит остановка всего потребителя, а запись данных в S3 не выполняется. Может кто-нибудь, пожалуйста, помогите понять это, или я что-то упускаю.

1 Ответ

1 голос
/ 05 марта 2020

Приложение должно потерпеть неудачу, иначе гарантии упорядоченности и непротиворечивости больше не будут действовать. Это полностью независимо от контрольной точки.

Если сбой только одной задачи, все другие задачи в одном приложении должны завершиться сбоем, а Flink не может знать, какие задачи актуальны или нет.

В вашем случае у вас фактически есть 3 независимых приложения. Таким образом, у вас есть три варианта:

Если они должны потерпеть неудачу вместе, вы помещаете их все в тот же StreamExecutionEnvironment, что и вы.

Если все приложения должны работать независимо, вам нужно запустить задание 3 раза с разными параметрами. Затем эти три развертывания могут быть перезапущены независимо.

Если вы все еще хотите развернуть только один раз, вы можете создать 3 StreamExecutionEnvironment s и позволить им работать параллельно в разных потоках. Главное затем присоединиться к этим темам.

...