Несколько потребителей Spark Kafka с одинаковым идентификатором группы - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь создать несколько потребителей для нескольких разделов темы Kafka с одним и тем же groupId, что поможет мне масштабировать потребление сообщений.

Согласно документации Kafka, оно говорит:

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

Наличие потребителей в составе одной и той же группы потребителей означает предоставление шаблона «конкурирующие потребители»с которыми сообщения от тематических разделов распространяются на членов группы. Каждый потребитель получает сообщения от одного или нескольких разделов («автоматически» назначенных ему), и те же сообщения не будут приниматься другими потребителями (назначенными различным разделам). Таким образом, мы можем масштабировать количество потребителей до количества разделов (при этом один потребитель читает только один раздел);

Но когда я развертываю несколько приложений Spark с одним и тем же идентификатором группы, это дает мне следующее исключение:

java.lang.IllegalStateException: Previously tracked partitions [cpq.cluster-1] been revoked by Kafka because of consumer rebalance. This is mostly due to another stream with same group id joined, please check if there're different streaming application misconfigure to use same group id. Fundamentally different stream should use different group id
at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.latestOffsets(DirectKafkaInputDStream.scala:200)
at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.compute(DirectKafkaInputDStream.scala:228)

В соответствии с исключением, у меня не может быть нескольких потребителей с одинаковым идентификатором группы. Следовательно, я не могу настроить балансировку нагрузки в своем искровом приложении;Я могу назначить только одного потребителя на раздел раздела, и это противоречит документации Kafka.

Как я могу иметь несколько потребителей с одной и той же группой потребителей с балансировкой нагрузки?

1 Ответ

1 голос
/ 14 октября 2019

Здесь вам не нужно запускать несколько приложений spark для использования из нескольких разделов, а одно приложение spark будет обрабатывать это внутренне. Потоковая передача Spark использует параллелизм 1: 1 между разделами Kafka и Spark. Если вы выполните несколько искровых приложений, это выдаст эту ошибку. Пожалуйста, обратитесь к этим вопросам для получения более подробной информации: 2 Задание Spark Stream с идентичным идентификатором группы потребителей

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