Я пытаюсь создать несколько потребителей для нескольких разделов темы 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.
Как я могу иметь несколько потребителей с одной и той же группой потребителей с балансировкой нагрузки?