github.com/argoproj/argo-events@v1.9.1/eventbus/kafka/base/kafka.go (about) 1 package base 2 3 import ( 4 "strings" 5 6 "github.com/IBM/sarama" 7 "github.com/argoproj/argo-events/common" 8 eventbusv1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1" 9 "go.uber.org/zap" 10 ) 11 12 type Kafka struct { 13 Logger *zap.SugaredLogger 14 config *eventbusv1alpha1.KafkaBus 15 } 16 17 func NewKafka(config *eventbusv1alpha1.KafkaBus, logger *zap.SugaredLogger) *Kafka { 18 // set defaults 19 if config.ConsumerGroup == nil { 20 config.ConsumerGroup = &eventbusv1alpha1.KafkaConsumerGroup{} 21 } 22 23 return &Kafka{ 24 Logger: logger, 25 config: config, 26 } 27 } 28 29 func (k *Kafka) Brokers() []string { 30 return strings.Split(k.config.URL, ",") 31 } 32 33 func (k *Kafka) Config() (*sarama.Config, error) { 34 config := sarama.NewConfig() 35 36 // consumer config 37 config.Consumer.IsolationLevel = sarama.ReadCommitted 38 config.Consumer.Offsets.AutoCommit.Enable = false 39 40 switch k.config.ConsumerGroup.StartOldest { 41 case true: 42 config.Consumer.Offsets.Initial = sarama.OffsetOldest 43 case false: 44 config.Consumer.Offsets.Initial = sarama.OffsetNewest 45 } 46 47 switch k.config.ConsumerGroup.RebalanceStrategy { 48 case "sticky": 49 config.Consumer.Group.Rebalance.GroupStrategies = []sarama.BalanceStrategy{sarama.NewBalanceStrategySticky()} 50 case "roundrobin": 51 config.Consumer.Group.Rebalance.GroupStrategies = []sarama.BalanceStrategy{sarama.NewBalanceStrategyRoundRobin()} 52 default: 53 config.Consumer.Group.Rebalance.GroupStrategies = []sarama.BalanceStrategy{sarama.NewBalanceStrategyRange()} 54 } 55 56 // producer config 57 config.Producer.Idempotent = true 58 config.Producer.RequiredAcks = sarama.WaitForAll 59 config.Net.MaxOpenRequests = 1 60 61 // common config 62 if k.config.Version != "" { 63 version, err := sarama.ParseKafkaVersion(k.config.Version) 64 if err != nil { 65 return nil, err 66 } 67 68 config.Version = version 69 } 70 71 // sasl 72 if k.config.SASL != nil { 73 config.Net.SASL.Enable = true 74 config.Net.SASL.Mechanism = sarama.SASLMechanism(k.config.SASL.GetMechanism()) 75 76 switch config.Net.SASL.Mechanism { 77 case "SCRAM-SHA-512": 78 config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { 79 return &common.XDGSCRAMClient{HashGeneratorFcn: common.SHA512New} 80 } 81 case "SCRAM-SHA-256": 82 config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { 83 return &common.XDGSCRAMClient{HashGeneratorFcn: common.SHA256New} 84 } 85 } 86 87 user, err := common.GetSecretFromVolume(k.config.SASL.UserSecret) 88 if err != nil { 89 return nil, err 90 } 91 config.Net.SASL.User = user 92 93 password, err := common.GetSecretFromVolume(k.config.SASL.PasswordSecret) 94 if err != nil { 95 return nil, err 96 } 97 config.Net.SASL.Password = password 98 } 99 100 // tls 101 if k.config.TLS != nil { 102 tls, err := common.GetTLSConfig(k.config.TLS) 103 if err != nil { 104 return nil, err 105 } 106 107 config.Net.TLS.Config = tls 108 config.Net.TLS.Enable = true 109 } 110 111 return config, nil 112 }