Тайм-аут при попытке начать работу мастера Flink для контрольной работы - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь настроить флинк для восстановления с контрольных точек.По большей части это, похоже, работает, однако после развертывания в нашей промежуточной среде в течение недели менеджер заданий начал зацикливание при сбое из-за тайм-аута при попытке запустить «хозяина задания» для задания.

Я использую flink 1.7.2, развернутый в режиме высокой доступности с zookeeper 3.4.9-1757313, просто для облегчения восстановления контрольной точки.У меня есть только один менеджер заданий в kubernetes, развернутый как набор состояний.Что-то должно было привести к сбою сервера, и при его возврате происходит сбой в коде, который запускает мастера заданий для (предположительно) восстановленного задания.

Я видел это однажды и очистил все записи flink zookeeper (rmr /flink в zk cli), а затем перезапустил кластер flink, чтобы «исправить» проблему.

Вот конфигурация flink

    blob.server.port: 6124
    blob.storage.directory: s3://...
    high-availability: zookeeper
    high-availability.zookeeper.quorum: zookeeper:2181
    high-availability.zookeeper.path.root: /flink
    high-availability.storageDir: s3://...
    high-availability.jobmanager.port: 6070
    jobmanager.archive.fs.dir: s3://...
    state.backend: rocksdb
    state.backend.fs.checkpointdir: s3://...
    state.checkpoints.dir: s3://...
    state.checkpoints.num-retained: 2
    web.log.path: /var/log/flink.log
    web.upload.dir: /var/flink-recovery/flink-web-upload
    zookeeper.sasl.disable: true
    s3.access-key: __S3_ACCESS_KEY_ID__
    s3.secret-key: __S3_SECRET_KEY__

А вот порты контейнера в наборе состояний flink-jobmaster:

ports:
- containerPort: 8081
  name: ui
- containerPort: 6123
  name: rpc
- containerPort: 6124
  name: blob
- containerPort: 6125
  name: query
- containerPort: 9249
  name: prometheus
- containerPort: 6070
  name: ha

Я ожидаю, что flink успешно восстановитиз контрольной точки в s3, но вместо этого диспетчер заданий падает при запуске со следующей трассировкой стека:

2019-06-18 14:02:05,123 ERROR org.apache.flink.runtime.entrypoint.ClusterEntrypoint         - Fatal error occurred in the cluster entrypoint.
org.apache.flink.util.FlinkException: JobMaster for job f13131ca883d6cf92f69a52cff4f1017 failed.
    at org.apache.flink.runtime.dispatcher.Dispatcher.jobMasterFailed(Dispatcher.java:759)
    at org.apache.flink.runtime.dispatcher.Dispatcher.lambda$startJobManagerRunner$6(Dispatcher.java:339)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
    at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRunAsync(AkkaRpcActor.java:332)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:158)
    at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:70)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
    at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.onReceive(FencedAkkaRpcActor.java:40)
    at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
    at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
    at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
    at akka.actor.ActorCell.invoke(ActorCell.scala:495)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
    at akka.dispatch.Mailbox.run(Mailbox.scala:224)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: org.apache.flink.util.FlinkException: Could not start the job manager.
    at org.apache.flink.runtime.jobmaster.JobManagerRunner.lambda$verifyJobSchedulingStatusAndStartJobManager$2(JobManagerRunner.java:340)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
    at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://flink/user/jobmanager_2#-806528277]] after [10000 ms]. Sender[null] sent message of type "org.apache.flink.runtime.rpc.messages.UnfencedMessage".
    at akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:604)
    at akka.actor.Scheduler$$anon$4.run(Scheduler.scala:126)
    at scala.concurrent.Future$InternalCallbackExecutor$.unbatchedExecute(Future.scala:601)
    at scala.concurrent.BatchingExecutor$class.execute(BatchingExecutor.scala:109)
    at scala.concurrent.Future$InternalCallbackExecutor$.execute(Future.scala:599)
    at akka.actor.LightArrayRevolverScheduler$TaskHolder.executeTask(LightArrayRevolverScheduler.scala:329)
    at akka.actor.LightArrayRevolverScheduler$$anon$4.executeBucket$1(LightArrayRevolverScheduler.scala:280)
    at akka.actor.LightArrayRevolverScheduler$$anon$4.nextTick(LightArrayRevolverScheduler.scala:284)
    at akka.actor.LightArrayRevolverScheduler$$anon$4.run(LightArrayRevolverScheduler.scala:236)
    ... 1 more

Я действительно в растерянности здесь.Я не знаю много о внутренней работе Флинк, поэтому это исключение мало что значит для меня.Любые выводы будут очень цениться.

РЕДАКТИРОВАТЬ: я копался в исходном коде Flink.Это исключение выдается после выбора лидера, когда он пытается восстановить свои графики заданий из информации контрольных точек, хранящейся в zookeeper.Достичь сути того, откуда происходит это исключение, довольно проблематично, поскольку все это заключено в фьючерсы и акки.Я предполагаю, что это происходит после того, как менеджер заданий запускает подпроцесс JobMaster для планирования графика задания.Немного предположений, но я думаю, что менеджер заданий пытается получить статус нового задания из его JobMaster, но поток JobMaster вошел в тупик (возможно, он мог также умереть, хотя тогда я ожидал бы трассировку стека) ипоэтому спрос истекает.Похоже, настоящий обалденный.

Примечание: UnfencedMessage, для которого был задан запрос, предназначен для локального использования в менеджере заданий (что совпадает с принимающим действующим лицом, являющимся менеджером заданий в исключении), поэтому мы можем устранить неправильную конфигурацию сети междуJobMaster и диспетчеры задач.

1 Ответ

0 голосов
/ 19 июня 2019

Я ставлю банки на флинк перед выполнением, используя конечную точку /jars/upload. Кажется, что танк производительности Flink, когда он загружен слишком много банок. Все конечные точки перестают отвечать, включая конечную точку /jobs/<job_id>. Загрузка обзора графика работ в пользовательском интерфейсе Flink заняла 1-2 минуты. Я полагаю, что эта конечная точка отдыха использует akka того же актера, что и менеджер по работе. Я думаю, что я, должно быть, достиг переломного момента, когда это начало вызывать тайм-ауты. Я уменьшил количество банок на 30 с лишним до 4 последних версий, и Флинк снова стал отзывчивым.

...