web-dev-qa-db-fra.com

KafkaConsumer Java API subscribe () vs assign ()

Je suis nouveau avec Kafka Java API et je travaille sur la consommation d'enregistrements d'une rubrique Kafka particulière).

Je comprends que je peux utiliser la méthode subscribe() pour démarrer l'interrogation des enregistrements à partir du sujet. Kafka fournit également la méthode assign() si je veux démarrer l'interrogation des enregistrements à partir des partitions sélectionnées des rubriques.

Je veux comprendre si c'est la seule différence entre les deux?

10
Karan Khanna

Oui subscribe besoin de group.id Car chaque consommateur d'un groupe sera affecté dynamiquement aux partitions pour la liste des rubriques fournies dans la méthode d'abonnement et chaque partition peut être consommée par un thread consommateur de ce groupe. Ceci est réalisé en équilibrant les partitions entre tous les membres du groupe de consommateurs afin que chaque partition soit affectée à exactement un consommateur du groupe

assign attribuera manuellement une liste de partitions à ce consommateur. et cette méthode n'utilise pas la fonctionnalité de gestion de groupe du consommateur (où aucun besoin de group.id)

La principale différence est que assign(Collection) perdra le contrôleur par rapport à l'attribution de partition dynamique et à la coordination des groupes de consommateurs

Il est également possible pour le consommateur d'attribuer manuellement des partitions spécifiques (similaires au consommateur "simple" plus ancien) à l'aide d'assign (Collection). Dans ce cas, l'attribution de partition dynamique et la coordination des groupes de consommateurs seront désactivées.

abonnez-vous

public void subscribe(Java.util.Collection<Java.lang.String> topics)

La méthode subscribe Abonnez-vous à la liste donnée de sujets pour obtenir des partitions attribuées dynamiquement. et si la liste de sujets donnée est vide, elle est traitée de la même manière que unsubscribe().

Dans le cadre de la gestion de groupe, le consommateur suivra la liste des consommateurs appartenant à un groupe particulier et déclenchera une opération de rééquilibrage si l'un des événements suivants se déclenche -

Number of partitions change for any of the subscribed list of topics
Topic is created or deleted
An existing member of the consumer group dies
A new member is added to an existing consumer group via the join API

attribuer

public void assign(Java.util.Collection<TopicPartition> partitions)

La méthode assign affecte manuellement une liste de partitions à ce consommateur. Et si la liste donnée de partitions de rubrique est vide, elle est traitée de la même manière que unsubscribe ().

L'affectation manuelle des rubriques via cette méthode n'utilise pas la fonctionnalité de gestion de groupe du consommateur. Ainsi, aucune opération de rééquilibrage ne sera déclenchée lorsque l'appartenance à un groupe ou les métadonnées de cluster et de rubrique changeront.

14
Deadpool