Spark Direct Stream Кафка порядок событий - PullRequest
0 голосов
/ 10 мая 2018

У меня есть вопрос относительно чтения данных с помощью Spark Direct Streaming (Spark 1.6) из Kafka 0.9 с сохранением в HBase.

Я пытаюсь обновить определенные ключи строк в таблице HBase, полученные из Kafka, и мне нужно убедиться, что порядок событий сохраняется (данные, полученные в t0, обязательно сохраняются в HBase, прежде чем данные, полученные в t1) .

Ключ строки представляет UUID, который также является ключом сообщения в Kafka, поэтому на уровне Kafka я уверен, что события, соответствующие определенному UUID, упорядочены на уровне раздела.

Моя проблема начинается, когда я начинаю читать с помощью Spark.

Используя метод прямого потока, каждый исполнитель будет читать из одного раздела. Я не делаю никакой перестановки данных (просто анализирую и сохраняю), поэтому мои события не будут испорчены в СДР, но я беспокоюсь, что когда исполнитель читает раздел, он не будет поддерживать порядок, поэтому я буду в результате я получаю неверные данные в HBase.

Как я могу гарантировать, что порядок сохраняется на уровне исполнителя, особенно если я использую несколько ядер в одном исполнителе (что, как я понимаю, приводит к нескольким потокам)?

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

Я также думал о реализации сортировки событий на уровне искрового раздела с использованием смещения Кафки.

Любой совет?

Заранее большое спасибо!

...