Impostazione delle quote Kafka
Le quote Kafka applicano i limiti di produzione e utilizzo delle richieste per controllare le risorse broker utilizzate dai client. Le quote Kafka consentono a un amministratore di applicare i limiti sulla velocità di trasmissione di rete che
possono essere utilizzati da singole applicazioni producer e consumer.
Informazioni sulle quote Kafka
Se lasciato senza vincoli, è possibile per un piccolo numero di consumatori o produttori monopolizzare la velocità di trasmissione di rete disponibile per la tua istanza del servizio.
I broker Kafka supportano le quote che applicano limiti di velocità per impedire ai client di saturare la rete o monopolizzare le risorse del broker. Per ulteriori informazioni, consultare
Apache Kafka.
Le quote Kafka possono essere configurare per limitare l'utilizzo della larghezza di banda della rete, Kafka misura questa velocità di trasmissione in byte al secondo. Se si trova che la velocità di trasmissione oltre una finestra di 30 secondi
supera una quota configurata, Kafka calcola un ritardo sufficiente per portare la velocità di trasmissione entro il limite della quota.
I broker Kafka inviano le informazioni sul ritardo ai client come parte delle risposte del protocollo Kafka standard. Un client cooperativo, nel rispetto del contratto di protocollo, attende questo ritardo prima di effettuare nuove richieste;
un client non cooperativo può non rispettare la richiesta di limitazione, ma in tal caso, il broker non legge le richieste del client fino a quando non è trascorso il ritardo di limitazione (che può causare timeout sul client non cooperativo).
Per le quote si applicano le seguenti informazioni:
- Possono essere definite quote separate per i produttori e i consumatori.
- Per impostazione predefinita, le quote client sono illimitate.
- Le quote vengono applicate per broker, piuttosto che per cluster.
- Una quota viene applicata a tutti i client che condividono una singola identità utente.
- Una quota può essere applicata all'utente 'predefinito', quindi si applica a qualsiasi utente, anche per il quale non è stata impostata alcuna quota specifica dell'utente.
Metriche client
Il client Java espone anche le informazioni di limitazione con la seguente metrica per broker:
- produc- - throttle - time - max
- produc- throttle - time - avg
- fetch - throttle - time - max
- tempo - throttle - fetch - avg
Impostazione delle quote client
Il piano Enterprise IBM® Event Streams for IBM Cloud® consente l'utilizzo dell'API Kafka per impostare e descrivere le quote sui cluster Kafka V3.1.x. Per ulteriori informazioni, consulta la sezione Quota Operations dell'API REST Admin IBM® Event Streams for IBM Cloud®.
Con riferimento alla documentazione Kafka sulle quote, sono supportati solo i tipi di quota della velocità effettiva ("producer_byte_rate" e "consumer_byte_rate")
applicati all'entità "user" (o all ' "utente predefinito").
I tipi di quota "client-id", "request" e "controller-mutation" non sono supportati come quote impostabili dall'utente. In Event Streams, un'identità utente autenticata è rappresentata da un ID IBM Cloud® Identity
and Access Management. Poiché le quote Kafka vengono applicate per ID Cloud Identity and Access Management, una singola quota può essere condivisa da un gruppo di chiavi API, se appartengono tutte allo stesso ID servizio Cloud Identity and
Access Management.
Per ottenere l'ID Cloud Identity and Access Management di un ID servizio IAM ( Cloud Identity and Access Management, è possibile utilizzare la CLI IBM Cloud.
ibmcloud iam service-id ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab --output json
Vedi il seguente output di esempio:
{
"active":true,
"jti":"...",
"iam_id":"iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab",
"realmId":"iam",
....
}
Associazione delle quote su un cluster IBM Event Streams Enterprise
Le quote API Kafka sono per broker, tuttavia la capacità del piano Enterprise è descritta come una velocità di trasmissione per cluster.
Pertanto, se si desidera limitare un utente a 10 MB/s in totale, si applica una quota di 10/n MB/s a ciascun broker (dove n è il numero di broker nel cluster).
Per trovare il numero di broker in un cluster, è possibile utilizzare la chiamata KafkaAdminClient.describeCluster.
Per ulteriori informazioni, consultare la documentazioneJava.
Il numero di broker può essere trovato anche utilizzando lo script shell kafka-configs.sh fornito nella distribuzione Apache Kafka.
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --describe --entity-type brokers
Autorizzazione Event Streams
Per essere autorizzato a impostare le quote client, un utente deve disporre del ruolo Gestore sulla risorsa "cluster" in Cloud Identity and Access Management.
Una serie di credenziali create con l'IU Event Streams con il ruolo Gestore sull'istanza ha anche il ruolo Gestore sul cluster. Pertanto, è possibile creare, eliminare e modificare argomenti oltre all'impostazione delle quote. Qualsiasi utente
autenticato ha un ruolo di lettore implicito sul cluster ed è in grado di descrivere le quote.
Per creare una serie di credenziali che possono gestire argomenti, gruppi e partecipare alle transazioni ma non sono autenticati per impostare le quote, una politica di accesso IAM che ha il ruolo Gestore sui tipi di risorsa "topic",
"group" e "txnid" e il ruolo Reader su "cluster" deve essere associato all'ID servizio.
Esempio: gestione delle quote con script the kafka-config.sh (clientApache )
-
Scaricare una distribuzione Kafka binario (almeno V3.1.0).
-
Creare un file delle proprietà (denominato command-config.properties nei seguenti esempi di riga comandi), contenente le seguenti voci (sostituendo "myapikey" con la chiave API effettiva).
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password="myapikey";
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
Per ulteriori informazioni, vedi Configurazione del tuo client API Kafka.
-
Utilizzare i seguenti esempi di utilizzo.
- Modifica quote per l'utente:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --alter --add-config 'producer_byte_rate=1024,
consumer_byte_rate=2048' --entity-type users --entity-name iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab
Aggiornamento della configurazione per l'utente iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab completato.
- Descrivere le quote per l'utente:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --describe --entity-type users --entity-name
iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab
Le configurazioni di quota per il principal utente iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab sono consumer_byte_rate=2048.0 e producer_byte_rate=1024.0.
- Rimuovi quote per l'utente:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --alter --delete-config 'producer_byte_rate,consumer_byte_rate' --entity-type users --entity-name iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab
Aggiornamento della configurazione per l'utente iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab completato.
- Descrivere tutte le quote che sono state impostate per qualsiasi utente, incluso l'utente predefinito:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --describe --entity-type users
- Modificare le quote per l'utente predefinito:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --alter --add-config 'producer_byte_rate=1024,
consumer_byte_rate=2048' --entity-type users --entity-default
Aggiornamento della configurazione predefinita per gli utenti nel cluster completato.
- Rimuovere le quote per l'utente predefinito:
bin/kafka-configs.sh --command-config command-config.properties --bootstrap-server "kafka-0.blah.cloud:9093" --alter --delete-config 'producer_byte_rate,
consumer_byte_rate' --entity-type users --entity-default
Aggiornamento della configurazione predefinita per gli utenti nel cluster completato.
Esempio: modifica dell'utilizzo della quota della velocità di trasmissione tramite l'API Java
Il seguente esempio è un breve frammento di esempio che mostra come richiamare il metodo KafkaAdminClient.alterclientQuotas.
https://kafka.apache.org/32/javadoc/org/apache/kafka/clients/admin/KafkaAdminClient.html
Options)
import java.util.*;
import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.clients.admin.*;
import org.apache.kafka.common.config.*;
import org.apache.kafka.common.quota.*;
class Snippet {
public static void main(String[] args) throws Exception {
// Kafka client configuration properties.
String mybootstrap = "..."; // from the bootstrap_endpoints of the service credentials
String myapikey = "..."; // from the apikey of the service credentials
Properties properties = new Properties();
properties.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, mybootstrap);
properties.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "sasl_ssl");
properties.put(SslConfigs.SSL_ENABLED_PROTOCOLS_CONFIG, "TLSv1.2");
properties.put(SslConfigs.SSL_PROTOCOL_CONFIG, "TLSv1.2");
properties.put(SaslConfigs.SASL_MECHANISM, "PLAIN");
properties.put(SaslConfigs.SASL_JAAS_CONFIG,
"org.apache.kafka.common.security.plain.PlainLoginModule " +
"required username=\"token\" password=\"" + myapikey + "\";");
AdminClient admin = AdminClient.create(properties);
String iamID = "iam-ServiceId-12345678-aaaa-bbbb-cccc-1234567890ab"; //set iam id of target user to set quotas to
// if null is used instead of the iamID string, the following quota alteration will be applied to the default user
// add quotas
ClientQuotaEntity entity = new ClientQuotaEntity(
Collections.singletonMap(ClientQuotaEntity.USER, iamID));
ClientQuotaAlteration alteration = new ClientQuotaAlteration(entity,
Arrays.asList(new ClientQuotaAlteration.Op("consumer_byte_rate", 1000.0),
new ClientQuotaAlteration.Op("producer_byte_rate", 1000.0)));
admin.alterClientQuotas(Arrays.asList(alteration)).all().get();
// describe quotas
DescribeClientQuotasResult describeClientQuotasFuture = admin.describeClientQuotas(ClientQuotaFilter.all());
System.out.println(describeClientQuotasFuture.entities().get());
//remove quotas (set them to null)
entity = new ClientQuotaEntity(Collections.singletonMap(ClientQuotaEntity.USER, iamID));
alteration = new ClientQuotaAlteration(entity,
Arrays.asList(new ClientQuotaAlteration.Op("consumer_byte_rate", null),
new ClientQuotaAlteration.Op("producer_byte_rate", null)));
admin.alterClientQuotas(Arrays.asList(alteration)).all().get();
}
}
Eventi IBM Cloud Activity Tracker
Ogni volta che le quote di velocità di trasmissione vengono aggiornate, viene generato un evento di configurazione Event Streams, che può essere monitorato in IBM Cloud® Activity Tracker.
Per ulteriori informazioni sulla configurazione degli eventi Activity Tracker per Event Streams, vedi la documentazione del programma di traccia dell'attività.