Приложение 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)