¿Qué es Sarama y para qué sirve?
\n\nSarama es una biblioteca Go pura y de alto rendimiento para trabajar con Apache Kafka. Proporciona un conjunto completo de herramientas para interactuar con un clúster de Kafka, incluyendo productores (producers) para enviar mensajes, consumidores (consumers) para leer mensajes, así como funciones administrativas para gestionar tópicos, particiones y configuraciones.
\n\nApache Kafka es una plataforma distribuida de transmisión de datos que se utiliza para construir canalizaciones en tiempo real, sistemas de mensajería, procesamiento de eventos y almacenamiento de registros. Sarama permite que las aplicaciones Go se integren fácilmente con Kafka, garantizando una transferencia de datos confiable y eficiente.
\n\n¿Por qué usar Sarama?
\n- \n
- Go puro: Sarama está escrita completamente en Go sin dependencias externas de C/C++, lo que simplifica la compilación y el despliegue. \n
- Alto rendimiento: La biblioteca está optimizada para trabajar con grandes volúmenes de datos y admite el envío asíncrono de mensajes. \n
- Flexibilidad: Admite diferentes modos de funcionamiento para productores (síncrono, asíncrono) y consumidores (simple, grupo de consumidores). \n
- Comunidad activa: Sarama es una de las bibliotecas Kafka más populares para Go, con una gran cantidad de contribuyentes y documentación extensa. \n
- Control total: Brinda al desarrollador control total sobre la configuración, incluyendo la gestión de offsets, serialización/deserialización y manejo de errores. \n
Instalación
\n\nLa instalación de Sarama en un proyecto Go se realiza de forma estándar a través del gestor de paquetes go get.
go get github.com/IBM/sarama\n\nDespués de ejecutar este comando, la biblioteca se agregará a su archivo go.mod y podrá importarla en su código.
Importante: Asegúrese de tener instalado Go versión 1.18 o superior, ya que Sarama utiliza características modernas del lenguaje.
\n\nInicio rápido: envío y recepción de mensajes
\n\nEscribamos un ejemplo simple que envíe un mensaje a un tópico de Kafka y lo lea.
\n\n1. Productor (Producer) — envío de mensaje
\n\npackage main\n\nimport (\n "fmt"\n "log"\n\n "github.com/IBM/sarama"\n)\n\nfunc main() {\n // 1. Configuración del productor\n config := sarama.NewConfig()\n config.Producer.Return.Successes = true // Necesario para modo síncrono\n config.Producer.RequiredAcks = sarama.WaitForAll // Esperar confirmación de todas las réplicas\n\n // 2. Creación del productor síncrono\n producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)\n if err != nil {\n log.Fatalf("No se pudo crear el productor: %v", err)\n }\n defer producer.Close()\n\n // 3. Creación del mensaje\n msg := &sarama.ProducerMessage{\n Topic: "my-topic",\n Key: sarama.StringEncoder("my-key"),\n Value: sarama.StringEncoder("¡Hola, Kafka!"),\n }\n\n // 4. Envío del mensaje\n partition, offset, err := producer.SendMessage(msg)\n if err != nil {\n log.Fatalf("No se pudo enviar el mensaje: %v", err)\n }\n\n fmt.Printf("Mensaje enviado a la partición %d con offset %d\\n", partition, offset)\n}\n\n\n2. Consumidor (Consumer) — recepción de mensaje
\n\npackage main\n\nimport (\n "fmt"\n "log"\n "os"\n "os/signal"\n "syscall"\n\n "github.com/IBM/sarama"\n)\n\nfunc main() {\n // 1. Configuración del consumidor\n config := sarama.NewConfig()\n config.Consumer.Return.Errors = true\n config.Consumer.Offsets.Initial = sarama.OffsetOldest // Leer desde el principio\n\n // 2. Creación del consumidor\n consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config)\n if err != nil {\n log.Fatalf("No se pudo crear el c