Travailler avec Kafka en Rust : les bibliothèques rdkafka et Franz

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Kafka en Rust : aperçu des bibliothèques

\n\n

Apache Kafka est une plateforme distribuée de streaming de données, largement utilisée dans l'architecture microservices, le traitement d'événements et les systèmes en temps réel. Le langage Rust, grâce à ses performances et à sa sécurité mémoire, est parfaitement adapté à l'écriture d'applications Kafka à forte charge. Dans cet article, nous examinerons deux bibliothèques principales pour travailler avec Kafka en Rust : rdkafka (basée sur librdkafka) et Franz (Rust pur).

\n\n

Pourquoi choisir Rust pour travailler avec Kafka ?

\n
    \n
  • Haute performance — Rust se compile en code natif, ce qui minimise les frais généraux.
  • \n
  • Sécurité mémoire — le système de propriété empêche les courses de données et les fuites mémoire.
  • \n
  • Abstractions à coût nul — permet d'écrire du code efficace sans perte d'expressivité.
  • \n
  • Asynchronisme — la prise en charge intégrée d'async/await simplifie le travail avec les flux.
  • \n
\n\n

Bibliothèque rdkafka

\n

rdkafka est la bibliothèque la plus populaire pour travailler avec Kafka en Rust. Il s'agit d'un wrapper autour de librdkafka, une bibliothèque C haute performance utilisée dans de nombreux projets (y compris Node.js, Python, Go).

\n\n

Installation de rdkafka

\n

Ajoutez la dépendance dans Cargo.toml :

\n
[dependencies]\nrdkafka = { version = "0.36", features = ["cmake-build"] }\ntokio = { version = "1", features = ["full"] }
\n\n

Exemple : Producer (envoi de messages)

\n
use rdkafka::producer::{FutureProducer, FutureRecord};\nuse rdkafka::ClientConfig;\nuse std::time::Duration;\n\n#[tokio::main]\nasync fn main() {\n    let producer: FutureProducer = ClientConfig::new()\n        .set("bootstrap.servers", "localhost:9092")\n        .create()\n        .expect("Producer creation error");\n\n    let record = FutureRecord::to("my-topic")\n        .payload("Hello from Rust!")\n        .key("key-1");\n\n    let delivery_status = producer\n        .send(record, Duration::from_secs(0))\n        .await;\n\n    match delivery_status {\n        Ok(delivery) => println!("Sent: {:?}", delivery),\n        Err(e) => eprintln!("Error: {:?}", e),\n    }\n}
\n\n

Exemple : Consumer (lecture de messages)

\n
use rdkafka::consumer::{Consumer, StreamConsumer};\nuse rdkafka::ClientConfig;\nuse rdkafka::message::Message;\nuse futures::stream::StreamExt;\n\n#[tokio::main]\nasync fn main() {\n    let consumer: StreamConsumer = ClientConfig::new()\n        .set("bootstrap.servers", "localhost:9092")\n        .set("group.id", "my-group")\n        .set("auto.offset.reset", "earliest")\n        .create()\n        .expect("Consumer creation error");\n\n    consumer.subscribe(&["my-topic"]).unwrap();\n\n    let mut stream = consumer.stream();\n    while let Some(message) = stream.next().await {\n        match message {\n            Ok(msg) => {\n                let payload = msg.payload_view::<str>().unwrap_or(None);\n                if let Some(text) = payload {\n                    println!("Received: {}", text);\n                }\n            }\n            Err(e) => eprintln!("Error: {}", e),\n        }\n    }\n}
\n\n

Bibliothèque Franz

\n

Franz est une bibliothèque moderne pour Kafka, entièrement écrite en Rust (sans liaisons C). Elle fournit une API sûre et ergonomique, utilise async/await et prend en charge les dernières versions du protocole Kafka (y compris KIP-848).

\n\n

Installation de Franz

\n
[dependencies]\nfranz = "0.7"\ntokio = { version = "1", features = ["full"] }
\n\n

Exemple : Producer dans Franz

\n
use franz::client::Client;\nuse franz::record::Record;\nuse franz::producer::Producer;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    l                    

Recommendations