Заказать гарантию, читая поток с Spark от Kafka - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть заказанная тема Кафки только с одним разделом.Я хочу прочитать его из Spark (Spark Streaming или Structured Streaming).Для этой цели я использовал этот код:

spark.readStream.format("kafka") ...

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

myStreamName.writeStream.trigger(Trigger.ProcessingTime("2 seconds")).format("console").outputMode("append").start

Я видел в выходных данных все записипоток заказан.Но тем не менее я прочитал в другом посте Spark не гарантирует заказ.См .: Spark Direct Stream Kafka, порядок событий

И мой вопрос: поскольку я использую Время обработки , и я читаю с заказанного Кафкитема , могу ли я быть уверен, что мой вывод будет всегда упорядочен?Если нет, то можно гарантировать упорядоченный вывод, используя только один раздел Spark (например, применяя метод coalesce ())?

1 Ответ

0 голосов
/ 08 февраля 2019

Заказчик Kafka гарантированно будет заказан в соответствии с контрактом API Kafka.

Однако любые внешние выходы, на которые вы производите запись, могут сработать не по порядку.

На самом деле я не думаю, что это проблема для большинства последующих систем ... Если вы, например, вставляете данные в базу данных, вы можете выполнить повторную сортировку по времени.Если у вас есть TSDB, то вы эффективно «засыпаете» данные.

Поскольку вы выводите данные на консоль, это блокирующий вызов вашего ввода-вывода и, таким образом, чтение пакета событий Kafka (по порядку) из одного потока, десериализация, а затем запись в консоль в другом потоке(в идеале для того, чтобы они были обработаны Spark, но не мешало бы вызвать сортировку SparkSQL desc($"timestamp") здесь).Как только это будет завершено, смещения Kafka могут быть переданы, и вы продолжите последовательное чтение с Kafka (в порядке смещений) ... Все эти события не должны иметь таких условий гонки, в которых они были бы не в порядке.

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