Usando a API do Kafka

O Kafka fornece um rico conjunto de APIs e clientes em uma ampla gama de linguagens. As APIs incluem API principal, API do Streams e API do Connect.

  • API principal do Kafka (API Consumer, Producer e Admin) Use para enviar e receber mensagens diretamente de um ou mais tópicos do Kafka. O cliente administrador Kafka fornece uma interface simples por meio da API Kafka para gerenciamento de recursos do Kafka. Você pode criar, excluir e gerenciar tópicos. Também é possível usar o cliente administrador para gerenciar grupos de consumidores e configurações.
  • API de fluxos Uma API de processamento de fluxo de nível superior para consumir, transformar e produzir facilmente eventos entre tópicos.
  • API de conexão Uma estrutura que permite integrações reutilizáveis ou padrão para transmitir eventos para dentro e fora de sistemas externos, como bancos de dados.

A tabela a seguir resume o que é possível usar com o Event Streams:

Kafka suporte ao cliente nos planos Standard, Enterprise e Lite.
Plano Enterprise Plano padrão Plano Lite
Versão do Kafka no cluster Kafka 3.8 Kafka 3.8 Kafka 3.8
Mínimo recomendado Kafka versão do cliente Kafka 2.6.0, ou posterior Kafka 2.6.0, ou posterior Kafka 2.6.0, ou posterior
Versões do cliente suportadas Consulte Resumo de suporte para todos os clientes recomendados
Kafka Connect suportado True True Não
Suportado pelo Kafka Streams True True Não
Suportado pelo ksqlDB True Não Não
Requisitos de autenticação O cliente deve oferecer suporte à autenticação usando o mecanismo SASL Plain e usar a extensão SNI (Server Name Indication) para o protocolo TLSv1.2. O cliente deve oferecer suporte à autenticação usando o mecanismo SASL Plain e usar a extensão SNI (Server Name Indication) para o protocolo TLSv1.2. O cliente deve oferecer suporte à autenticação usando o mecanismo SASL Plain e usar a extensão SNI (Server Name Indication) para o protocolo TLSv1.2.

Escolhendo um cliente Kafka para usar com o Event Streams

O cliente oficial para a API do Kafka é gravado em Java e, como tal, contém os recursos e as correções de erro mais recentes. Para obter mais informações sobre essa API, consulte Kafka Producer API 3.8 e Kafka Consumer API 3.8.

Para outros idiomas, execute um dos seguintes clientes, todos os quais são testados com Event Streams.

Resumo de suporte para todos os clientes recomendados

Resumo do suporte ao cliente
Clientes Idioma Versão Recomendada Versão mínima suportada [1] Link para a amostra
Cliente Apache Kafka oficial:
Cliente Apache Kafka Java 3.8.1, ou posterior 2.5.0 Amostra do console Java

Amostra do Liberty

Clientes de terceiros:
confluente-kafka-javascript Node.js Mais recente 1.0.0
confluent-kafka-python Python Mais recente 1.4.0 Amostra do Kafka Python
confluent-kafka-go Acessar Mais recente 1.4.0
librdkafka C ou C++ Mais recente 1.4.0
node-rdkafka Node.js Mais recente 2.8.0 Amostra do Node.js
sarama Acessar Mais recente 1.40.0 Exemplos de Sarama

Conectando o cliente ao Event Streams

Para obter informações sobre como configurar o cliente Java para se conectar ao Event Streams, consulte Configurando o cliente.

Configurando o cliente da API do Kafka

Para estabelecer uma conexão, os clientes devem ser configurados para usar SASL PLAIN ou SASL OAUTHBEARER em TLSv1.2, no mínimo, e para exigir um nome de usuário e uma lista dos servidores bootstrap. TLSv1.2 garante que as conexões sejam criptografadas e valida a autenticidade dos corretores (para evitar ataques man-in-the-middle). O SASL aplica a autenticação em todas as conexões.

