创建主题

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!")
}发送消息

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)
}消费消息

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
)
















