Files
houston-be/pkg/kafka/config.go
Shubham Kirve b974cb6bf3 TP-0000 | Initialize houston repo (#1)
* TP-0000 | intialize houston repo

* TP-0000 | intialize houston repo
2023-03-29 00:01:17 +05:30

81 lines
2.1 KiB
Go

package kafka
import (
"crypto/tls"
"strings"
"time"
"github.com/Shopify/sarama"
"github.com/spf13/viper"
)
func SaramaSyncProducer() (sarama.AsyncProducer, error) {
return sarama.NewAsyncProducer(strings.Split(viper.GetString("kafka.brokers"), ","), kafkaProducerConfig())
}
func SaramaKafkaConsumer(groupID string) (sarama.ConsumerGroup, error) {
consumerGroup, err := sarama.NewConsumerGroup(strings.Split(viper.GetString("kafka.brokers"), ","), groupID, kafkaConsumerConfig(groupID))
if err != nil {
return nil, err
}
return consumerGroup, nil
}
func kafkaProducerConfig() *sarama.Config {
config := kafkaConfig()
config.Producer.Retry.Max = 3
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true
config.Producer.Flush.Bytes = 100
config.Producer.Flush.Frequency = 100
config.Producer.Flush.Messages = 100
config.Producer.Flush.MaxMessages = 100
config.Metadata.RefreshFrequency = 1 * time.Minute
return config
}
func kafkaConsumerConfig(groupId string) *sarama.Config {
config := kafkaConfig()
config.Version = sarama.V3_3_1_0
config.Consumer.Offsets.Initial = sarama.OffsetNewest
config.Consumer.Return.Errors = true
config.ClientID = groupId
config.Consumer.Group.Rebalance.Strategy = sarama.BalanceStrategyRoundRobin
return config
}
func kafkaConfig() *sarama.Config {
config := sarama.NewConfig()
env := viper.GetString("env")
if env == "local" {
return config
}
if env == "prod" {
config.Net.SASL.Mechanism = sarama.SASLTypePlaintext
} else {
config.Net.SASL.Mechanism = sarama.SASLTypeSCRAMSHA512
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
return &XDGSCRAMClient{HashGeneratorFcn: SHA512}
}
}
config.Net.SASL.User = viper.GetString("kafka.username")
config.Net.SASL.Password = viper.GetString("kafka.password")
config.Net.SASL.Enable = viper.GetBool("kafka.sasl.enabled")
config.Net.TLS.Enable = viper.GetBool("kafka.tls.enabled")
config.Net.TLS.Config = &tls.Config{
InsecureSkipVerify: viper.GetBool("kafka.tls.insecureSkipVerify"),
}
return config
}