Restrictions connues pour Event Streams

Si vous rencontrez un problème lors de l'utilisation de Event Streams, consultez les restrictions et solutions connues ci-après.

Les appels Java Kafka ne basculent pas en cas de défaillance du serveur d'amorce Kafka

Problème

La machine virtuelle Java™ (JVM) met en cache les recherches DNS. Lorsque la machine virtuelle Java résout une adresse IP pour un nom d'hôte, elle met en cache l'adresse IP pour une période spécifiée, appelée durée de vie (TTL). Certaines configurations Java ont défini la durée de vie de la JVM de sorte qu'elle n'actualise jamais l'adresse IP d'un nom d'hôte tant que la machine virtuelle Java n'est pas redémarrée. Par exemple, une configuration disposant d'un gestionnaire de sécurité.

Solution de contournement

Etant donné que Event Streams utilise des URL de serveur d'amorce Kafka avec plusieurs adresses IP pour la haute disponibilité, le client Kafka ne connaît pas toutes les adresses IP de courtier, ce qui empêche tout basculement du courtier de travail. Dans ces cas, une reprise en ligne nécessite une requisition des adresses IP pour que les URL de courtier obtiennent une adresse IP de travail. Nous vous invitons à configurer votre machine virtuelle Java avec une valeur de durée de vie comprise entre 30 et 60 secondes. Cette valeur garantit que si l'adresse IP d'un serveur d'amorçage a des problèmes, le client Kafka peut rechercher et utiliser une nouvelle adresse IP en interrogeant le DNS.

Consultez l'exemple suivant dans le fichier 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

Comment modifier la durée de vie de la machine virtuelle Java

  • Pour modifier la durée de vie de la machine virtuelle Java pour toutes les applications, définissez la valeur networkaddress.cache.ttl dans le fichier <$JAVA_HOME>/jre/lib/security/java.security.

  • Pour modifier la durée de vie de la machine virtuelle Java pour une application spécifique, définissez networkaddress.cache.ttl dans le code de votre application.

    java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
    

Les appels Java Kafka risquent de dépasser le délai d'attente

Problème

Parfois, un appel client Java Kafka n'arrive pas à trouver Kafka. La cause de l'échec est que le client Kafka a déterminé la même adresse IP en échec pour chacun des serveurs d'amorçage. Le client Kafka essaie chaque adresse IP de courtier (qui est la même adresse IP en échec) et détermine à tort que Kafka est indisponible. Le client Kafka utilise la première adresse IP renvoyée dans la liste si plusieurs adresses IP sont renvoyées dans la requête DNS.

Solution de contournement

Relancez vos appels une fois que vous avez attendu assez longtemps pour que le cache DNS de la machine virtuelle Java expire les URL de courtier. Lors des appels Kafka suivants, une adresse IP de courtier de travail est renvoyée par la requête DNS.

Une Kafka (KIP) #302 (disponible en tant qu'option à partir de Kafka 2.1.1 et incluse par défaut à partir de 2.6.0) garantit que les clients Kafka essaient toutes les adresses IP de courtier disponibles et non un sous-ensemble, de sorte qu'un échec sur une seule adresse IP ne provoque pas d'échec.

Vous devez opter pour cette fonctionnalité en utilisant l'une des méthodes suivantes :

  • Spécifiez une nouvelle valeur autorisée dans les propriétés Consommateur et Producteur du paramètre de configuration client.dns.lookup:

    client.dns.lookup: "use_all_dns_ips"
    
  • Utilisez les constantes CommonClientConfigs.CLIENT_DNS_LOOKUP_CONFIG: ClientDnsLookup.USE_ALL_DNS_IPS.

Rubriques et partitions

  • Les noms de rubrique sont limités à un maximum de 200 caractères.
  • Le nombre par défaut de partitions pour une rubrique est un.

Création et suppression de rubriques dans Kafka

Dans Kafka, la création et la suppression de rubriques sont des opérations asynchrones susceptibles de prendre un certain temps. Évitez les modèles d'utilisation qui reposent sur la création et la suppression rapides de rubriques, ou sur la suppression et la recréation rapides de rubriques.