У меня есть вопрос относительно чтения данных с помощью Spark Direct Streaming (Spark 1.6) из Kafka 0.9 с сохранением в HBase.
Я пытаюсь обновить определенные ключи строк в таблице HBase, полученные из Kafka, и мне нужно убедиться, что порядок событий сохраняется (данные, полученные в t0, обязательно сохраняются в HBase, прежде чем данные, полученные в t1) .
Ключ строки представляет UUID, который также является ключом сообщения в Kafka, поэтому на уровне Kafka я уверен, что события, соответствующие определенному UUID, упорядочены на уровне раздела.
Моя проблема начинается, когда я начинаю читать с помощью Spark.
Используя метод прямого потока, каждый исполнитель будет читать из одного раздела. Я не делаю никакой перестановки данных (просто анализирую и сохраняю), поэтому мои события не будут испорчены в СДР, но я беспокоюсь, что когда исполнитель читает раздел, он не будет поддерживать порядок, поэтому я буду в результате я получаю неверные данные в HBase.
Как я могу гарантировать, что порядок сохраняется на уровне исполнителя, особенно если я использую несколько ядер в одном исполнителе (что, как я понимаю, приводит к нескольким потокам)?
Я думаю, что я также могу жить с 1 ядром, если это решит проблему и отключит спекулятивное выполнение, включив оптимизацию противодавления и сохранив максимальное число повторов на исполнителе до 1.
Я также думал о реализации сортировки событий на уровне искрового раздела с использованием смещения Кафки.
Любой совет?
Заранее большое спасибо!