Quelle est la meilleure façon de créer des sujets dans kafka?
Dans la nouvelle API de producteur, lorsque j'essaie de publier un message sur un sujet non existant, il échoue pour la première fois et est ensuite publié.
Lorsque vous démarrez votre courtier Kafka, vous pouvez définir un ensemble de propriétés dans le fichier conf/server.properties
. Ce fichier est juste un fichier de propriétés de valeur clé. Une des propriétés est auto.create.topics.enable
, si elle est définie sur true (par défaut), Kafka créera automatiquement des sujets lorsque vous envoyez des messages à des sujets non existants.
Toutes les options de configuration que vous pouvez trouver sont définies ici . IMHO, une règle simple pour créer des sujets est la suivante: le nombre de réplicas ne doit pas être inférieur au nombre de nœuds que vous avez. Le nombre de sujets doit être le multiplicateur du nombre de nœuds de votre cluster, par exemple:
Le numéro de partition détermine le parallélisme du sujet, car une partition ne peut être utilisée que par un consommateur d'un groupe de consommateurs. Par exemple, si vous avez seulement 10 partitions pour un sujet et 20 consommateurs dans un groupe de consommateurs, 10 consommateurs sont inactifs et ne reçoivent aucun message. Le nombre dépend vraiment de votre application, mais 1-1000 sont tous raisonnables.
Le nombre de répliques est déterminé par votre exigence de durabilité. Pour une rubrique avec un facteur de réplication N, Kafka peut tolérer des défaillances de serveur jusqu'à N-1 sans perdre les messages validés dans le journal. 3 répliques sont une configuration commune. Bien entendu, le numéro de réplique doit être plus petit ou égal à votre numéro de courtier.
auto.create.topics.enable property contrôle quand Kafka permet la création automatique de sujets sur le serveur. Si la valeur est true, lorsque les applications tentent de produire, consommer ou extraire des métadonnées pour un sujet inexistant, Kafka crée automatiquement le sujet avec le facteur de réplication par défaut et le nombre de partitions. Je recommanderais de l'éteindre en production et de créer des sujets à l'avance.
J'aimerais partager mon expérience récente décrite sur mon blog L'effet secondaire de rechercher des métadonnées de sujet Kafka et donner également mes réponses à certaines questions soulevées ici.
1) Quel est le meilleur moyen de créer des sujets dans kafka? Avons-nous besoin de créer un sujet avant de publier des messages?
Je pense que si nous savons que nous allons utiliser un nom de sujet fixe Kafka à l’avance, nous ferions mieux de créer le sujet avant de rédiger ou de lire des messages. Cela peut généralement être fait dans un script post-démarrage à l'aide de bin/kafka-topics.sh, voir la documentation officielle par exemple. Ou nous pouvons utiliser KafkaAdminClient qui a été introduit dans Kafka 0.11.0.0.
D'autre part, je vois certains cas où nous aurions besoin de générer un nom de sujet à la volée. Dans ces cas, nous ne serions pas en mesure de connaître le nom de sujet fixe et nous pourrons compter sur la propriété "auto.create.topics.enable". Lorsqu'il est activé, un sujet est créé automatiquement. Et cela soulève la deuxième question:
2) Quelles actions provoqueraient la création lorsque auto.create.topics.enable est à true
En fait, comme l'a déjà souligné @Lan
Si ce paramètre est défini sur true, lorsque les applications tentent de produire, consommer, ou chercher des métadonnées pour un sujet inexistant, Kafka va automatiquement créez la rubrique avec le facteur de réplication par défaut et le nombre de partitions.
Je voudrais le dire encore plus simplement:
Si la création automatique de sujet est activée pour les courtiers Kafka, chaque fois qu'un courtier Kafka voit un nom de sujet spécifique, ce sujet est créé s'il n'existe pas déjà
De plus, le fait que l'extraction de métadonnées crée automatiquement le sujet est souvent négligé par des personnes telles que moi-même. Un exemple spécifique à cela consiste à utiliser l’API consumer.partitionFor (topic), cette méthode créerait le sujet donné s’il n’existait pas.
Pour tous ceux qui sont intéressés par les détails que j'ai mentionnés ci-dessus, vous pouvez consulter mon propre article de blog sur le même sujet L'effet secondaire de rechercher des métadonnées de sujet Kafka .
Le niveau de base du parallélisme dans Kafka est la partition. Du côté du producteur et du courtier, les écritures sur différentes partitions peuvent être effectuées entièrement en parallèle.
Choses à garder à l'esprit
En règle générale, il est probablement préférable de limiter le nombre de partitions par courtier à 100 x b x r
, Où b
est le nombre de courtiers et r
est le facteur de réplication.
Par exemple: Si votre cluster contient 9 courtiers/nœuds, votre sujet pourrait avoir
EDIT: Voir l'article Comment choisir le nombre de sujets/partitions dans un cluster Kafka? pour plus de détails (la réponse a été tirée de là)
définir la propriété auto.create.topics.enable=true
dans votre fichier server.properties, si vous avez plusieurs courtiers, faites la même chose pour tout le fichier server * .properties et redémarrez votre kafka-server . Mais assurez-vous de définir les partitions pour un nombre approprié dans le serveur *. num.partitions=int
, sinon il y aura un problème de performances si vous augmentez les partitions ultérieurement.