Kafka-API verwenden
Mit Kafka steht eine umfassende Palette von APIs und Clients für eine Vielzahl verschiedener Sprachen zur Verfügung. APIs umfassen die Kern-API, die Streams-API und die Connect-API.
- Kern-API von Kafka (Consumer-, Producer- und Admin-API) Zum Senden und Empfangen von Nachrichten direkt von einem oder mehreren Kafka-Topics. Der Kafka-Admin-Client stellt über die Kafka-API eine einfache Schnittstelle zur Verwaltung von Kafka-Ressourcen bereit. Sie können Themen erstellen, löschen und verwalten. Darüber hinaus kann der Admin-Client zum Verwalten von Consumergruppen und Konfigurationen verwendet werden.
- Streams-API Eine übergeordnete Stream-Verarbeitungs-API zum einfachen Konsumieren, Umwandeln und Erzeugen von Ereignissen zwischen Themen.
- API verbinden Ein Framework, das wiederverwendbare oder Standardintegrationen ermöglicht, um Ereignisse in und aus externen Systemen, wie z. B. Datenbanken, zu streamen.
Die folgende Tabelle enthält eine Zusammenfassung der Verwendungsmöglichkeiten mit Event Streams:
| Enterprise-Plan | Standard-Plan | Lite-Plan | |
|---|---|---|---|
| Kafka-Version in Cluster | Kafka 3.8 | Kafka 3.8 | Kafka 3.8 |
| Empfohlene Mindestversion des Kafka-Clients | Kafka 2.6.0, oder später | Kafka 2.6.0, oder später | Kafka 2.6.0, oder später |
| Unterstützte Clientversionen | Siehe Support-Zusammenfassung für alle empfohlenen Clients. | ||
| Kafka Connect unterstützt | Ja | Ja | Nein |
| Kafka Streams unterstützt | Ja | Ja | Nein |
| ksqlDB unterstützt | Ja | Nein | Nein |
| Authentifizierungsanforderungen | Der Client muss die Authentifizierung mit dem SASL-Plain-Mechanismus unterstützen und die SNI-Erweiterung (Server Name Indication) des TLSv1.2-Protokolls verwenden. | Der Client muss die Authentifizierung mit dem SASL-Plain-Mechanismus unterstützen und die SNI-Erweiterung (Server Name Indication) des TLSv1.2-Protokolls verwenden. | Der Client muss die Authentifizierung mit dem SASL-Plain-Mechanismus unterstützen und die SNI-Erweiterung (Server Name Indication) des TLSv1.2-Protokolls verwenden. |
Kafka-Client zur Verwendung mit Event Streams auswählen
Der offizielle Client für die Kafka-API ist in Java geschrieben und enthält die neuesten Features und Fehlerkorrekturen. Weitere Informationen zu dieser API finden Sie unter Kafka Producer API 3.8 und Kafka Consumer API 3.8.
Führen Sie für andere Sprachen einen der folgenden Clients aus, die alle mit Event Streamsgetestet wurden:
Zusammenfassung der Unterstützung für alle empfohlenen Clients
| Kunde | Sprache | Empfohlene Version | Unterstützte Mindestversion [1] | Link zum Beispiel |
|---|---|---|---|---|
| Offizieller Apache Kafka -Client: | ||||
| Apache Kafka-Client | Java | 3.8.1, oder später | 2.5.0 | Beispiel für Java-Konsole |
| Clients anderer Anbieter: | ||||
| konfluent-kafka-javascript | Node.js | Neueste | 1.0.0 | |
| confluent-kafka-python | Python | Neueste | 1.4.0 | Kafka Python-Beispiel |
| confluent-kafka-go | Los | Neueste | 1.4.0 | |
| librdkafka | C oder C++ | Neueste | 1.4.0 | |
| node-rdkafka | Node.js | Neueste | 2.8.0 | Node.js-Beispiel |
| SaramaCity in Japan | Los | Neueste | 1.40.0 | Sarama-Beispiele |
Clients mit Event Streams verbinden
Informationen zur Konfiguration des Java-Clients für die Verbindung mit Event Streams finden Sie in Client konfigurieren.
Kafka-API-Client konfigurieren
Um eine Verbindung herzustellen, müssen die Clients so konfiguriert sein, dass sie mindestens SASL PLAIN oder SASL OAUTHBEARER über TLSv1.2 verwenden und einen Benutzernamen sowie eine Liste der Bootstrap-Server benötigen. TLSv1.2 stellt sicher, dass die Verbindungen verschlüsselt werden, und überprüft die Authentizität der Makler (um Man-in-the-Middle-Angriffe zu verhindern). SASL erzwingt die Authentifizierung für alle Verbindungen.
Um den Benutzernamen, das Kennwort und die Liste der Bootstrap-Server abzurufen, ist ein Dienstanmeldungsobjekt oder ein Dienstschlüssel für die Dienstinstanz erforderlich. Weitere Informationen zum Erstellen dieser Objekte finden Sie unter Verbindung zu Event Streams herstellen.
SASL PLAIN verwenden
Verwenden Sie die folgenden Zeichenfolgen und Eigenschaften:
- Verwenden Sie die Zeichenfolge
bootstrap_endpointsals Liste der Bootstrap-Server und übergeben Sie diese Zeichenfolge mit Host/Port-Paaren an Ihren Client Kafka. - Verwenden Sie die Eigenschaften
userundapi_keyals Benutzernamen und Kennwort.
Für einen Java-Client zeigt das folgende Beispiel den minimalen Satz von Eigenschaften, wobei ${USERNAME}, ${PASSWORD} und ${BOOTSTRAP_ENDPOINTS} durch die zuvor abgerufenen Werte zu ersetzen sind.
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="${USERNAME}" password="${PASSWORD}";
security.protocol=SASL_SSL
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
Wenn Sie einen Kafka-Client vor der Version 0.10.2.1 verwenden, wird die Eigenschaft sasl.jaas.config nicht unterstützt, und Sie müssen stattdessen die Client-Konfiguration in einer JAAS-Konfigurationsdatei angeben.
Verwendung von SASL OAUTHBEARER mit Java Clients v3.4- 4.0
Bevor Sie den SASL-Mechanismus für den Java-Client konfigurieren, müssen Sie zwei Voraussetzungen erfüllen:
- Die minimal unterstützte Kafka Java Client-Version ist 3.4 ( 3.6 oder höher ist vorzuziehen).
- Ein zusätzliches jar-Paket muss von Maven Central heruntergeladen und im Klassenpfad verfügbar gemacht werden.
Wenn Maven als Build-System verwendet wird, fügen Sie die folgenden Informationen in der Datei pom.xml im Abschnitt Abhängigkeiten hinzu:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>1.4.0</version>
</dependency>
Wenn Gradle im Build-System verwendet wird, fügen Sie der Datei build.gradle im Abschnitt Abhängigkeiten die folgenden Informationen hinzu:
implementation com.ibm.cloud.eventstreams:oauth-client:1.4.0
IBM Cloud® Identity and Access Management Der Identity Service unterstützt mehrere Möglichkeiten zur Erzeugung eines Überbringer-Tokens, von denen zwei von dieser Oauth-Client-Bibliothek unterstützt werden:
- API-Schlüssel
- Vertrauenswürdiges Profil und Token für Rechenressourcen
Verwendung von SASL OAUTHBEARER mit API-Schlüssel
Verwenden Sie die folgenden Zeichenfolgen und Eigenschaften:
- Verwenden Sie die Zeichenfolge
BOOTSTRAP_ENDPOINTSals Liste der Bootstrap-Server und übergeben Sie diese Zeichenfolge mit Host/Port-Paaren an Ihren Client Kafka. IAMOAuthBearerLoginCallbackHandlerwird vom JAR-Paketcom.ibm.cloud.eventstreams:oauth-client:+bereitgestellt.- Der Token-Endpunkt von IBM Cloud® Identity and Access Management
https://iam.cloud.ibm.com/identity/tokenist so konfiguriert, dass er ein Token aus dem API-Schlüssel generiert, indem er den in jaas config angegebenen Grant-Typ verwendet. Sie erfolgt auf der Client-Seite, so dass der API-Schlüssel nie an die Server-Seite gesendet wird, was mehr Sicherheit bietet als ein langlebiger API-Schlüssel. - Der Cloud Identity and Access Management
https://iam.cloud.ibm.com/identity/keysist für die Validierung des Tokens konfiguriert. grant_typeinsasl.jaas.configisturn:ibm:params:oauth:grant-type:apikeyapikeyinsasl.jaas.configist der API-Schlüssel, der zur Generierung des Überbringer-Tokens auf der Client-Seite verwendet wird. Sie kann entweder von einer Benutzer- oder einer Service-ID stammen.
Für einen Java-Client zeigt das folgende Beispiel den minimalen Satz von Eigenschaften, wobei Sie ${BOOTSTRAP_ENDPOINTS} und ${APIKEY} durch die zuvor abgerufenen Werte ersetzen.
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.cloud.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:apikey" apikey="${APIKEY}";
Verwendung von SASL OAUTHBEARER mit vertrauenswürdigem Profil und Compute Resource Token
Alle Eigenschaften sind dieselben wie für den API-Schlüssel beschrieben, nur die sasl.jaas.config ist anders.
grant_typeinsasl.jaas.configisturn:ibm:params:oauth:grant-type:cr-token.profile_idinsasl.jaas.configist ein Dateispeicherort, der die vertrauenswürdige Profil-ID speichert. Diese Datei kann in einen Kubernetes-Pod mit Kafka-Clientcode als schreibgeschütztes Volume eingebunden und dem Kafka-Clientcode zur Verfügung gestellt werden.cr_tokeninsasl.jaas.configist ein Dateispeicherort, der Dienstkontotoken von einem Kubernetes-Pod speichert, auf dem Kafka-Clientcode ausgeführt wird. Weitere Informationen finden Sie unter Was ist ein Dienstkonto-Token?
Zum Beispiel:
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:cr-token" profile_id="${TRUSTED_PROFILE_ID_FILE_PATH}" cr_token="${SERVICE_ACCOUNT_TOKEN_FILE_PATH}";
Weitere Einzelheiten finden Sie unter Wie man ein vertrauenswürdiges Profil einrichtet.
Der Quellcode von oauth client bezieht sich auf das Event Streams Java SDK.
Der Beispiel-Clientcode bezieht sich auf das Beispiel Event Streams.
Verwendung von SASL OAUTHBEARER mit Java Clients v4.1 und höher
Wenn Sie einen Kafka Java Client auf v4.1 oder höher verwenden, muss der Client eine neuere Version des Event Streams oauth-Clients verwenden, der sich auf den Standard-Callback-Handler von Kafka und einen geeigneten Token Retriever stützt.
Wenn Maven als Build-System verwendet wird, fügen Sie die folgenden Informationen in der Datei pom.xml im Abschnitt Abhängigkeiten hinzu:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>2.0.0</version>
</dependency>
Wenn Gradle im Build-System verwendet wird, fügen Sie der Datei build.gradle im Abschnitt Abhängigkeiten die folgenden Informationen hinzu:
implementation com.ibm.cloud.eventstreams:oauth-client:2.0.+
Der IBM Cloud® Identity and Access Management Identity Service unterstützt mehrere Möglichkeiten zur Erzeugung eines Überbringer-Tokens, von denen zwei von dieser Oauth-Client-Bibliothek unterstützt werden:
- API-Schlüssel
- Vertrauenswürdiges Profil und Token für Rechenressourcen
Verwendung von SASL OAUTHBEARER mit API-Schlüssel
Verwenden Sie die folgenden Zeichenfolgen und Eigenschaften zusätzlich zu der obligatorischen Eigenschaft bootstrap.servers und den spezifischen Erzeuger-, Verbraucher- und Verwaltungseinstellungen.
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
grant_type="urn:ibm:params:oauth:grant-type:apikey" \
apikey="${YOUR_IBM_CLOUD_API_KEY}";
sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginCallbackHandler
sasl.oauthbearer.jwt.retriever.class=com.ibm.cloud.eventstreams.oauth.client.IAMTokenRetriever
sasl.oauthbearer.token.endpoint.url=https://private.iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://private.iam.cloud.ibm.com/identity/keys
Verwendung von SASL OAUTHBEARER mit einem vertrauenswürdigen Profil und Compute Resource Token in Container-Umgebungen
Weitere Informationen finden Sie unter Erzeugen eines IAM-Tokens für eine Compute-Ressource.
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
grant_type="urn:ibm:params:oauth:grant-type:cr-token" \
cr_token="/path/to/cr-token-file" \
profile_id="/path/to/profile-id-file";
sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginCallbackHandler
sasl.oauthbearer.jwt.retriever.class=com.ibm.cloud.eventstreams.oauth.client.IAMTokenRetriever
sasl.oauthbearer.token.endpoint.url=https://private.iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://private.iam.cloud.ibm.com/identity/keys
Systemeigenschaft org.apache.kafka.sasl.oauthbearer.allowed.urls
Unter Kafka 4.0 benötigt der Client eine Systemeigenschaft, um die zulässigen URLs von SASL OAUTHBEARER-Token und jwks-Endpunkten festzulegen.
Weitere Informationen finden Sie unter Systemeigenschaften.
Bei Verwendung der CLI-Client-Shell-Skripte, die in der Apache Kafka-Distribution enthalten sind, kann die Systemeigenschaft auch über die Umgebungsvariable KAFKA_OPTS festgelegt werden.
export KAFKA_OPTS="-Dorg.apache.kafka.sasl.oauthbearer.allowed.urls=https://private.iam.cloud.ibm.com/identity/keys,https://private.iam.cloud.ibm.com/identity/token,https://api.metadata.cloud.ibm.com/identity/v1/iam_tokens"
Verwendung von SASL OAUTHBEARER mit nicht Java Clients
Informationen zur Implementierung der Unterstützung für OAUTHBEARER für andere Kafka-Clients finden Sie in der zugehörigen Dokumentation. Zum Beispiel:
- sarama: Eine Implementierung der Schnittstelle
AccessTokenProviderist erforderlich. - librdkafka: Eine Implementierung des Callback
oauthbearer_token_refresh_cbist erforderlich.
Informationen zum Generieren eines IBM Cloud-IAM-Tokens unter Verwendung eines API-Schlüssels finden Sie im Dokument IBM Cloud® Identity and Access Management .
-
Die früheste Version, die in kontinuierlichen Tests validiert wurde. In der Regel handelt es sich dabei um die erste Version, die innerhalb der letzten 12 Monate verfügbar war, oder um eine neuere Version, wenn wesentliche Probleme bekannt sind. Wenn Sie keinen der aufgeführten Clients ausführen können, können Sie andere Clients von Drittanbietern verwenden, die die folgenden Mindestanforderungen erfüllen (z. B. librdkafka ). 1. Unterstützt Kafka 1.40oder höher. 2. Kann sich über SASL PLAIN mit TLSv1.2 verbinden und authentifizieren. 3. Unterstützt die SNI-Erweiterungen für TLS, bei denen der Hostname des Servers im TLS Handshake enthalten ist. 4. Unterstützt Elliptic Curve Cryptography. Verwenden Sie in allen Fällen die neueste Version des Clients. ↩︎