Je cherche des éclaircissements sur le sujet. Dans les documentations Kafka j'ai trouvé ce qui suit:
Kafka fournit uniquement un ordre total sur les messages au sein d'une partition, pas entre les différentes partitions d'une rubrique. L'ordre par partition combiné à la possibilité de partitionner les données par clé est suffisant pour la plupart des applications. Cependant, si vous avez besoin d'un ordre total sur les messages, cela peut être réalisé avec un sujet qui n'a qu'une seule partition, bien que cela ne signifie qu'un seul processus consommateur par groupe de consommateurs.
Donc, voici mes questions:
Est-ce que cela signifie que si je souhaite avoir plus d'un consommateur (du même groupe) lisant un sujet, j'ai besoin d'avoir plus d'une partition?
Cela signifie-t-il que j'ai besoin de la même quantité de partitions que de la quantité de consommateurs pour le même groupe?
Combien de consommateurs peuvent lire depuis une partition?
Vous avez également des questions concernant la relation entre les clés et les partitions en ce qui concerne l'API. Je n'ai regardé que les API .net (en particulier une de MS) mais ressemble à la mimique Java API. Je vois que lorsque vous utilisez un producteur pour envoyer un message à un sujet, il y a un paramètre clé. Mais lorsque le consommateur lit un sujet, il existe un numéro de partition.
Merci d'avance.
Igor,
Les partitions augmentent le parallélisme de Kafka topic. N'importe quel nombre de consommateurs/producteurs peuvent utiliser la même partition. C'est jusqu'à la couche d'application pour définir le protocole. Kafka garantit la livraison) . En ce qui concerne l'API, vous voudrez peut-être regarder les documents Java car ils peuvent être plus complets. D'après mon expérience:
Est-ce que cela signifie que si je souhaite avoir plus d'un consommateur (du même groupe) lisant un sujet, j'ai besoin d'avoir plus d'une partition?
Voyons les propriétés suivantes de kafka:
Avec ces propriétés, kafka est intelligemment capable de fournir à la fois ordering guarantees
Et load balancing
Sur un pool de processus grand public.
Pour répondre à votre question, oui, dans le cadre du même groupe, si vous voulez avoir N consumers
, Vous devez avoir at least N partitions
.
Cela signifie-t-il que j'ai besoin de la même quantité de partitions que de la quantité de consommateurs pour le même groupe?
Je pense que cela a été expliqué dans la première réponse.
Combien de consommateurs peuvent lire depuis une partition?
Le number of consumers
Qui peut lire à partir d'une partition est toujours égal au number of consumer groups
Abonné à ce sujet.
Relation entre les clés et les partitions en ce qui concerne l'API
Tout d'abord, nous devons comprendre que le producer
est responsable du choix de l'enregistrement à affecter à quelle partition dans la rubrique.
Maintenant, voyons comment le producteur le fait. Tout d'abord, voyons la définition de classe de ProducerRecord.Java
:
public class ProducerRecord<K, V> {
private final String topic;
private final Integer partition;
private final Headers headers;
private final K key;
private final V value;
private final Long timestamp;
}
Ici, le champ que nous devons comprendre de la classe est partition
.
Depuis les documents,
partition number
Valide est spécifié, ce partition
sera utilisé lors de l'envoi de l'enregistrement.key
est présent, une partition sera choisie en utilisant un hash of the key
.key
ni partition
n'est présent, une partition sera affectée dans un round-robin fashion
.