Arbeit mit Kafka in Rust: Überblick über die Bibliotheken
\n\nApache 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\nWarum 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
Die Bibliothek rdkafka
\nrdkafka 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.
Installation von rdkafka
\nFügen Sie die Abhängigkeit in Cargo.toml hinzu:
[dependencies]\nrdkafka = { version = "0.36", features = ["cmake-build"] }\ntokio = { version = "1", features = ["full"] }\n\nBeispiel: Producer (Nachrichten senden)
\nuse 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\nBeispiel: Consumer (Nachrichten lesen)
\nuse 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\nDie Bibliothek Franz
\nFranz 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\nInstallation von Franz
\n[dependencies]\nfranz = "0.7"\ntokio = { version = "1", features = ["full"] }\n\nBeispiel: Producer in Franz
\nuse 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 Auch in der Bibliothek
WebSocket-Bibliotheken für Swift: Starscream und URLSessionWebSocketTask
Doctrine DBAL für PHP: Komplettguide mit Praxisbeispielen
Logging in Swift (iOS/macOS): SwiftyBeaver, XCGLogger, OSLog
Überwachung von Java-Anwendungen: Die Bibliothek Micrometer und Integration mit Prometheus
E-Mail-Versand in C++: libcurl und SMTP-Clients