Ce délai s'explique par la réinitialisation d'un objet KafkaProducer à chaque envoi. Chaque initialisation nécessite une connexion à chaque broker et la récupération des métadonnées du cluster, ce qui ajoute plus de 100 ms dans un VPC et plus de 500 ms via Internet.
Explication
Avant d'envoyer un message, les producteurs Kafka doivent identifier le broker leader de chaque partition. Cette opération requiert une requête de métadonnées qui associe les topics aux partitions et les partitions aux adresses des brokers. Le producteur établit ensuite les connexions vers les brokers concernés.
Dans la plupart des langages, un objet KafkaProducer est créé une seule fois et réutilisé pour toutes les requêtes. Un client Java, par exemple, initialise le producteur au démarrage, maintient les connexions aux brokers ouvertes et met en cache les métadonnées. Les envois suivants n'ajoutent qu'une latence minimale.
PHP fonctionne généralement selon un modèle sans état partagé, où chaque requête est traitée par un processus distinct. Sauf si vous gérez explicitement le cycle de vie du producteur, chaque requête crée un nouvel objet KafkaProducer et répète l'intégralité de la séquence d'initialisation : récupération des métadonnées, connexions aux brokers et découverte des leaders de partition. Cette initialisation répétée constitue la principale source du délai observé.
Latence attendue
| Réseau | Surcharge par initialisation |
|---|---|
| VPC | > 100 ms |
| Internet | > 500 ms |
Une fois le producteur initialisé, les envois suivants n'ajoutent qu'une latence minimale. La réutilisation du producteur élimine la surcharge d'initialisation associée à chaque message.