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.
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.
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.
N'oublie pas de vérifier tes flags de compilation. Si tu utilises pybind11, assure-toi d'utiliser -O3 et -march=native.
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.
Si ton CPU est saturé, profile avec py-spy. Ça te montrera exactement quelle méthode de sérialisation consomme le plus de cycles.
Exact, py-spy record -o profile.svg -- python main.py est ton meilleur ami.
Si ça ne suffit pas, regarde le batching côté Kafka. Augmenter linger.ms peut réduire le nombre d'appels à la sérialisation.
Laisser une réponse
Vous devez être connecté pour poster un message !
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-protobufen Python. Quelqu'un a des retours sur l'implémentationupbou des alternatives plus performantes pour réduire la latence de sérialisation ?