4 votes

Apache Kafka - message sans clé

En parcourant le guide définitif de Kafka, je suis tombé sur cette phrase

Lorsque la clé est nulle et que le partitionneur par défaut est utilisé, l'enregistrement sera envoyé à l'une des partitions disponibles du sujet au hasard. aléatoire. Un algorithme "round-robin" sera utilisé pour équilibrer les messages entre les partitions.

Cela signifie-t-il que cela s'applique uniquement à l'utilisation partitionneur par défaut ?

5voto

Giorgos Myrianthous Points 4215
  • Si un numéro de partition valide est spécifié, cette partition sera utilisée lors de l'envoi de l'enregistrement.

  • Si aucune partition n'est spécifiée mais qu'une clé est présente, une partition sera choisie en utilisant un hachage de la clé ( DefaultPartitioner - voir ci-dessous pour plus de détails).

  • Si aucune clé ni partition n'est présente, une partition sera attribuée de manière circulaire.


Kafka utilise le DefaultPartitioner ( org.apache.kafka.clients.producer.internals.DefaultPartitioner ) afin de répartir les messages entre les partitions de sujets :

/**
 * Compute the partition for the given record.
 *
 * @param topic The topic name
 * @param key The key to partition on (or null if no key)
 * @param keyBytes serialized key to partition on (or null if no key)
 * @param value The value to partition on or null
 * @param valueBytes serialized value to partition on or null
 * @param cluster The current cluster metadata
 */
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
    if (keyBytes == null) {
        return stickyPartitionCache.partition(topic, cluster);
    } 
    List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
    int numPartitions = partitions.size();
    // hash the keyBytes to choose a partition
    return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
}

Essentiellement, le DefaultPartitioner fait usage de MurmurHash Une fonction de hachage non cryptographique, généralement utilisée pour la recherche par hachage. Ce hachage est ensuite utilisé dans une opération modulo ( % numPartitions ) afin de s'assurer que la partition renvoyée se situe dans l'intervalle [0, N] donde N est le nombre de partitions du sujet.

0voto

Matteo Baldi Points 1624

Eh bien, non, vous pouvez mettre en œuvre un partitionneur personnalisé pour gérer null clés. Mais sans les clés de message, votre partitionneur personnalisé doit se comporter comme le partitionneur par défaut (même avec un simple algorithme aléatoire). Sinon, comment peut-il discriminer la bonne partition pour envoyer le message ?

En tant que doux si aucune clé n'est fournie, coller à la règle du partitionneur par défaut .

Un bon document sur Partitionneur personnalisé Kafka .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X