什么是 Sarama,为什么需要它?
\n\nSarama 是一个高性能、纯 Go 编写的 Apache Kafka 客户端库。它提供了与 Kafka 集群交互的完整工具集,包括用于发送消息的生产者(producers)、用于读取消息的消费者(consumers),以及用于管理主题、分区和配置的管理功能。
\n\nApache Kafka 是一个分布式流数据平台,用于构建实时数据管道、消息系统、事件处理和日志存储。Sarama 使 Go 应用程序能够轻松集成 Kafka,提供可靠且高效的数据传输。
\n\n为什么要使用 Sarama?
\n- \n
- 纯 Go 实现:Sarama 完全用 Go 编写,没有 C/C++ 外部依赖,简化了构建和部署。 \n
- 高性能:该库针对处理大量数据进行了优化,并支持异步消息发送。 \n
- 灵活性:支持多种生产者模式(同步、异步)和消费者模式(简单消费者、消费者组)。 \n
- 活跃的社区:Sarama 是 Go 语言中最流行的 Kafka 库之一,拥有大量贡献者和丰富的文档。 \n
- 完全控制:让开发者完全掌控配置,包括偏移量管理、序列化/反序列化和错误处理。 \n
安装
\n\n通过包管理器 go get 以标准方式将 Sarama 安装到 Go 项目中。
go get github.com/IBM/sarama\n\n执行此命令后,该库将被添加到您的 go.mod 文件中,您就可以在代码中导入它了。
重要提示:请确保您已安装 Go 1.18 或更高版本,因为 Sarama 使用了现代语言特性。
\n\n快速入门:发送和接收消息
\n\n让我们编写一个最简单的示例,向 Kafka 主题发送一条消息并读取它。
\n\n1. 生产者(Producer)— 发送消息
\n\npackage main\n\nimport (\n "fmt"\n "log"\n\n "github.com/IBM/sarama"\n)\n\nfunc main() {\n // 1. 生产者配置\n config := sarama.NewConfig()\n config.Producer.Return.Successes = true // 同步模式需要\n config.Producer.RequiredAcks = sarama.WaitForAll // 等待所有副本确认\n\n // 2. 创建同步生产者\n producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)\n if err != nil {\n log.Fatalf("无法创建生产者: %v", err)\n }\n defer producer.Close()\n\n // 3. 创建消息\n msg := &sarama.ProducerMessage{\n Topic: "my-topic",\n Key: sarama.StringEncoder("my-key"),\n Value: sarama.StringEncoder("你好,Kafka!"),\n }\n\n // 4. 发送消息\n partition, offset, err := producer.SendMessage(msg)\n if err != nil {\n log.Fatalf("无法发送消息: %v", err)\n }\n\n fmt.Printf("消息已发送到分区 %d,偏移量 %d\\n", partition, offset)\n}\n\n\n2. 消费者(Consumer)— 接收消息
\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. 消费者配置\n config := sarama.NewConfig()\n config.Consumer.Return.Errors = true\n config.Consumer.Offsets.Initial = sarama.OffsetOldest // 从最早的消息开始读取\n\n // 2. 创建消费者\n consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config)\n if err != nil {\n log.Fatalf("无法创建消