2017-07-11 2 views
1

J'ai ci-dessous scénario, j'ai plusieurs gros fichiers (~ 200M enregistrements dans chaque) et je veux envoyer ce fichier via kafka. Pour de meilleures performances, j'ai voulu utiliser le partitionnement Kafka pour envoyer les données. Maintenant, mes besoins en données sont pour une clé particulière tous les messages doivent aller à une partition spécifique. Actuellement pour POC, j'utilisais 10 partitions kafka et utilisais un champ numérique pour partitionner les données. Ma logique vérifie simplement le dernier chiffre de l'IT et envoie l'enregistrement à la partition kafka respective. EX: ID - ***7 ira toujours la partition 7. Maintenant, cette logique ne peut pas être utilisée pour généraliser mon code que la clé peut être non numérique et le nombre de partitions peut être augmenté/diminué en fonction des besoins. Je veux savoir s'il existe un algorithme de hachage qui peut générer des valeurs dans une plage spécifique (comme si je devais avoir une partition 10, alors il devrait créer toutes les valeurs de hachage se terminant par 0-9) en fonction d'une plage donnée?Technique de partitionnement pour répartir les données uniformément dans les partitions kafka

Répondre

4

Oui, vous pouvez simplement utiliser le hashcode de la clé modulo le nombre de partitions. Mais c'est ce que le partitionneur par défaut utilise de toute façon, donc aussi bien l'utiliser.

https://github.com/apache/kafka/blob/0.11.0/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java#L69

+0

Merci pour votre commentaire Michal, je vois, il y a très moins de documentation sur DefaultPartitioner. Générera la même paire de numéros de partition de hachage pour la même clé chaque fois qu'il est passé? – Explorer

+0

Oui, à moins que vous ne changiez le nombre de partitions. –