Ошибка Spark Structured Streaming Kafka - смещение было изменено - PullRequest
1 голос
/ 08 марта 2019

Приложение My Spark Structured Streaming запускается в течение нескольких часов, прежде чем выходит из строя с этой ошибкой

java.lang.IllegalStateException: Partition [partition-name] offset was changed from 361037 to 355053, some data may have been missed.
Some data may have been lost because they are not available in Kafka any more; either the
data was aged out by Kafka or the topic may have been deleted before all the data in the
topic was processed. If you don't want your streaming query to fail on such cases, set the
source option "failOnDataLoss" to "false".

Конечно, смещения каждый раз разные, но первое всегда больше второго.Срок действия данных темы не истек, поскольку срок хранения темы составляет 5 дней, и я создал эту тему вчера, но сегодня снова возникла ошибка.Единственный способ восстановиться после этого - удалить контрольные точки.

Руководство по интеграции Spark's Kafka упоминает в опции failOnDataLoss:

Отказ в запросекогда возможно, что данные потеряны (например, темы удалены, или смещения вне диапазона). Это может быть ложная тревога.Вы можете отключить его, если он не работает так, как вы ожидали. Пакетные запросы всегда будут давать сбой, если не удастся прочитать какие-либо данные из предоставленных смещений из-за потерянных данных.

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

ОБНОВЛЕНИЕ: Я исследовал журналы Kafka, и во всех случаях, когда Spark не срабатывал, Kafka регистрировал несколько таких сообщений (по одному на каждого потребителя Spark.предположим):

INFO [GroupCoordinator 1]: Preparing to rebalance group spark-kafka-...-driver-0 with old generation 1 (__consumer_offsets-25) (kafka.coordinator.group.GroupCoordinator)

1 Ответ

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

У меня больше нет этой проблемы.Я сделал два изменения:

  1. Отключено динамическое распределение ресурсов YARN (что означает, что я должен вручную рассчитать оптимальное количество исполнителей и т. Д. И передать их в spark-submit)
  2. Обновлен доSpark 2.4.0, который также обновляет клиент Kafka с 0.10.0.1 до 2.0.0

Отключение динамического выделения ресурсов означает, что исполнители (= потребители) не создаются и не завершаются во время работы приложения, что устраняет необходимостьдля восстановления баланса.Так что это, скорее всего, остановило ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...