63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
![]() |
package db
|
||
|
|
||
|
import (
|
||
|
"github.com/Shopify/sarama"
|
||
|
"log"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var KafkaSyncProducer sarama.SyncProducer
|
||
|
var KafkaASyncProducer sarama.AsyncProducer
|
||
|
|
||
|
var KafkaClient sarama.Client
|
||
|
|
||
|
func NewKafkaSyncProduce(host []string, username, pwd string) (conn sarama.SyncProducer, err error) {
|
||
|
|
||
|
config := sarama.NewConfig()
|
||
|
|
||
|
config.Producer.Return.Successes = true // 成功交付的消息将在success channel返回
|
||
|
config.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认
|
||
|
config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition
|
||
|
|
||
|
config.Version = sarama.V2_0_0_0
|
||
|
|
||
|
if username != "" && pwd != "" {
|
||
|
config.Net.SASL.Enable = true
|
||
|
config.Net.SASL.User = username
|
||
|
config.Net.SASL.Password = pwd
|
||
|
config.Net.SASL.Handshake = true
|
||
|
}
|
||
|
|
||
|
conn, err = sarama.NewSyncProducer(host, config)
|
||
|
if err != nil {
|
||
|
log.Println("producer closed, err:", err)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func NewKafkaAsyncProduce(host []string, username, pwd string) (conn sarama.AsyncProducer, err error) {
|
||
|
|
||
|
config := sarama.NewConfig()
|
||
|
|
||
|
config.Producer.RequiredAcks = sarama.NoResponse // Only wait for the leader to ack
|
||
|
config.Producer.Compression = sarama.CompressionSnappy // Compress messages
|
||
|
config.Producer.Flush.Frequency = time.Duration(500) * time.Millisecond // Flush batches every 500ms 不分区
|
||
|
config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition
|
||
|
config.Version = sarama.V2_0_0_0
|
||
|
|
||
|
if username != "" && pwd != "" {
|
||
|
config.Net.SASL.Enable = true
|
||
|
config.Net.SASL.User = username
|
||
|
config.Net.SASL.Password = pwd
|
||
|
config.Net.SASL.Handshake = true
|
||
|
}
|
||
|
|
||
|
conn, err = sarama.NewAsyncProducer(host, config)
|
||
|
if err != nil {
|
||
|
log.Println("producer closed, err:", err)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|