Konzepte in Streaming mit Apache Kafka
Um OCI Streaming mit Apache Kafka besser zu verstehen, lesen Sie einige Begriffe und Konzepte.
Bestimmungen
- Apache Kafka
- Apache Kafka ist eine Open-Source-Event-Streaming-Plattform. Es läuft als verteiltes System, das aus Servern und Clients besteht. Mit OCI Streaming mit Apache Kafka können Sie vollständig verwaltete Kafka-Cluster in einem Mandanten mit 100% Kompatibilität mit Apache Kafka ausführen.
Mit der OCI-Konsole, -API oder -CLI können Sie Cluster und Broker erstellen und aktualisieren.
- Cluster
- Ein verteiltes System von Apache Kafka-Servern oder -Brokern, die Streaming-Daten speichern und verwalten. In OCI Streaming mit Apache Kafka können Sie zwei Clustertypen erstellen: Startcluster oder High Availability-Cluster.
- Makler
- Ein Kafka-Server, der Daten speichert und Clientanforderungen verarbeitet. Je nach Workload können Sie in jedem Cluster 1-30 Broker erstellen. Jeder Broker in einem Cluster ist ein Compute Node, der zum Speichern von Themen verwendet wird.
Mit der Apache Kafka-API oder -CLI können Sie Themen, Partitionen, Datensätze sowie Producer- und Consumer-Vorgänge erstellen und aktualisieren.
- Topic
- Benutzerdefinierte Kategorien in einem Broker, in dem Daten gespeichert werden. Jedes Thema kann viele Partitionen für die Datenverteilung und parallele Verarbeitung enthalten.
- Partitionen
- Themen werden in eine vom Benutzer angegebene Anzahl von Partitionen aufgeteilt, in denen Datensätze gespeichert werden. Datensätze werden innerhalb jeder Partition sortiert, und jedem Datensatz wird ein eindeutiger, sequenziell zunehmender Offset zugewiesen.
- Datensätze
- Schlüsselwert-Datenpaare, die in Themen geschrieben und aus diesen gelesen werden.
- Producer
- Anwendung, die Datensätze in Themen schreibt.
- Verbraucher
- Anwendung, die Datensätze aus Themen liest.
- Koordinatorcluster
- Eine interne Koordinatorinstanz in jedem Cluster, die Aktivitäten in einem Cluster verfolgt, z.B. Partitionen. Ein Cluster mit 2 oder weniger Brokern erhält ein Single Node Coordinator Cluster. Größere Cluster erhalten ein 3-Knoten-Koordinator-Cluster. Sie können keine Details des Koordinatorclusters anzeigen.
Servicelimits
Limit | Wert |
---|---|
Cluster pro Mandant | 5 |
Broker pro Cluster | 30 |
Broker pro Mandant | 150 |
Speicher |
Min. 50 GB bis Max. 5 TB pro Broker Max. 150 TB pro Cluster |
Ingress pro Cluster | Keine Grenzwerte |
Egress pro Cluster | Keine Grenzwerte |
Ingress pro Partition | Keine Grenzwerte |
Egress pro Partition | Keine Grenzwerte |
Partitionen | Keine Grenzwerte |
Max. Clientverbindungen | Keine Grenzwerte |
Maximale Verbindungsversuche | Keine Grenzwerte |
Max. Anfragen (pro Sekunde) | Keine Grenzwerte |
Max. Nachrichtengröße (MB) | Keine Grenzwerte |
Maximale Anforderungsgröße (MB) | Keine Grenzwerte |
Max. Fetch-Byte (MB) | Keine Grenzwerte |
API-Schlüssel | Nicht anwendbar |
ACLs | Keine Grenzwerte |
Konfigurationen | 100 pro Mandant |
Konfigurationsaktualisierungen | Keine Grenzwerte |
Featurelimits
Feature | Support |
---|---|
Exakt einmal Semantik | Ja |
Schlüsselbasierter komprimierter Speicher | Ja |
Benutzerdefinierte Connectors | Nein |
Native ksqlDB-Unterstützung | Nein |
Öffentliches Networking | Nein |
Privates Networking | Ja |
OAuth | Nein |
Auditlogs | Ja |
Selbstverwaltete Verschlüsselungsschlüssel | Nein |
Automatische elastische Skalierung | Nein |
Streamfreigabe | Nein |
Kundenkontingente | Ja |
Clustertypen
In OCI Streaming mit Apache Kafka können Sie zwei Clustertypen erstellen.
- Startercluster
- Entwickelt für Test- und Entwicklungszwecke, bei denen Hochverfügbarkeit keine wichtige Anforderung ist. Ein Starter-Cluster bietet ein flexibles Setup, bei dem die Cluster zwischen 1 und 30 Brokern haben können.
- High-Availability-Cluster
- Für Produktionsumgebungen vorgesehen, in denen High Availability unerlässlich ist. Diese Cluster sind mit mindestens 3 Brokern konfiguriert, die über mehrere Verfügbarkeits- oder Faultdomains verteilt sind, um Redundanz und Fehlertoleranz sicherzustellen. Das Cluster kann auf maximal 30 Broker skaliert werden und bietet Zuverlässigkeit und Resilienz für geschäftskritische Workloads.
Clusterstandardoptionen
Prüfen Sie die folgenden Standardoptionen für ein Kafka-Cluster.
- Konnektivität
- Standardmäßig werden alle Kafka-Cluster mit privater Konnektivität erstellt und können innerhalb des VCN und Subnetzes aufgerufen werden, das während der Clustererstellung angegeben wurde. Wenn mehr VCNs Zugriff auf das Kafka-Cluster benötigen, konfigurieren Sie VCN-Peering.
- Broker-Festplattenquoten
- Standardmäßig werden Broker-Festplattenkontingente durchgesetzt, um Stabilität zu gewährleisten und eine Überbeanspruchung der Datenträgerressourcen zu verhindern. Wenn eine Broker-Festplatte eine Kapazität von 97% erreicht, sind Producer-Vorgänge ratenbegrenzt, während Consumer-Vorgänge nicht betroffen sind und weiterhin wie erwartet funktionieren. Wenn eine Broker-Festplatte eine Kapazität von 98% erreicht, werden alle Producer-Vorgänge blockiert, während Consumer-Vorgänge weiterhin Ereignisse konsumieren und Offsets ohne Unterbrechung festschreiben können. Sie können dieses Standardverhalten ändern und benutzerdefinierte Speicherkontingente definieren in einer Clusterkonfigurationsdatei.
- Cluster-Konfigurationsdatei
- Wenn Sie ein Kafka-Cluster erstellen, wird die Clusterkonfigurationsdatei je nach Clustertyp mit Standardeigenschaften erstellt. Die Eigenschafteneinstellungen wurden entwickelt, um Zuverlässigkeit, Haltbarkeit und Benutzerfreundlichkeit in Einklang zu bringen. Sie können die Standarddatei verwenden oder eine benutzerdefinierte Datei erstellen. Eine Liste der konfigurierbaren und nicht konfigurierbaren Eigenschaften finden Sie unter Clusterkonfigurationen verwalten.
High Availability-Cluster
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
Eigenschaft Standardwert Zweck allow.everyone.if.no.acl.found
wahr Wenn keine ACL für eine Ressource gefunden wird, können alle Benutzer auf das Cluster zugreifen. auto.create.topics.enable
falsch Themen werden nicht automatisch erstellt. Sie müssen explizit für eine bessere Kontrolle erstellt werden. leader.imbalance.per.broker.percentage
1 Steuert den Schwellenwert für das Ungleichgewicht von Führungskräften pro Broker für das Rebalancing. default.replication.factor
3 Neue Themen werden mit 3 Replikaten für hohe Haltbarkeit erstellt. offsets.topic.replication.factor
3 Das interne Offsets-Thema wird 3-mal für Resilienz repliziert. min.insync.replicas
2 Mindestens 2 Replikate müssen einen Schreibvorgang für die Dauerhaftigkeit bestätigen. transaction.state.log.min.isr
2 Minimale synchronisierte Replikationen für das Transaktionsstatuslog. transaction.state.log.replication.factor
3 Replikationsfaktor für das Transaktionsstatuslog. Startercluster
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
Eigenschaft Standardwert Zweck allow.everyone.if.no.acl.found
wahr Wenn keine ACL für eine Ressource gefunden wird, können alle Benutzer auf das Cluster zugreifen. auto.create.topics.enable
falsch Themen werden nicht automatisch erstellt. Sie müssen explizit für eine bessere Kontrolle erstellt werden. leader.imbalance.per.broker.percentage
1 Steuert den Schwellenwert für das Ungleichgewicht von Führungskräften pro Broker für das Rebalancing. default.replication.factor
1 Neue Themen werden mit 1 Replikat (keine Redundanz) erstellt. offsets.topic.replication.factor
1 Das interne Offsets-Thema hat ein einzelnes Replikat. min.insync.replicas
1 Nur 1 Replikat muss einen Schreibvorgang bestätigen. transaction.state.log.min.isr
1 Minimale synchronisierte Replikationen für das Transaktionsstatuslog. transaction.state.log.replication.factor
1 Replikationsfaktor für das Transaktionsstatuslog.
Clustergröße und -speicher planen
Lesen Sie die Richtlinien zur Clustergröße für die Optimierung und das Beste aus einem OCI Streaming mit Apache Kafka-Cluster.
Allgemeine Richtlinien
- Erhöhen Sie die Anzahl der Broker im Cluster
- Die Anzahl der Partitionen im Cluster erhöhen
- OCPU pro Broker erhöhen
- Verwenden Sie größere Broker mit höherem Speicher
- Verwenden Sie kleinere Batches, kürzer
linger.ms
und optimieren Sie den Netzwerkpfad
Wenn die Dauerhaftigkeit wichtiger ist als die Latenz, sollten Sie den Producer-Konfigurationsparameter acks
auf all
setzen.
Wenn Sie das Cluster nicht planen und konfigurieren, wirkt sich dies auf die Clusterperformance aus.
- Die Konfiguration von weniger Brokern führt zu niedrigem Durchsatz, hoher Latenz und Brokerüberlastung.
- Die Konfiguration von weniger Partitionen führt zu schlechter Parallelität und geringer Verbrauchernutzung.
- Die Konfiguration von Brokern mit unzureichender Leistung führt zu einem hohen Abruf oder zu Latenz, GC-Problemen und instabilen Brokern.
- Die Konfiguration zu vieler Partitionen auf kleineren Brokern führt zu einer hohen Speichernutzung, einer aufgeblähten Metadaten und einem instabilen Rebalancing.
Performance-Benchmarks
Prüfen Sie die Performancemetriken für Kafka-Cluster mit Arm-basierten Prozessoren, dem Replikationsfaktor auf 3
und dem Producer-Konfigurationsparameter acks
auf 1
.
Brokerkonfiguration | Partitionen | Maximaler Producer-Durchsatz | Maximaler Consumer-Durchsatz | Latenz |
---|---|---|---|---|
3 Broker, jeder mit der folgenden Konfiguration:
|
1.000 | 161.21 MB pro Sekunde | 394.38 MB pro Sekunde | 50,70 ms |
3 Broker, jeder mit der folgenden Konfiguration:
|
2.000 | 368.76 MB pro Sekunde | 678.39 MB pro Sekunde | 27,79 ms |
3 Broker, jeder mit der folgenden Konfiguration:
|
2.000 | 505.13 MB pro Sekunde | 710.82 MB pro Sekunde | 21,11 ms |
18 Broker, jeder mit der folgenden Konfiguration:
|
2.000 | 379.39 MB pro Sekunde | 690.27 MB pro Sekunde | 80,18 ms |
18 Broker, jeder mit der folgenden Konfiguration:
|
4.000 | 788.73 MB pro Sekunde | 998.11 MB pro Sekunde | 74,53 ms |
18 Broker, jeder mit der folgenden Konfiguration:
|
4.000 | 1.08 GB pro Sekunde | 1.15 GB pro Sekunde | 71,29 ms |
30 Broker mit der folgenden Konfiguration:
|
4.000 | 617.60 MB pro Sekunde | 1.02 GB pro Sekunde | 98,27 ms |
30 Broker mit der folgenden Konfiguration:
|
6.000 | 1.65 GB pro Sekunde | 1.34 GB pro Sekunde | 65,81 ms |
30 Broker mit der folgenden Konfiguration:
|
6.000 | 2.41 GB pro Sekunde | 2.09 GB pro Sekunde | 56,82 ms |
Die Leistungskennzahlen hängen von mehreren Faktoren ab, und Verbesserungen in einer Konfiguration könnten zu Kompromissen bei anderen führen.
Beispiel: Die Durchsatzzahlen variieren je nach Faktoren wie Nachrichtengröße, Komprimierungstyp, Batchgröße und linger.ms
. Eine höhere Batch-Größe kann den Durchsatz erhöhen, aber auch zu einer höheren Latenz führen.
Die Erhöhung der Anzahl der Partitionen verbessert in der Regel den Durchsatz und verbessert die Producer-Performance. Es erhöht jedoch auch die Ressourcennutzung von Produzenten und Verbrauchern und führt zu mehr Metadaten-Overhead. Dies kann die Verwaltung von Leader-Wahlen und In-Sync-Replikaten (ISR) verlangsamen und möglicherweise die Latenz von Produktions- und Abrufanforderungen erhöhen.
Sie müssen die Parameter entsprechend den Anforderungen optimieren.
- Um die Latenz zu optimieren, reduzieren Sie
batch.size
undlinger.ms
, und vermeiden Sie eine starke Komprimierung. - Um den Durchsatz zu maximieren, erhöhen Sie
batch.size
, aktivieren Sie die Komprimierung, und verwenden Sie mehr Partitionen und Broker, um horizontal zu skalieren.
Überwachen Sie Latenz- und Durchsatzmetriken immer genau, und optimieren Sie das Cluster iterativ basierend auf realen Workload-Mustern.
Migrieren
Sie können Daten aus einem selbstverwalteten Apache Kafka-Cluster in ein OCI Streaming mit Apache Kafka-Cluster migrieren.
Die empfohlene Lösung für diesen Migrationsanwendungsfall ist das Erstellen eines MirrorMaker 2.0-Connectors in einem Connect-Cluster.
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>";