Optimiser la sérialisation Protobuf dans un pipeline Kafka

helene93 17/05/2026
RÉSOLU
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

Je travaille sur un pipeline de données haute performance où nous traitons des millions de messages par seconde via Kafka. La sérialisation Protobuf semble être notre goulot d'étranglement CPU principal.

On utilise google-protobuf en Python. Quelqu'un a des retours sur l'implémentation upb ou des alternatives plus performantes pour réduire la latence de sérialisation ?

17/05/2026 à 03:58

13 commentaires

Python est ton premier problème ici. upb est plus rapide, mais si tu as vraiment besoin de débit, il faut envisager de passer la partie sérialisation en Go ou Rust.

18/05/2026 à 01:14
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

Passer tout en Rust est prévu pour Q3, mais j'ai besoin d'une solution immédiate pour le pipeline actuel.

18/05/2026 à 13:28
sebastien61
Membre
Avatar de sebastien61
sebastien61
Membre

Tu as essayé betterproto ? C'est souvent plus efficace que l'implémentation officielle en Python car elle génère du code plus moderne.

19/05/2026 à 12:40
sylvie-bonnin
Membre Actif
Avatar de sylvie-bonnin
sylvie-bonnin
Membre Actif

Sinon, regarde du côté de msgpack si tu n'as pas besoin d'un schéma strict. C'est beaucoup plus léger en CPU.

20/05/2026 à 02:17
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

On a besoin du schéma strict pour la compatibilité avec le reste de l'infra. Je vais tester upb ce soir sur le cluster de dev.

20/05/2026 à 21:16

N'oublie pas de vérifier tes flags de compilation. Si tu utilises pybind11, assure-toi d'utiliser -O3 et -march=native.

21/05/2026 à 09:20
sebastien61
Membre
Avatar de sebastien61
sebastien61
Membre

Autre piste : est-ce que tu fais beaucoup de copies de messages ? Essaye de travailler avec des memoryview pour éviter de dupliquer les données en mémoire.

22/05/2026 à 02:13
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

C'est une excellente remarque. Je manipule beaucoup de strings qui sont copiées à chaque fois. Je vais refactoriser pour utiliser des slices.

23/05/2026 à 01:32
sylvie-bonnin
Membre Actif
Avatar de sylvie-bonnin
sylvie-bonnin
Membre Actif

Si ton CPU est saturé, profile avec py-spy. Ça te montrera exactement quelle méthode de sérialisation consomme le plus de cycles.

23/05/2026 à 17:18

Exact, py-spy record -o profile.svg -- python main.py est ton meilleur ami.

24/05/2026 à 14:24
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

Génial, je lance le profilage immédiatement. Merci pour les pistes.

25/05/2026 à 04:53
sebastien61
Membre
Avatar de sebastien61
sebastien61
Membre

Si ça ne suffit pas, regarde le batching côté Kafka. Augmenter linger.ms peut réduire le nombre d'appels à la sérialisation.

25/05/2026 à 17:08
helene93
Auteur Actif Secouriste
Avatar de helene93
helene93
Auteur Actif Secouriste

Le passage à upb + optimisation des copies mémoire a réduit la charge CPU de 25%. Merci à tous pour les conseils.

26/05/2026 à 06:15

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire