Restrições conhecidas para o Event Streams
Se você encontrar um problema enquanto usa o Event Streams, revise as restrições e soluções alternativas conhecidas, a seguir.
As chamadas do Java Kafka não executarão failover se um servidor de autoinicialização Kafka falhar
Problema
A Máquina virtual Java™ (JVM) armazena em cache as consultas de DNS. Quando a JVM resolve um endereço IP para um nome de host, ele armazena em cache o endereço IP por um período especificado, que é conhecido como o tempo de vida (TTL). Algumas configurações Java definem o TTL da JVM para que ele nunca atualize um endereço IP do nome do host até que a JVM seja reiniciada. Uma configuração de exemplo é aquela que tem um gerenciador de segurança.
Solução alternativa
Como o Event Streams usa URLs do servidor de autoinicialização Kafka com múltiplos endereços IP para alta disponibilidade, nem todos os endereços IP do broker são conhecidos pelo cliente Kafka, o que evita o failover para um broker ativo. Nesses casos, um failover requer uma nova consulta dos endereços IP para as URLs do broker para obter um endereço IP ativo. Recomenda-se configurar a sua JVM com um valor TTL de 30 a 60 segundos. Esse valor assegura que se um endereço IP do servidor de autoinicialização tiver problemas, o cliente Kafka poderá consultar e usar um novo endereço IP consultando o DNS.
Veja o exemplo a seguir a partir do arquivo java.security :
# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
# default value is forever (FOREVER). For security reasons, this
# caching is made forever when a security manager is set. When a security
# manager is not set, the default behavior in this implementation
# is to cache for 30 seconds.
#
# NOTE: setting this to anything other than the default value can have
# serious security implications. Do not set it unless
# you are sure you are not exposed to DNS spoofing attack.
#
#networkaddress.cache.ttl=-1
Como modificar o TTL da JVM
-
Para modificar o TTL da JVM para todos os aplicativos, configure o valor
networkaddress.cache.ttlno arquivo<$JAVA_HOME>/jre/lib/security/java.security. -
Para modificar o TTL da JVM para um aplicativo específico, configure o
networkaddress.cache.ttlem seu código de aplicativo.java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
Chamadas do Java Kafka podem atingir o tempo limite
Problema
Às vezes, uma chamada do cliente Java Kafka falha ao localizar o Kafka. A causa da falha é que o cliente Kafka determinou o mesmo endereço IP com falha para cada um dos servidores de autoinicialização. O cliente Kafka tenta o endereço IP de cada broker (que é o mesmo endereço IP com falha) e determina incorretamente que o Kafka está inativo. O cliente Kafka usará o primeiro endereço IP que é retornado na lista, se vários endereços IP forem retornados na consulta de DNS.
Solução alternativa
Tente novamente suas chamadas depois de aguardar o tempo suficiente para que o cache DNS da JVM para as URLs do broker expire. Em chamadas subsequentes do Kafka, um endereço IP do broker ativo é retornado da consulta DNS.
Um Kafka Improvement Proposal (KIP) #302 (disponível como uma opção a partir do Kafka 2.1.1 e incluído por padrão a partir do 2.6.0) assegura que os clientes Kafka tentem todos os endereços IP do broker disponíveis e não um subconjunto, portanto, uma falha em um único endereço IP não causa uma falha.
É necessário optar por essa funcionalidade usando um dos métodos a seguir:
-
Especifique um novo valor permitido nas propriedades de Consumidor e Produtor do parâmetro de configuração
client.dns.lookup:client.dns.lookup: "use_all_dns_ips" -
Use as constantes
CommonClientConfigs.CLIENT_DNS_LOOKUP_CONFIG: ClientDnsLookup.USE_ALL_DNS_IPS.
Tópicos e partições
- Os nomes de tópicos estão restritos a um máximo de 200 caracteres.
- O número padrão de partições para um tópico é um.
Criando e excluindo tópicos no Kafka
No Kafka, a criação e a exclusão de tópico são operações assíncronas que podem levar algum tempo para serem concluídas. Evite os padrões de uso que contam com a rápida criação e exclusão de tópicos, ou sobre a exclusão rápida e a recriação de tópicos.