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:
| 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
| 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 |
| 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_endpointscomo a lista de servidores de bootstrap e passe esta sequência de pares host e porta para o seu cliente Kafka. - Use as propriedades
usereapi_keycomo 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_ENDPOINTScomo 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 jarcom.ibm.cloud.eventstreams:oauth-client:+.. - O ponto de extremidade do token do IBM Cloud® Identity and Access Management
https://iam.cloud.ibm.com/identity/tokenestá 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_typeemsasl.jaas.configéurn:ibm:params:oauth:grant-type:apikeyapikeyemsasl.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_typeemsasl.jaas.configéurn:ibm:params:oauth:grant-type:cr-token.profile_idemsasl.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_tokenemsasl.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.
-
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. ↩︎