go 操作kafka包 sarama (Producer流程)
代码:
package main
import (
"github.com/Shopify/sarama"
"log"
"os"
"os/signal"
"sync"
"time"
)
func main() {
var (
wg sync.WaitGroup
success_num, error_num int
)
config := sarama.NewConfig() // 1
config.Producer.Return.Successes = true
config.Producer.Return.Errors = true
// NewRandomPartitioner NewHashPartitioner NewRoundRobinPartitioner NewManualPartitioner NewReferenceHashPartitioner
config.Producer.Partitioner = sarama.NewRandomPartitioner
client,err := sarama.NewClient([]string{"localhost:9192","localhost:9292","localhost:9392"}, config) // 2
if err != nil {
panic(err)
}
defer client.Close()
producer, err := sarama.NewAsyncProducerFromClient(client) // 3
if err != nil {
panic(err)
}
defer producer.AsyncClose()
wg.Add(1)
go func() {
wg.Done()
// config.Producer.Return.Successes = true 后一定要监听这个chan,默认大小256 如果满了就阻塞掉
for range producer.Successes() {
success_num++
}
}()
wg.Add(1)
go func() {
wg.Done()
// config.Producer.Return.Errors = true 后一定要监听这个chan,默认大小256 如果满了就阻塞掉
for range producer.Errors() {
error_nu