Para recuperar o nome de usuário, a senha e a lista de servidores bootstrap, é necessário um objeto de credenciais de serviço ou uma chave de serviço para a instância de serviço. Para obter mais informações sobre a criação desses objetos, consulte Conectando-se ao Event Streams.

Usando SASL PLAIN

Use as seguintes sequências e propriedades.

  • Use a string bootstrap_endpoints como a lista de servidores de bootstrap e passe esta sequência de pares host e porta para o seu cliente Kafka.
  • Use as propriedades user e api_key como o nome do usuário e a senha.

Para um cliente Java, o exemplo a seguir mostra o conjunto mínimo de propriedades, em que ${USERNAME}, ${PASSWORD} e ${BOOTSTRAP_ENDPOINTS} devem ser substituídos pelos valores que você recuperou anteriormente.

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 você usar um cliente Kafka anterior à versão 0.10.2.1, não haverá suporte para a propriedade sasl.jaas.config e, em vez disso, será necessário fornecer a configuração do cliente em um arquivo de configuração JAAS.

Uso do SASL OAUTHBEARER com clientes Java v3.4- 4.0

Antes de configurar o mecanismo SASL para o cliente Java, há dois pré-requisitos:

  • A versão mínima suportada do cliente Kafka Java é 3.4 ( 3.6 ou superior é preferível).
  • Um pacote jar adicional precisa ser baixado do Maven Central e disponibilizado no classpath.

Se o Maven for usado no sistema de compilação, adicione as seguintes informações ao arquivo pom.xml na seção de dependências:

<dependency>
    <groupId>com.ibm.cloud.eventstreams</groupId>
    <artifactId>oauth-client</artifactId>
    <version>1.4.0</version>
</dependency>

Se o Gradle for usado no sistema de compilação, adicione as seguintes informações ao arquivo build.gradle na seção de dependências:

implementation com.ibm.cloud.eventstreams:oauth-client:1.4.0

IBM Cloud® Identity and Access Management O Identity Service oferece suporte a várias maneiras de gerar um token de portador, duas das quais são compatíveis com essa biblioteca de cliente oauth:

  • Chave de API
  • Perfil confiável e token de recurso de computação

Uso do SASL OAUTHBEARER com chave de API

Use as seguintes sequências e propriedades.

  • Use a string BOOTSTRAP_ENDPOINTS como a lista de servidores de bootstrap e passe esta sequência de pares host e porta para o seu cliente Kafka.
  • O IAMOAuthBearerLoginCallbackHandler é fornecido pelo pacote jar com.ibm.cloud.eventstreams:oauth-client:+..
  • O ponto de extremidade do token do IBM Cloud® Identity and Access Management https://iam.cloud.ibm.com/identity/token está configurado para gerar um token a partir da chave da API usando o tipo de concessão especificado na configuração do jaas. Isso é feito no lado do cliente, portanto, a chave de API nunca é enviada para o lado do servidor, o que proporciona mais segurança do que uma chave de API de longa duração.
  • O terminal de chave do Cloud Identity and Access Management https://iam.cloud.ibm.com/identity/keys é configurado para validar o token
  • grant_type em sasl.jaas.config é urn:ibm:params:oauth:grant-type:apikey
  • apikey em sasl.jaas.config é a chave de API usada para gerar o token de portador no lado do cliente. Pode ser de um ID de usuário ou de serviço.

Para um cliente Java, o exemplo a seguir mostra o conjunto mínimo de propriedades, em que você substitui ${BOOTSTRAP_ENDPOINTS} e ${APIKEY} pelos valores recuperados anteriormente.

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}";

Usando o SASL OAUTHBEARER com perfil confiável e token de recurso de computação

