Concepts dans le service de diffusion en continu avec Apache Kafka

Pour mieux comprendre le service de diffusion en continu pour OCI avec Apache Kafka, consultez certains termes et concepts.

Conditions

Apache Kafka
Apache Kafka est une plate-forme de diffusion d'événements à code source libre. Il fonctionne comme un système distribué composé de serveurs et de clients. Le service de diffusion en continu pour OCI avec Apache Kafka vous permet d'exécuter des grappes Kafka entièrement gérées dans une location avec une compatibilité à 100 % avec Apache Kafka.

Vous utilisez la console, l'API ou l'interface de ligne de commande OCI pour créer et mettre à jour la grappe et le courtier.

Grappe
Système réparti de serveurs ou de courtiers Apache Kafka qui stocke et gère les données en continu. Dans le service de diffusion en continu pour OCI avec Apache Kafka, vous pouvez créer deux types de grappes : grappe de démarrage ou grappe à haute disponibilité.
Courtier
Serveur Kafka qui stocke les données et traite les demandes des clients. Selon la charge de travail, vous pouvez créer de 1 à 30 courtiers dans chaque grappe. Chaque courtier d'une grappe est un noeud de calcul utilisé pour stocker des sujets.

Vous utilisez l'API ou l'interface de ligne de commande Apache Kafka pour créer et mettre à jour des sujets, des partitions, des enregistrements et des opérations de fournisseur et de consommateur.

Sujet
Catégories définies par l'utilisateur dans un courtier où les données sont stockées. Chaque sujet peut comporter de nombreuses partitions pour la répartition des données et le traitement en parallèle.
Partitions
Les sujets sont divisés en un nombre spécifié de partitions qui stockent des enregistrements. Les enregistrements sont ordonnés dans chaque partition et chaque enregistrement est affecté à un décalage unique qui augmente de façon séquentielle.
Records
Paires de données de valeur de clé écrites dans des rubriques et lues à partir de celles-ci.
Fournisseur
Application qui écrit des enregistrements sur des sujets.
Grand public
Application qui lit les enregistrements à partir de sujets.
Groupe de coordonnateurs
Instance de coordinateur interne au sein de chaque cluster qui assure le suivi des activités d'un cluster, telles que les partitions. Une grappe avec 2 courtiers ou moins obtient une grappe de coordinateurs de noeud unique. Les grappes de taille supérieure bénéficient d'une grappe de coordonnateurs à 3 noeuds. Vous ne pouvez pas voir les détails de la grappe de coordonnateurs.

Limites de service

Limite Valeur
Grappes par location 5
Courtiers par grappe 30
Courtiers par location 150
Stockage

50 Go minimum à 5 To maximum par courtier

150 To maximum par grappe

Configuration de grappe 100

Versions de configuration

(Nombre de versions pour chaque configuration de grappe)

10
Trafic entrant par grappe aucune limite
Trafic sortant par grappe aucune limite
Trafic entrant par partition aucune limite
Trafic sortant par partition aucune limite
Partitions aucune limite
Nombre maximal de connexions client aucune limite
Nombre maximal de tentatives de connexion aucune limite
Nombre maximal de demandes (par seconde) aucune limite
Taille maximale des messages (Mo) aucune limite
Taille maximale de la demande (Mo) aucune limite
Nombre maximal d'octets extraits (Mo) aucune limite
Clés d'API Non applicable
Liste de contrôle d'accès aucune limite
Configurations 100 par location
Mises à jour de configuration aucune limite

Limites de fonctions

Fonction Soutien technique
Une seule sémantique Oui
Stockage compacté basé sur les clés Oui
Connecteurs personnalisés Nombre
Prise en charge native de ksqlDB Nombre
Réseau public Nombre
Réseau privé Oui
OAuth Nombre
Journaux de vérification Oui
Clés de chiffrement autogérées Nombre
Mise à l'échelle élastique automatique Nombre
Partage de flux Nombre
Quotas du client Oui

Types de grappe

Dans le service de diffusion en continu pour OCI avec Apache Kafka, vous pouvez créer deux types de grappe.

Grappe de démarrage
Conçu à des fins de test et de développement lorsque la haute disponibilité n'est pas une exigence critique. Une grappe de démarrage offre une configuration flexible où les grappes peuvent avoir entre 1 et 30 courtiers.
Grappe hautement disponible
Conçu pour les environnements de production où la haute disponibilité est essentielle. Ces grappes sont configurées avec un minimum de 3 courtiers répartis dans plusieurs domaines de disponibilité ou d'erreur afin d'assurer la redondance et la tolérance aux pannes. La grappe peut évoluer jusqu'à un maximum de 30 courtiers, offrant fiabilité et résilience pour les charges de travail critiques.

Options par défaut de la grappe

Vérifiez les options par défaut suivantes pour une grappe Kafka.

