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:

Kafka client-Unterstützung in den Tarifen Standard, Enterprise und Lite.
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

Zusammenfassung der Kundenbetreuung
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

Liberty-Beispiel

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_endpoints als Liste der Bootstrap-Server und übergeben Sie diese Zeichenfolge mit Host/Port-Paaren an Ihren Client Kafka.
  • Verwenden Sie die Eigenschaften user und api_key als 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_ENDPOINTS als Liste der Bootstrap-Server und übergeben Sie diese Zeichenfolge mit Host/Port-Paaren an Ihren Client Kafka.
  • IAMOAuthBearerLoginCallbackHandler wird vom JAR-Paket com.ibm.cloud.eventstreams:oauth-client:+ bereitgestellt.
  • Der Token-Endpunkt von IBM Cloud® Identity and Access Management https://iam.cloud.ibm.com/identity/token ist 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/keys ist für die Validierung des Tokens konfiguriert.
  • grant_type in sasl.jaas.config ist urn:ibm:params:oauth:grant-type:apikey
  • apikey in sasl.jaas.config ist 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_type in sasl.jaas.config ist urn:ibm:params:oauth:grant-type:cr-token.
  • profile_id in sasl.jaas.config ist 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_token in sasl.jaas.config ist 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 AccessTokenProvider ist erforderlich.
  • librdkafka: Eine Implementierung des Callback oauthbearer_token_refresh_cb ist 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 .


  1. 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. ↩︎