web-dev-qa-db-fra.com

Kafka ID de groupe par défaut du consommateur

Je travaille avec Apache Kafka et son client Java et je vois que la charge des messages est équilibrée sur différents Kafka consommateurs) appartenant au même groupe (c'est-à-dire partageant le même identifiant de groupe).

Dans mon application, j'ai besoin que tous les consommateurs lisent tous les messages.

J'ai donc plusieurs questions:

  • si je ne définis aucun identifiant de groupe dans les propriétés du consommateur, quel identifiant de groupe le consommateur Kafka sera-t-il donné?

  • Y a-t-il une seule valeur par défaut?

  • Le client crée-t-il une valeur aléatoire à chaque fois?

  • Dois-je créer un identifiant différent pour chaque consommateur pour être sûr que chacun reçoit tous les messages?

EDIT: Merci pour vos réponses.

Vous avez raison: si l'on ne définit pas l'ID du groupe de consommateurs, Kafka devrait se plaindre.

Cependant, j'ai découvert que si l'ID de groupe est nul, le client Java le définit sur la chaîne vide "" pour éviter les problèmes. Il s'agit donc apparemment de la valeur par défaut que je cherchais.

Surprenant tous mes consommateurs, même si je ne définis pas leurs groupIds (et donc ils sont tous avec groupId == "") semblent recevoir tous les messages du producteur écrit.

Je ne peux toujours pas expliquer cela: des suggestions?

22
Andrea Rossi

si je ne définis aucun identifiant de groupe dans les propriétés du consommateur, quel identifiant de groupe le consommateur Kafka sera donné?

Le consommateur kafka n'aura aucun groupe de consommateurs. Au lieu de cela, vous obtiendrez cette erreur: The configured groupId is invalid

Y a-t-il une seule valeur par défaut?

Oui, vous pouvez voir le consumer.properties fichier de kafka pour référence. L'ID de groupe de consommateurs par défaut est: group.id=test-consumer-group

Le client crée-t-il une valeur aléatoire à chaque fois?

Non, groupId semble être obligatoire pour les clients Java client démarrant Kafka 0.9.0.x consommateurs. Vous pouvez vous référer à ce JIRA: https: //issues.Apache.org/jira/browse/KAFKA-2648

Dois-je créer un identifiant différent pour chaque consommateur pour être sûr que chacun reçoit tous les messages?

Oui, si tous les consommateurs utilisent le même identifiant de groupe, les messages d'un sujet sont répartis entre ces consommateurs. En d'autres termes, chaque consommateur recevra un sous-ensemble de messages qui ne se chevauchent pas. Le fait d'avoir plus de consommateurs dans le même groupe augmente le degré de parallélisme et le débit global de consommation. D'un autre côté, si chaque consommateur appartient à son propre groupe, chaque consommateur recevra une copie complète de tous les messages.

27
Maximilien Belinga

Si ne définissez pas group.id, vous obtiendrez une erreur lors de la consommation des données de rubrique.

org.Apache.kafka.common.errors.InvalidGroupIdException: The configured groupId is invalid
22:08:14.132 [testAuto-kafka-consumer-1] INFO org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - (Re-)joining group 
22:08:14.132 [testAuto-kafka-consumer-1] DEBUG org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - Sending JoinGroup ({group_id=,session_timeout=15000,rebalance_timeout=300000,member_id=,protocol_type=consumer,group_protocols=[{protocol_name=range,protocol_metadata=Java.nio.HeapByteBuffer[pos=0 lim=18 cap=18]}]}) to coordinator bogon:9092 (id: 2147483647 rack: null)
22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - Attempt to join group  failed due to fatal error: The configured groupId is invalid
22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer - Container exception
0
happy programmer