web-dev-qa-db-fra.com

Comment choisir le nombre de partitions pour une rubrique kafka?

Nous avons 3 clusters de nœuds zk et 7 courtiers. Nous devons maintenant créer un sujet et créer des partitions pour ce sujet.

Mais je n'ai trouvé aucune formule pour décider du nombre de partitions à créer pour ce sujet. Le débit du producteur est de 5 000 messages/s et la taille de chaque message est de 130 octets.

Merci d'avance

7
Rajendra Jangir

Cela dépend de votre débit requis, de la taille du cluster et des spécifications matérielles:

Il y a un blog clair à ce sujet écrit par Jun Rao de Confluent: Comment choisir le nombre de sujets/partitions dans un cluster Kafka?

Cela peut également être utile pour avoir un aperçu: Apache Kafka Prend en charge 200K partitions par cluster

2
gokhansari

Je ne peux pas vous donner de réponse définitive, il existe de nombreux modèles et contraintes qui peuvent affecter la réponse, mais voici certaines des choses que vous voudrez peut-être prendre en compte:

  • L'unité de parallélisme est la partition, donc si vous connaissez le temps de traitement moyen par message, vous devriez être en mesure de calculer le nombre de partitions nécessaires pour suivre. Par exemple, si chaque message prend 100 ms à traiter et que vous recevez 5 000 secondes, vous aurez besoin d'au moins 50 partitions. Ajoutez un pourcentage de plus que cela pour faire face aux pics et aux performances d'infrastructure variables. La théorie de la file d'attente peut vous donner les mathématiques pour calculer vos besoins en parallélisme.

  • Quel est le volume de votre trafic et quelles sont les contraintes de latence? Compte tenu du dernier point, si vous avez également des exigences de latence, vous devrez peut-être adapter vos partitions pour faire face à votre taux de trafic de pointe.

  • Si vous utilisez des modèles de localité de données ou si vous avez besoin de commander des messages, vous devez prendre en compte la croissance future du trafic. Par exemple, vous traitez les données client et utilisez votre identifiant client comme clé de partition, et dépendez du fait que chaque client est toujours routé vers la même partition. Peut-être pour la recherche d'événements ou simplement pour s'assurer que chaque changement est appliqué dans le bon ordre. Eh bien, si vous ajoutez de nouvelles partitions plus tard pour faire face à un taux de messages plus élevé, chaque client sera probablement acheminé vers une partition différente maintenant. Cela peut introduire quelques maux de tête concernant la commande de messages garantie car un client existe sur deux partitions. Vous souhaitez donc créer suffisamment de partitions pour une croissance future. N'oubliez pas que c'est facile à mettre à l'échelle et chez les consommateurs, mais les partitions nécessitent une certaine planification, alors soyez prudent et soyez à l'épreuve du temps.

  • Le fait d'avoir des milliers de partitions peut augmenter la latence globale.

2
Vanlightly

Cet ancien repère par Kafka co-fondateur est assez agréable pour comprendre les ampleurs de l'échelle - https://engineering.linkedin.com/kafka/benchmarking-Apache-kafka-2 -million-écrit-deuxième-trois-machines-bon marché

La conclusion immédiate de cela, comme Vanlightly l'a dit ci-dessus, est que le temps de traitement des consommateurs est le facteur le plus important pour décider du nombre de partitions (car vous n'êtes pas près de contester le débit du producteur).

la concurrence maximale pour la consommation est le nombre de partitions, vous devez donc vous assurer que:

((temps de traitement d'un message en secondes x nombre de msgs par seconde) / nombre de partitions) << 1

s'il est égal à 1, vous ne pouvez pas lire plus vite que l'écriture, et c'est sans mentionner les rafales de messages et les pannes\temps d'arrêt des consommateurs. vous aurez donc besoin qu'il soit significativement inférieur à 1, l'importance dépend de la latence que votre système peut supporter.

2
H. Opler