Trabajo con Kafka en Rust: reseña de bibliotecas
\n\nApache Kafka es una plataforma distribuida para transmisión de datos en flujo, ampliamente utilizada en arquitectura de microservicios, procesamiento de eventos y sistemas en tiempo real. El lenguaje Rust, gracias a su rendimiento y seguridad de memoria, es ideal para escribir aplicaciones Kafka de alta carga. En este artículo, revisaremos las dos bibliotecas principales para trabajar con Kafka en Rust: rdkafka (basada en librdkafka) y Franz (Rust puro).
\n\n¿Por qué elegir Rust para trabajar con Kafka?
\n- \n
- Alto rendimiento — Rust se compila a código nativo, minimizando la sobrecarga. \n
- Seguridad de memoria — el sistema de propiedad previene condiciones de carrera y fugas de memoria. \n
- Abstracciones de costo cero — permite escribir código eficiente sin perder expresividad. \n
- Asincronía — soporte integrado para async/await simplifica el trabajo con flujos. \n
Biblioteca rdkafka
\nrdkafka es la biblioteca más popular para trabajar con Kafka en Rust. Es un envoltorio sobre librdkafka, una biblioteca C de alto rendimiento utilizada en muchos proyectos (incluyendo Node.js, Python, Go).
Instalación de rdkafka
\nAgregue la dependencia en Cargo.toml:
[dependencies]\nrdkafka = { version = "0.36", features = ["cmake-build"] }\ntokio = { version = "1", features = ["full"] }\n\nEjemplo: Producer (envío de mensajes)
\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\nEjemplo: Consumer (lectura de mensajes)
\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\nBiblioteca Franz
\nFranz es una biblioteca moderna para Kafka, escrita completamente en Rust (sin enlaces a C). Proporciona una API segura y ergonómica, utiliza async/await y soporta las últimas versiones del protocolo Kafka (incluyendo KIP-848).
\n\nInstalación de Franz
\n[dependencies]\nfranz = "0.7"\ntokio = { version = "1", features = ["full"] }\n\nEjemplo: Producer en 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 También en la biblioteca
Cliente OAuth para Rust: biblioteca oauth2-rs
Configuración de aplicaciones C# (.NET): bibliotecas y enfoques
Monitoreo de aplicaciones PHP: herramientas y prácticas para el desarrollador