1、关于Mac安装及启动kafka,可参考上一篇文章Mac安装、配置并使用kafka。【保姆级简单教程】-CSDN博客
关于kafka的特性及作用这里就不介绍了。下面直接上代码。
2、简单版Kafka
这里的代码其实是对上一篇文章中,使用命令行操作一个转变。不过是我们使用了开源库。
生产者:
var topic = "user"
func Producer(ctx context.Context) {
writer := kafka.Writer{
Addr: kafka.TCP("localhost:9092"),
Topic: topic,
Balancer: &kafka.Hash{},
WriteTimeout: 1 * time.Second,
RequiredAcks: kafka.RequireNone,
AllowAutoTopicCreation: true, //实际生产环境应当为false,topic的创建需要专门的运维成员负责
}
defer writer.Close()
for i := 0; i < 3; i++ {
if err := writer.WriteMessages(
ctx,
kafka.Message{Key: []byte("1"), Value: []byte("你好")},
kafka.Message{Key: []byte("2"), Value: []byte("消费者")},
kafka.Message{Key: []byte("3"), Value: []byte("!")},
kafka.Message{Key: []byte("1"), Value: []byte("3月7")},
); err != nil {
if err == kafka.LeaderNotAvailable { //第一次写入,因为没有创建topic所以一定会失败,需要进行重试
time.Sleep(5 * time.Second)
continue
} else {
fmt.Printf("写入失败%v", err)
}
} else {
break
}
}
}
参数说明
Addr: 连接的 Kafka 代理(broker)的地址(这里连接的本地服务且只有一个)。
Topic: 连接的topic,一般一个服务使用一个topic。
Balancer: &