github.heygears.com/openimsdk/tools@v0.0.49/mq/kafka/sarama.go (about) 1 package kafka 2 3 import ( 4 "bytes" 5 "strings" 6 7 "github.com/IBM/sarama" 8 "github.com/openimsdk/tools/errs" 9 ) 10 11 func BuildConsumerGroupConfig(conf *Config, initial int64, autoCommitEnable bool) (*sarama.Config, error) { 12 kfk := sarama.NewConfig() 13 kfk.Version = sarama.V2_0_0_0 14 kfk.Consumer.Offsets.Initial = initial 15 kfk.Consumer.Offsets.AutoCommit.Enable = autoCommitEnable 16 kfk.Consumer.Return.Errors = false 17 if conf.Username != "" || conf.Password != "" { 18 kfk.Net.SASL.Enable = true 19 kfk.Net.SASL.User = conf.Username 20 kfk.Net.SASL.Password = conf.Password 21 } 22 if conf.TLS.EnableTLS { 23 tls, err := newTLSConfig(conf.TLS.ClientCrt, conf.TLS.ClientKey, conf.TLS.CACrt, []byte(conf.TLS.ClientKeyPwd), conf.TLS.InsecureSkipVerify) 24 if err != nil { 25 return nil, err 26 } 27 kfk.Net.TLS.Config = tls 28 kfk.Net.TLS.Enable = true 29 } 30 return kfk, nil 31 } 32 33 func NewConsumerGroup(conf *sarama.Config, addr []string, groupID string) (sarama.ConsumerGroup, error) { 34 cg, err := sarama.NewConsumerGroup(addr, groupID, conf) 35 if err != nil { 36 return nil, errs.WrapMsg(err, "NewConsumerGroup failed", "addr", addr, "groupID", groupID, "conf", *conf) 37 } 38 return cg, nil 39 } 40 41 func BuildProducerConfig(conf Config) (*sarama.Config, error) { 42 kfk := sarama.NewConfig() 43 kfk.Producer.Return.Successes = true 44 kfk.Producer.Return.Errors = true 45 kfk.Producer.Partitioner = sarama.NewHashPartitioner 46 if conf.Username != "" || conf.Password != "" { 47 kfk.Net.SASL.Enable = true 48 kfk.Net.SASL.User = conf.Username 49 kfk.Net.SASL.Password = conf.Password 50 } 51 switch strings.ToLower(conf.ProducerAck) { 52 case "no_response": 53 kfk.Producer.RequiredAcks = sarama.NoResponse 54 case "wait_for_local": 55 kfk.Producer.RequiredAcks = sarama.WaitForLocal 56 case "wait_for_all": 57 kfk.Producer.RequiredAcks = sarama.WaitForAll 58 default: 59 kfk.Producer.RequiredAcks = sarama.WaitForAll 60 } 61 if conf.CompressType == "" { 62 kfk.Producer.Compression = sarama.CompressionNone 63 } else { 64 if err := kfk.Producer.Compression.UnmarshalText(bytes.ToLower([]byte(conf.CompressType))); err != nil { 65 return nil, errs.WrapMsg(err, "UnmarshalText failed", "compressType", conf.CompressType) 66 } 67 } 68 if conf.TLS.EnableTLS { 69 tls, err := newTLSConfig(conf.TLS.ClientCrt, conf.TLS.ClientKey, conf.TLS.CACrt, []byte(conf.TLS.ClientKeyPwd), conf.TLS.InsecureSkipVerify) 70 if err != nil { 71 return nil, err 72 } 73 kfk.Net.TLS.Config = tls 74 kfk.Net.TLS.Enable = true 75 } 76 return kfk, nil 77 } 78 79 func NewProducer(conf *sarama.Config, addr []string) (sarama.SyncProducer, error) { 80 producer, err := sarama.NewSyncProducer(addr, conf) 81 if err != nil { 82 return nil, errs.WrapMsg(err, "NewSyncProducer failed", "addr", addr, "conf", *conf) 83 } 84 return producer, nil 85 }