创建主题

Golang sarama包操作kafka代码示例:创建topic主题、生产消息、消费消息(亲测可用)_golang

package main

import (
	"fmt"
	"log"
	"/IBM/sarama"
)

func main() {
	// Kafka 配置
	config := sarama.NewConfig()
	config.Version = sarama.V2_6_0_0 // 设置 Kafka 版本(可以根据需要调整)

	// Kafka 集群地址
	brokers := []string{"192.168.20.101:9093"}

	// 创建 Admin 客户端
	adminClient, err := sarama.NewClusterAdmin(brokers, config)
	if err != nil {
		log.Fatalf("Failed to create admin client: %v", err)
	}
	defer adminClient.Close()

	// 创建 Kafka 主题的配置
	topicConfig := sarama.TopicDetail{
		NumPartitions:     1,  // 分区数
		ReplicationFactor: 1,  // 副本数
	}

	// 创建主题,传递指针
	err = adminClient.CreateTopic("my-new-topic", &topicConfig, false) // 使用 &topicConfig
	if err != nil {
		log.Fatalf("Failed to create topic: %v", err)
	}

	fmt.Println("Topic 'my-new-topic' created successfully!")
}

发送消息

Golang sarama包操作kafka代码示例:创建topic主题、生产消息、消费消息(亲测可用)_开发语言_02

package main

import (
	"fmt"
	"log"
	"/IBM/sarama"
)

func main() {
	// Kafka 配置
	config := sarama.NewConfig()
	config.Producer.Return.Successes = true

	// Kafka 集群地址(例如:localhost:9092)
	brokers := []string{"192.168.20.101:9093"}

	// 创建生产者
	producer, err := sarama.NewSyncProducer(brokers, config)
	if err != nil {
		log.Fatalf("Failed to create producer: %v", err)
	}
	defer producer.Close()

	// 发送消息
	message := &sarama.ProducerMessage{
		Topic: "my-topic", // 主题名称
		Value: sarama.StringEncoder("Hello, Kafka!"),
	}

	// 发送消息到 Kafka
	partition, offset, err := producer.SendMessage(message)
	if err != nil {
		log.Fatalf("Failed to send message: %v", err)
	}

	// 打印发送成功的信息
	fmt.Printf("Message sent to partition %d at offset %d\n", partition, offset)
}

消费消息

Golang sarama包操作kafka代码示例:创建topic主题、生产消息、消费消息(亲测可用)_开发语言_03

package main

import (
	"fmt"
	"log"
	"/IBM/sarama"
)

func main() {
	// Kafka 配置
	config := sarama.NewConfig()
	config.Consumer.Return.Errors = true

	// Kafka 集群地址(例如:localhost:9092)
	brokers := []string{"192.168.20.101:9093"}

	// 创建消费者
	consumer, err := sarama.NewConsumer(brokers, config)
	if err != nil {
		log.Fatalf("Failed to create consumer: %v", err)
	}
	defer consumer.Close()

	// 订阅 Kafka 主题
	partitionConsumer, err := consumer.ConsumePartition("my-topic", 0, sarama.OffsetNewest)
	if err != nil {
		log.Fatalf("Failed to start partition consumer: %v", err)
	}
	defer partitionConsumer.Close()

	// 消费消息
	for msg := range partitionConsumer.Messages() {
		fmt.Printf("Received message: %s\n", string(msg.Value))
	}
}

go.mod

module kafka

go 1.22.0

require /IBM/sarama v1.45.0

require (
	/davecgh/go-spew v1.1.1 // indirect
	/eapache/go-resiliency v1.7.0 // indirect
	/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
	/eapache/queue v1.1.0 // indirect
	/golang/snappy v0.0.4 // indirect
	/hashicorp/errwrap v1.0.0 // indirect
	/hashicorp/go-multierror v1.1.1 // indirect
	/hashicorp/go-uuid v1.0.3 // indirect
	/jcmturner/aescts/v2 v2.0.0 // indirect
	/jcmturner/dnsutils/v2 v2.0.0 // indirect
	/jcmturner/gofork v1.7.6 // indirect
	/jcmturner/gokrb5/v8 v8.4.4 // indirect
	/jcmturner/rpc/v2 v2.0.3 // indirect
	/klauspost/compress v1.17.11 // indirect
	/pierrec/lz4/v4 v4.1.22 // indirect
	/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
	/x/crypto v0.32.0 // indirect
	/x/net v0.34.0 // indirect
)