Connectivité
Par défaut, toutes les grappes Kafka sont créées avec une connectivité privée et sont accessibles depuis le VCN et le sous-réseau spécifiés lors de la création de la grappe. If more VCNs need access to the Kafka cluster, configure VCN peering.
Quotas de disque du courtier
Par défaut, les quotas de disque du broker sont appliqués afin d'assurer la stabilité et d'éviter une utilisation excessive des ressources de disque. Lorsqu'un disque de courtier atteint une capacité de 97 %, l'exploitation du producteur est limitée par le débit, tandis que les opérations du consommateur ne sont pas affectées et continuent de fonctionner comme prévu. Lorsqu'un disque de courtier atteint une capacité de 98 %, toutes les opérations de producteur sont bloquées tandis que les opérations de consommateur peuvent continuer à consommer des événements et à valider des décalages sans interruption. Vous pouvez modifier ce comportement par défaut et définir des quotas de stockage personnalisés dans un fichier de configuration de grappe.
Fichier de configuration de grappe
Lorsque vous créez une grappe Kafka, le fichier de configuration de grappe est créé avec les propriétés par défaut en fonction du type de grappe. Les paramètres de propriété sont conçus pour équilibrer la fiabilité, la durabilité et la facilité d'utilisation. Vous pouvez utiliser le fichier par défaut ou en créer un personnalisé. Pour obtenir la liste des propriétés configurables et non configurables, voir Gestion des configurations de grappe.

Grappe hautement disponible

allow.everyone.if.no.acl.found=true
auto.create.topics.enable=false
leader.imbalance.per.broker.percentage=1
default.replication.factor=3
offsets.topic.replication.factor=3
min.insync.replicas=2
transaction.state.log.min.isr=2
transaction.state.log.replication.factor=3
Propriété Par défaut Fonction
allow.everyone.if.no.acl.found vraie Si aucune liste de contrôle d'accès n'est trouvée pour une ressource, tous les utilisateurs sont autorisés à accéder à la grappe.
auto.create.topics.enable fausse Les sujets ne sont pas créés automatiquement, ils doivent être créés explicitement pour un meilleur contrôle.
leader.imbalance.per.broker.percentage 1 Contrôle le seuil de déséquilibre des dirigeants par courtier pour le rééquilibrage.
default.replication.factor 3 De nouveaux sujets sont créés avec 3 répliques pour une durabilité élevée.
offsets.topic.replication.factor 3 Le sujet des décalages internes est répliqué 3 fois pour la résilience.
min.insync.replicas 2 Au moins 2 répliques doivent reconnaître une écriture pour la durabilité.
transaction.state.log.min.isr 2 Nombre minimal de répliques synchronisées pour le journal d'état des transactions.
transaction.state.log.replication.factor 3 Facteur de réplication pour le journal d'état des transactions.

Grappe de démarrage

allow.everyone.if.no.acl.found=true
auto.create.topics.enable=false
leader.imbalance.per.broker.percentage=1
default.replication.factor=1
offsets.topic.replication.factor=1
min.insync.replicas=1
transaction.state.log.min.isr=1
transaction.state.log.replication.factor=1
Propriété Par défaut Fonction
allow.everyone.if.no.acl.found vraie Si aucune liste de contrôle d'accès n'est trouvée pour une ressource, tous les utilisateurs sont autorisés à accéder à la grappe.
auto.create.topics.enable fausse Les sujets ne sont pas créés automatiquement, ils doivent être créés explicitement pour un meilleur contrôle.
leader.imbalance.per.broker.percentage 1 Contrôle le seuil de déséquilibre des dirigeants par courtier pour le rééquilibrage.
default.replication.factor 1 De nouvelles rubriques sont créées avec 1 réplique (aucune redondance).
offsets.topic.replication.factor 1 Le sujet des décalages internes a une seule réplique.
min.insync.replicas 1 Seulement 1 réplique doit accuser réception d'une écriture.
transaction.state.log.min.isr 1 Nombre minimal de répliques synchronisées pour le journal d'état des transactions.
transaction.state.log.replication.factor 1 Facteur de réplication pour le journal d'état des transactions.

Planifier la taille de la grappe et le stockage

Consultez les directives de dimensionnement des grappes pour optimiser et tirer le meilleur parti du service de diffusion en continu pour OCI avec une grappe Apache Kafka.

Directives générales

Si vous avez besoin de plus de débit, vous pouvez mettre en oeuvre les actions suivantes :
  • Augmenter le nombre de courtiers dans la grappe
  • Augmenter le nombre de partitions dans le cluster
  • Augmenter le nombre d'OCPU par courtier
Si vous avez besoin d'une latence plus faible, vous pouvez mettre en oeuvre les actions suivantes :
  • Utiliser des courtiers plus grands avec une mémoire plus élevée
  • Utiliser des lots plus petits, des linger.ms plus courts et optimiser le chemin d'accès au réseau

Si la durabilité est plus importante que la latence, envisagez de régler le paramètre de configuration du fournisseur de portlets acks à all.

