Utilizzo dell'API Kafka
Kafka fornisce un'ampia gamma di API e client in una vasta gamma di linguaggi. Le API includono API core, API Streams e API Connect.
- API principali di Kafka (API Consumer, Producer e Admin) Utilizza per inviare e ricevere i messaggi direttamente da uno o più argomenti Kafka. Il client Kafka Admin fornisce un'interfaccia semplice tramite l'API Kafka per la gestione delle risorse Kafka. È possibile creare, eliminare e gestire argomenti. Puoi utilizzare il client Admin anche per gestire i gruppi di consumatori e le configurazioni.
- API flussi Un'API di elaborazione dei flussi di livello superiore per consumare, trasformare e produrre facilmente eventi tra gli argomenti.
- API di connessione Un framework che consente integrazioni riutilizzabili o standard per lo streaming di eventi verso e da sistemi esterni, come i database.
La seguente tabella riepiloga cosa puoi utilizzare con Event Streams:
| piano Enterprise | Piano Standard | Piano Lite | |
|---|---|---|---|
| **Versione Kafka sul cluster ** | Kafka 3.8 | Kafka 3.8 | Kafka 3.8 |
| Versione client Kafka minima consigliata | Kafka 2.6.0, o più tardi | Kafka 2.6.0, o più tardi | Kafka 2.6.0, o più tardi |
| Versioni client supportate | Consultare Riepilogo di supporto per tutti i client consigliati | ||
| Kafka Connect supportato | Sì | Sì | No |
| Kafka Streams supportati | Sì | Sì | No |
| ksqlDB supportato | Sì | No | No |
| Requisiti di autenticazione | Il client deve supportare l'autenticazione tramite il meccanismo SASL Plain e utilizzare l'estensione Server Name Indication (SNI) del protocollo TLSv1.2. | Il client deve supportare l'autenticazione tramite il meccanismo SASL Plain e utilizzare l'estensione Server Name Indication (SNI) del protocollo TLSv1.2. | Il client deve supportare l'autenticazione tramite il meccanismo SASL Plain e utilizzare l'estensione Server Name Indication (SNI) del protocollo TLSv1.2. |
Scelta di un client Kafka da utilizzare con Event Streams
Il client ufficiale per l'API Kafka è scritto in Java e di conseguenza contiene le funzioni e le correzioni di bug più recenti. Per ulteriori informazioni su questa API, vedere Kafka Producer API 3.8 e Kafka Consumer API 3.8.
Per altre lingue, esegui uno dei seguenti client, tutti verificati con Event Streams.
Riepilogo del supporto per tutti i client consigliati
| Client | Lingua | Versione consigliata | Versione minima supportata [1] | Link all'esempio |
|---|---|---|---|---|
| Client ufficiale di Apache Kafka: | ||||
| Client Apache Kafka | Java | 3.8.1, o più tardi | 2.5.0 | Java campione della console |
| Clienti terzi: | ||||
| confluent-kafka-javascript | Node.js | Più recente | 1.0.0 | |
| kafka - python confluente | Python | Più recente | 1.4.0 | EsempioKafka Python |
| confluente - kafka - go | Vai | Più recente | 1.4.0 | |
| librdkafka | C o C++ | Più recente | 1.4.0 | |
| nodo - rdkafka | Node.js | Più recente | 2.8.0 | EsempioNode.js |
| sarama | Vai | Più recente | 1.40.0 | Esempi Sarama |
Collegamento del tuo client a Event Streams
Per informazioni su come configurare il tuo client Java per il collegamento a Event Streams, consulta Configurazione del tuo client.
Configurazione del tuo client API Kafka
Per stabilire una connessione, i client devono essere configurati per utilizzare almeno SASL PLAIN o SASL OAUTHBEARER su TLSv1.2 e per richiedere un nome utente e un elenco dei server di bootstrap. TLSv1.2 garantisce che le connessioni siano codificate e convalida l'autenticità dei broker (per evitare attacchi man - in - the - middle). SASL applica l'autenticazione su tutte le connessioni.
Per recuperare il nome utente, la password e l'elenco dei server di bootstrap, è necessario un oggetto credenziali di servizio o una chiave di servizio per l'istanza del servizio. Per ulteriori informazioni sulla creazione di questi oggetti, vedere Connessione a Event Streams.
Utilizzo di SASL PLAIN
Utilizzare le seguenti stringhe e proprietà.
- Utilizza la stringa
bootstrap_endpointscome elenco di server di avvio e passa questa stringa di coppie host e porta al tuo client Kafka. - Utilizzare le proprietà
usereapi_keycome nome utente e password.
Per un client Java, l'esempio seguente mostra l'insieme minimo di proprietà, dove ${USERNAME}, ${PASSWORD} e ${BOOTSTRAP_ENDPOINTS} devono essere sostituiti dai valori recuperati in precedenza.
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
Se si utilizza un client Kafka precedente alla versione 0.10.2.1, la proprietà sasl.jaas.config non è supportata e occorre fornire la configurazione del client in un file di configurazione JAAS.
Utilizzo di SASL OAUTHBEARER con i client Java v3.4- 4.0
Prima di configurare il meccanismo SASL per il client Java, sono necessari due prerequisiti:
- La versione minima supportata del client Kafka Java è 3.4 (è preferibile 3.6 o superiore).
- È necessario scaricare un pacchetto jar aggiuntivo da Maven Central e renderlo disponibile nel classpath.
Se nel sistema di compilazione si usa Maven, aggiungere le seguenti informazioni al file pom.xml nella sezione delle dipendenze:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>1.4.0</version>
</dependency>
Se Gradle è usato nel sistema di compilazione, aggiungere le seguenti informazioni al file build.gradle nella sezione delle dipendenze:
implementation com.ibm.cloud.eventstreams:oauth-client:1.4.0
IBM Cloud® Identity and Access Management Identity Service supporta diversi modi per generare un token bearer, due dei quali sono supportati da questa libreria client oauth:
- chiave API
- Profilo attendibile e token della risorsa di calcolo
Utilizzo di SASL OAUTHBEARER con chiave API
Utilizzare le seguenti stringhe e proprietà.
- Utilizza la stringa
BOOTSTRAP_ENDPOINTScome elenco di server di avvio e passa questa stringa di coppie host e porta al tuo client Kafka. IAMOAuthBearerLoginCallbackHandlerviene fornita dal package jarcom.ibm.cloud.eventstreams:oauth-client:+.- Il token endpoint di IBM Cloud® Identity and Access Management
https://iam.cloud.ibm.com/identity/tokenè configurato per generare un token dalla chiave API, utilizzando il tipo di concessione specificato nella configurazione di jaas. Viene eseguita sul lato client, quindi la chiave API non viene mai inviata al lato server e questo garantisce una maggiore sicurezza rispetto a una chiave API a lunga durata. - L'endpoint chiave di Cloud Identity and Access Management
https://iam.cloud.ibm.com/identity/keysè configurato per convalidare il token. grant_typeinsasl.jaas.configèurn:ibm:params:oauth:grant-type:apikeyapikeyinsasl.jaas.configè la chiave API usata per generare il token del portatore sul lato client. Può provenire da un ID utente o da un ID servizio.
Per un client Java, l'esempio seguente mostra l'insieme minimo di proprietà, in cui si sostituiscono ${BOOTSTRAP_ENDPOINTS} e ${APIKEY} con i valori recuperati in precedenza.
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}";
Utilizzo di SASL OAUTHBEARER con profilo attendibile e token della risorsa di calcolo
Tutte le proprietà sono identiche a quelle descritte per la chiave API, tranne quella di sasl.jaas.config che è diversa.
grant_typeinsasl.jaas.configèurn:ibm:params:oauth:grant-type:cr-token.profile_idinsasl.jaas.configè un percorso di file che memorizza l'ID del profilo attendibile. Questo file può essere montato su un pod Kubernetes che esegue il codice client Kafka come volume di sola lettura e reso disponibile al codice client Kafka.cr_tokeninsasl.jaas.configè un file che memorizza il token dell'account del servizio da un pod Kubernetes che esegue il codice client Kafka. Per ulteriori informazioni, vedere Cos'è un token dell'account di servizio.
Ad esempio:
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}";
Per maggiori dettagli, consultare la sezione Come impostare un profilo di fiducia.
Il codice sorgente del client oauth si riferisce all'SDK Event Streams Java.
Il codice client di esempio fa riferimento al campione Event Streams.
Utilizzo di SASL OAUTHBEARER con i client Java v4.1 e successivi
Quando si usa un client Kafka Java a v4.1 o superiore, il client deve usare una versione più recente del client oauth Event Streams, che si basa sul gestore di callback predefinito di Kafka e su un appropriato Token Retriever.
Se nel sistema di compilazione si usa Maven, aggiungere le seguenti informazioni al file pom.xml nella sezione delle dipendenze:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>2.0.0</version>
</dependency>
Se Gradle è usato nel sistema di compilazione, aggiungere le seguenti informazioni al file build.gradle nella sezione delle dipendenze:
implementation com.ibm.cloud.eventstreams:oauth-client:2.0.+
Il servizio di identità IBM Cloud® Identity and Access Management supporta diversi modi per generare un token bearer, due dei quali sono supportati da questa libreria client oauth:
- chiave API
- Profilo attendibile e token della risorsa di calcolo
Utilizzo di SASL OAUTHBEARER con chiave API
Utilizzare le seguenti stringhe e proprietà, oltre alla proprietà obbligatoria bootstrap.servers e alle impostazioni specifiche di produttore, consumatore e amministratore.
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
Utilizzo di SASL OAUTHBEARER con un profilo attendibile e un token di risorsa di calcolo in ambienti containerizzati
Per ulteriori informazioni, vedere Generazione di un token IAM per una risorsa di calcolo.
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
Proprietà di sistema org.apache.kafka.sasl.oauthbearer.allowed.urls
Da Kafka 4.0, il client richiede una proprietà di sistema per impostare gli URL consentiti del token SASL OAUTHBEARER e degli endpoint jwks.
Per ulteriori informazioni, vedere Proprietà del sistema.
Quando si utilizzano gli script di shell CLI client forniti dalla distribuzione Apache Kafka, la proprietà di sistema può essere impostata anche tramite la variabile d'ambiente KAFKA_OPTS.
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"
Utilizzo di SASL OAUTHBEARER con client non Java
Per altre librerie client Kafka, fare riferimento alla relativa documentazione su come implementare il supporto OAUTHBEARER. Ad esempio:
- sarama: è richiesta un'implementazione dell'interfaccia
AccessTokenProvider. - librdkafka: è richiesta un'implementazione del callback
oauthbearer_token_refresh_cb.
Per informazioni su come generare un token IAM IBM Cloud utilizzando una chiave API, consulta il documento di IBM Cloud® Identity and Access Management.
-
La prima versione convalidata in test continui. In genere, si tratta della versione iniziale disponibile negli ultimi 12 mesi, o di una versione più recente se sono noti problemi significativi. Se non è possibile eseguire nessuno dei client elencati, è possibile utilizzare altri client di terze parti che soddisfano i seguenti requisiti minimi (ad esempio, librdkafka ). 1. Supporta Kafka 1.40o versioni successive. 2. È possibile connettersi e autenticarsi utilizzando SASL PLAIN con TLSv1.2. 3. Supporta le estensioni SNI per TLS, dove il nome dell'host del server è incluso nell'handshake TLS. 4. Supporta la crittografia della curva ellittica. In tutti i casi, utilizzare la versione più recente del client. ↩︎