Ровная семантика в прямом подходе Spark Streaming - PullRequest
0 голосов
/ 26 января 2020

В официальной документации Spark говорится, что подход, основанный на Direct, включает использование API SimpleConsumer, в котором Zookeeper не используется для хранения смещений, а смещение вместо этого с использованием контрольной точки метаданных Spark. В документации также говорится, что прямой подход гарантирует единовременную семантику.

Когда мы включаем контрольную точку метаданных Spark с помощью ss c .checkpoint ("directory"), мы никогда не указываем интервал.

Теперь для каждой микропакета, запускаемого после интервала микропакета, драйвер отправляет смещения каждой задаче, которая извлекает данные для соответствующего раздела Kafka.

Вопросы :

  1. Учитывая, что соответствующие данные, полученные из Kafka для указанных смещений, не сохраняются в Spark, и только смещения хранятся в Spark В качестве части контрольной точки метаданных не имеет значения время контрольной точки, поскольку оно напрямую влияет на семантику ровно один раз или, по крайней мере, / чаще всего один раз? Происходит ли это, как только микропакет запускается и Directstream получает данные из kafka, или это происходит в конце завершения микропакета?

  2. Кроме того, что означают смещения как часть контрольной точки метаданных? Указывает ли это обработанные смещения или смещения, которые еще предстоит обработать?

1 Ответ

0 голосов
/ 26 января 2020

Контрольная точка - один из трех вариантов [Контрольные точки , Сама Кафка , Ваше собственное хранилище данных] , Контрольная точка имеет несколько недостатков и не может гарантировать ровно один раз, если ваша транзакция не идемпотентна.

Документация предупреждает вас о контрольной точке, как показано ниже:

Так что, если вы хотите получить эквивалент семантики с точностью до одного раза, вы должны либо сохранить смещения после идемпотентного выхода, либо сохранить смещения в транзакция atomi c вместе с выводом.

См. этот раздел официальной документации, подробно описывающий три варианта

...