Todas as propriedades são as mesmas descritas para a chave de API, exceto o endereço sasl.jaas.config, que é diferente.

  • grant_type em sasl.jaas.config é urn:ibm:params:oauth:grant-type:cr-token.
  • profile_id em sasl.jaas.config é um local de arquivo que armazena a ID do perfil confiável. Esse arquivo pode ser montado em um pod Kubernetes que esteja executando o código de cliente Kafka como um volume somente leitura e disponibilizado para o código de cliente Kafka.
  • cr_token em sasl.jaas.config é um local de arquivo que armazena o token da conta de serviço de um pod Kubernetes que executa o código de cliente Kafka. Para obter mais informações, consulte O que é um token de conta de serviço.

Por exemplo:

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}";

Você pode encontrar mais detalhes sobre Como configurar um perfil confiável.

O código-fonte do cliente oauth refere-se ao SDK Event Streams Java.

O código de cliente de amostra refere-se à amostra Event Streams.

Uso do SASL OAUTHBEARER com clientes Java v4.1 e posteriores

Ao usar um cliente Kafka Java em v4.1 ou superior, o cliente precisa usar uma versão mais recente do cliente Event Streams oauth, que se baseia no manipulador de retorno de chamada padrão do Kafka e em um Token Retriever apropriado.

Se o Maven for usado no sistema de compilação, adicione as seguintes informações ao arquivo pom.xml na seção de dependências:

<dependency>
    <groupId>com.ibm.cloud.eventstreams</groupId>
    <artifactId>oauth-client</artifactId>
    <version>2.0.0</version>
</dependency>

Se o Gradle for usado no sistema de compilação, adicione as seguintes informações ao arquivo build.gradle na seção de dependências:

implementation com.ibm.cloud.eventstreams:oauth-client:2.0.+

O IBM Cloud® Identity and Access Management Identity Service oferece suporte a várias maneiras de gerar um token de portador, duas das quais são suportadas por essa biblioteca de cliente oauth:

  • Chave de API
  • Perfil confiável e token de recurso de computação

Uso do SASL OAUTHBEARER com chave de API

Use as seguintes cadeias de caracteres e propriedades, além da propriedade obrigatória bootstrap.servers e quaisquer configurações específicas de produtor, consumidor e administrador.

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

Uso do SASL OAUTHBEARER com um perfil confiável e um token de recurso de computação em ambientes de contêineres

Para obter mais informações, consulte Geração de um token IAM para um recurso de computação.

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

Propriedade de sistema org.apache.kafka.sasl.oauthbearer.allowed.urls

Em Kafka 4.0, o cliente requer uma propriedade do sistema para definir os URLs permitidos do token SASL OAUTHBEARER e dos pontos de extremidade jwks.

Para obter mais informações, consulte propriedades do sistema.

Ao usar os scripts de shell do cliente CLI fornecidos pela distribuição Apache Kafka, a propriedade do sistema também pode ser definida usando a variável de 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"

Uso do SASL OAUTHBEARER com clientes não pertencentes ao site Java

Para outras bibliotecas do cliente Kafka, consulte sua documentação sobre como implementar o suporte OAUTHBEARER. Por exemplo:

  • sarama: uma implementação da interface do AccessTokenProvider é necessária.
  • librdkafka: uma implementação de retorno de chamada oauthbearer_token_refresh_cb é necessária.

Para obter informações sobre como gerar um token do IBM Cloud IAM usando uma chave de API, consulte IBM Cloud® Identity and Access Management's documento.


  1. A versão mais antiga que foi validada em testes contínuos. Normalmente, é a versão inicial disponível nos últimos 12 meses, ou mais recente, se houver problemas significativos. Se não for possível executar nenhum dos clientes listados, você poderá usar outros clientes de terceiros que atendam aos seguintes requisitos mínimos (por exemplo, librdkafka ). 1. Suporta Kafka 1.40ou posterior. 2. Pode se conectar e autenticar usando SASL PLAIN com TLSv1.2. 3. Oferece suporte às extensões SNI para TLS, em que o nome do host do servidor é incluído no handshake TLS. 4. Suporta criptografia de curva elíptica. Em todos os casos, use a versão mais recente do cliente. ↩︎