Arbeit mit Kafka in Rust: Bibliotheken rdkafka und Franz

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit Kafka in Rust: Überblick über die Bibliotheken

\n\n

Apache Kafka ist eine verteilte Plattform für die Datenstromverarbeitung, die häufig in der Microservice-Architektur, der Ereignisverarbeitung und in Echtzeitsystemen eingesetzt wird. Die Sprache Rust eignet sich aufgrund ihrer Leistungsfähigkeit und Speichersicherheit hervorragend für die Entwicklung hochlastiger Kafka-Anwendungen. In diesem Artikel betrachten wir zwei Hauptbibliotheken für die Arbeit mit Kafka in Rust: rdkafka (basierend auf librdkafka) und Franz (reines Rust).

\n\n

Warum sollte man Rust für die Arbeit mit Kafka wählen?

\n
    \n
  • Hohe Leistung — Rust wird in nativen Code kompiliert, was den Overhead minimiert.
  • \n
  • Speichersicherheit — das Ownership-System verhindert Datenrennen und Speicherlecks.
  • \n
  • Nullkosten-Abstraktionen — ermöglicht das Schreiben von effizientem Code ohne Einbußen bei der Ausdrucksstärke.
  • \n
  • Asynchronität — die integrierte Unterstützung von async/await vereinfacht die Arbeit mit Streams.
  • \n
\n\n

Die Bibliothek rdkafka

\n

rdkafka ist die beliebteste Bibliothek für die Arbeit mit Kafka in Rust. Sie ist ein Wrapper um librdkafka, eine hochperformante C-Bibliothek, die in vielen Projekten (einschließlich Node.js, Python, Go) verwendet wird.

\n\n

Installation von rdkafka

\n

Fügen Sie die Abhängigkeit in Cargo.toml hinzu:

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

Beispiel: Producer (Nachrichten senden)

\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

Beispiel: Consumer (Nachrichten lesen)

\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

Die Bibliothek Franz

\n

Franz ist eine moderne Bibliothek für Kafka, die vollständig in Rust geschrieben ist (ohne C-Bindungen). Sie bietet eine sichere und ergonomische API, verwendet async/await und unterstützt die neuesten Versionen des Kafka-Protokolls (einschließlich KIP-848).

\n\n

Installation von Franz

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

Beispiel: Producer in 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                    

Empfehlungen