Spark: параллельно обрабатывает несколько тем кафки

Я использую spark 1.5.2. Мне нужно запустить искрообразование с кафкой в ​​качестве источника потоковой передачи. Мне нужно читать из нескольких тем в кафке и обрабатывать каждую тему по-разному.

  • Это хорошая идея сделать это в той же работе? Если да, должен ли я создать единый поток с несколькими разделами или разными потоками для каждой темы?
  • Я использую прямой кафка. Насколько я знаю, искра запускает длинные приемники для каждого раздела. У меня относительно небольшой кластер, 6 узлов с 4 ядрами каждый. Если у меня будет много тем и разделов в каждой теме, повлияет ли эффективность, так как большинство исполнителей заняты длинными приемниками? Пожалуйста, исправьте меня, если мое понимание здесь не так.

Ответы

Ответ 1

Я сделал следующие замечания, если он кому-то помог:

  • В прямом потоке kafka приемники не запускаются в виде длительных задач. В начале каждой партии inerval, сначала данные считываются от кафки у исполнителей. После чтения обрабатывающая часть берет верх.
  • Если мы создаем один поток с несколькими темами, темы читаются один за другим. Кроме того, фильтрация dstream для применения другой логики обработки добавит еще один шаг к заданию
  • Создание нескольких потоков помогло бы двумя способами: 1. Вам не нужно применять операцию фильтрации для обработки разных тем по-разному. 2. Вы можете читать несколько потоков параллельно (в отличие от одного за другим в случае одного потока). Для этого существует недокументированный параметр конфигурации spark.streaming.concurrentJobs*. Итак, я решил создать несколько потоков.

    sparkConf.set("spark.streaming.concurrentJobs", "4");
    

Ответ 2

Я думаю, что правильное решение зависит от вашего варианта использования.

Если ваша логика обработки одинакова для данных из всех тем, то, без сомнения, это лучший подход.

Если логика обработки отличается, я думаю, вы получаете одно RDD из всех тем, и вам нужно создать pairedrdd для каждой логики обработки и обрабатывать ее отдельно. Проблема в том, что это создает своего рода группировку для обработки, а общая скорость обработки будет определяться темой, для которой требуется самое длинное время для обработки. Поэтому темы с меньшим количеством данных должны ждать, пока данные из всех тем не будут обработаны. Одно из преимуществ заключается в том, что если он хранит данные таймера, обработка идет вместе, что может быть хорошо.

Другим преимуществом запуска независимых заданий является то, что вы получаете лучший контроль и можете настроить распределение ресурсов. Например, для заданий, которые обрабатывают тему с высокой пропускной способностью, может быть выделен более высокий процессор/память.