Ведение временной метки последовательности входящих потоковых данных - PullRequest
0 голосов
/ 18 февраля 2020

Итак, я передаю некоторые json данные из kafka в Spark, используя структурированную потоковую передачу. Данные в форме словаря имеют поле «метка времени». После анализа json и получения отдельных столбцов для каждого ключа я заметил, что поле метки времени находится не в той последовательности, в которой оно было передано в кластер kafka, т.е.

+----------+
| Timestamp|
+----------+
|     1    |
|     2    |
|     6    |  <--
|     4    |
|     5    |
|     7    |  <--
+----------+

. Есть ли способ убедиться, что данные остаются в последовательности? Одна вещь, о которой я могу думать, это использовать orderby на временной метке с output_mode = "complete". Есть ли другие эффективные альтернативы? Спасибо.

1 Ответ

1 голос
/ 18 февраля 2020

Кафка гарантирует порядок сообщений только внутри раздела. Если вам нужен строгий порядок в Кафке - оставьте один раздел на топи c и гарантируйте заказ при доставке туда. Возможно, вы захотите реализовать «службу заказа», которая читает из входящей очереди и записывает сообщения в другую очередь только с одним разделом. Хорошее объяснение и примеры можно найти в различных сообщениях в блоге: здесь или здесь и др.

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

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