Как pyspark kafka узнает, где он начинает использовать данные, если не установлен идентификатор группы? - PullRequest
0 голосов
/ 08 января 2020

Я запускаю структурированную потоковую передачу pyspark без указания идентификатора группы kafka и обнаруживаю, что group.id всегда изменяется в сообщении регистратора при каждом запуске программы. Я запутался, что если он меняет group.id, как он узнает, где он начинает потребляться в следующий раз, или я должен вручную установить смещение kafka? И как я узнаю, что его автоматический c сгенерированный идентификатор topi c находится в конфликте с другим идентификатором topi c, который устанавливается вручную?

1 Ответ

0 голосов
/ 09 января 2020

Вам лучше прочитать раздел потребителей из официальной документации Kafka:

Потребители маркируют себя именем группы потребителей, и каждая запись публикуется в топи c доставляется одному экземпляру потребителя в каждой подписавшейся группе потребителей. Экземпляры-потребители могут находиться в отдельных процессах или на разных компьютерах.

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

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

Каждая группа потребителей имеет свое смещение. Если вы не укажете customer group.id, то при каждом запуске вашей программы будет сгенерирован новый идентификатор группы потребителей, который будет присвоен вашему клиентскому клиенту. Таким образом, вы всегда начнете читать сообщения с самого начала (смещение = 0).

Если вы хотите продолжить чтение с последнего смещения, вам нужно использовать тот же group.id, что и раньше.

В каждой топике c может быть несколько групп потребителей. Вы можете перечислить их:

bin/kafka-consumer-groups.sh  --list --bootstrap-server localhost:9092

и описать определенную группу c:

bin/kafka-consumer-groups.sh --describe --group mygroup --bootstrap-server localhost:9092
...