Le fait de ne pas planifier et configurer la grappe a une incidence sur les performances de la grappe.

  • La configuration de moins de courtiers entraîne un faible débit, une latence élevée et une surcharge de courtier.
  • La configuration de moins de partitions entraîne un parallélisme médiocre et une faible utilisation par les consommateurs.
  • La configuration de courtiers sous-alimentés entraîne une latence d'extraction ou de production élevée, des problèmes de récupération de mémoire et des courtiers instables.
  • La configuration d'un trop grand nombre de partitions sur de plus petits courtiers entraîne une utilisation élevée de la mémoire, un gonflement des métadonnées et un rééquilibrage instable.

Valeurs de référence de la performance

Vérifiez les mesures de performance sur les grappes Kafka avec les processeurs basés sur ARM, le facteur de réplication réglé à 3 et le paramètre de configuration de fournisseur acks réglé à 1.

Configuration du courtier Partitions Débit maximal du fournisseur Débit maximal de consommateur Latence
3 courtiers, chacun avec la configuration suivante :
  • 2 A1 OCPU
  • 12 Go de mémoire
  • 200 Go de stockage par blocs
  • 10 UPV
1,000 161.21 Mo par seconde 394.38 Mo par seconde 50.70 ms
3 courtiers, chacun avec la configuration suivante :
  • 12 A1 OCPU
  • 72 Go de mémoire
  • 300 Go de stockage par blocs
  • 10 UPV
2,000 368.76 Mo par seconde 678.39 Mo par seconde 27.79 ms
3 courtiers, chacun avec la configuration suivante :
  • 20 AI OCPU
  • 120 Go de mémoire
  • 500 Go de stockage par blocs
  • 10 UPV
2,000 505.13 Mo par seconde 710.82 Mo par seconde 21.11 ms
18 courtiers, chacun avec la configuration suivante :
  • 2 AI OCPU
  • 12 Go de mémoire
  • 300 Go de stockage par blocs
  • 10 UPV
2,000 379.39 Mo par seconde 690.27 Mo par seconde 80.18 ms
18 courtiers, chacun avec la configuration suivante :
  • 12 AI OCPU
  • 72 Go de mémoire
  • 500 Go de stockage par blocs
  • 10 UPV
4,000 788.73 Mo par seconde 998.11 Mo par seconde 74.53 ms
18 courtiers, chacun avec la configuration suivante :
  • 20 AI OCPU
  • 120 Go de mémoire
  • 1000 Go de stockage par blocs
  • 10 UPV
4,000 1.08 Go par seconde 1.15 Go par seconde 71.29 ms
30 courtiers, chacun ayant la configuration suivante :
  • 2 AI OCPU
  • 12 Go de mémoire
  • 300 Go de stockage par blocs
  • 10 UPV
4,000 617.60 Mo par seconde 1.02 Go par seconde 98.27 ms
30 courtiers, chacun ayant la configuration suivante :
  • 12 AI OCPU
  • 72 Go de mémoire
  • 500 Go de stockage par blocs
  • 10 UPV
6,000 1.65 Go par seconde 1.34 Go par seconde 65.81 ms
30 courtiers, chacun ayant la configuration suivante :
  • 20 AI OCPU
  • 120 Go de mémoire
  • 1000 Go de stockage par blocs
  • 10 UPV
6,000 2.41 Go par seconde 2.009 Go par seconde 56.82 ms

Les mesures de performance dépendent de plusieurs facteurs et les améliorations d'une configuration pourraient entraîner des compromis dans d'autres.

Par exemple, les nombres de débit varient en fonction de facteurs tels que la taille du message, le type de compression, la taille du lot et linger.ms. Une taille de lot plus élevée peut augmenter le débit, mais peut également entraîner une latence plus élevée.

L'augmentation du nombre de partitions améliore généralement le débit et améliore les performances des producteurs. Cependant, il augmente également l'utilisation des ressources des producteurs et des consommateurs et introduit davantage de frais généraux liés aux métadonnées. Cela peut ralentir l'élection des dirigeants et la gestion des répliques synchronisées (ISR), augmentant potentiellement la latence des demandes de production et d'extraction.

Vous devez régler les paramètres en fonction des besoins.

  • Pour une latence plus faible, réduisez batch.size et linger.ms et évitez une compression importante.
  • Pour optimiser le débit, augmentez batch.size, activez la compression et utilisez plus de partitions et de courtiers pour une mise à l'échelle horizontale.

Surveillez toujours de près les mesures de latence et de débit et réglez la grappe de manière itérative en fonction de modèles de charge de travail réels.

Migrer

Vous pouvez migrer des données d'une grappe Apache Kafka autogérée vers un service de diffusion en continu pour OCI avec une grappe Apache Kafka.

La solution recommandée pour ce cas d'utilisation de migration consiste à créer un connecteur MirrorMaker 2.0 dans une grappe de connexion.

Voici un exemple de configuration client.properties :
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
ssl.truststore.location=</path/to/truststore.jks>
ssl.truststore.password=<truststore-password>
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="<username>" password="<password>";