Files
janus/producer/producer_config.go

136 lines
4.3 KiB
Go
Raw Normal View History

2021-03-25 13:24:08 +05:30
package producer
import (
"com.navi.medici.janus/config"
"com.navi.medici.janus/utils"
"go.uber.org/zap"
"log"
2021-03-25 13:24:08 +05:30
"crypto/tls"
"github.com/Shopify/sarama"
2021-05-07 13:19:32 +05:30
"os"
2021-05-06 13:04:46 +05:30
"strings"
"time"
2021-03-25 13:24:08 +05:30
)
var (
syncProducer sarama.SyncProducer
asyncProducer sarama.AsyncProducer
logger *zap.Logger
)
2021-03-25 13:24:08 +05:30
2021-07-27 13:21:26 +05:30
func GetSyncProducerConfig(kafkaConfiguration config.KafkaConfigurations, env string) *sarama.Config {
2021-03-25 13:24:08 +05:30
config := sarama.NewConfig()
// security configs
2021-07-29 18:40:21 +05:30
//if env == "PROD" {
config.Net.TLS.Enable = true
config.Net.TLS.Config = createTLSConfiguration()
config.Net.SASL.Enable = true
config.Net.SASL.Handshake = true
config.Net.SASL.Mechanism = sarama.SASLTypeSCRAMSHA512
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
return &XDGSCRAMClient{HashGeneratorFcn: SHA512}
}
config.Net.SASL.User = kafkaConfiguration.Sasl_User
config.Net.SASL.Password = kafkaConfiguration.Sasl_Password
2021-07-29 18:40:21 +05:30
//}
2021-07-27 11:53:09 +05:30
2021-03-25 13:24:08 +05:30
// producer configs
// to be changed: read from config file
config.Producer.Retry.Max = 3
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionGZIP
config.Producer.Return.Successes = true
2021-03-25 13:24:08 +05:30
// metadata configs
config.Metadata.RefreshFrequency = 1 * time.Minute
return config
}
2021-07-27 13:21:26 +05:30
func GetAsyncProducerConfig(kafkaConfiguration config.KafkaConfigurations, env string) *sarama.Config {
2021-03-25 13:24:08 +05:30
config := sarama.NewConfig()
// security configs
2021-07-29 18:40:21 +05:30
//if env == "PROD" {
config.Net.TLS.Enable = true
config.Net.TLS.Config = createTLSConfiguration()
config.Net.SASL.Enable = true
config.Net.SASL.Handshake = true
config.Net.SASL.Mechanism = sarama.SASLMechanism(sarama.SASLTypeSCRAMSHA512)
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
return &XDGSCRAMClient{HashGeneratorFcn: SHA512}
}
config.Net.SASL.User = kafkaConfiguration.Sasl_User
config.Net.SASL.Password = kafkaConfiguration.Sasl_Password
//}
2021-03-25 13:24:08 +05:30
// producer configs
// to be changed: read from config file
config.Producer.Retry.Max = 3
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionGZIP
config.Producer.Flush.Bytes = 31000
config.Producer.Flush.Frequency = 100 * time.Millisecond
2021-03-25 13:24:08 +05:30
// metadata configs
config.Metadata.RefreshFrequency = 1 * time.Minute
2021-03-25 13:24:08 +05:30
return config
}
2021-07-27 13:21:26 +05:30
func GetSyncProducer(kafkaConfiguration config.KafkaConfigurations, env string) sarama.SyncProducer {
config := GetSyncProducerConfig(kafkaConfiguration, env)
2021-05-06 16:07:43 +05:30
brokerList := strings.Split(kafkaConfiguration.Bootstrap_Servers, ",")
2021-03-25 13:24:08 +05:30
producer, err := sarama.NewSyncProducer(brokerList, config)
if err != nil {
panic(err)
}
return producer
}
2021-07-27 13:21:26 +05:30
func GetAsyncProducer(kafkaConfiguration config.KafkaConfigurations, env string) sarama.AsyncProducer {
config := GetAsyncProducerConfig(kafkaConfiguration, env)
2021-05-06 16:07:43 +05:30
brokerList := strings.Split(kafkaConfiguration.Bootstrap_Servers, ",")
2021-03-25 13:24:08 +05:30
producer, err := sarama.NewAsyncProducer(brokerList, config)
if err != nil {
panic(err)
}
return producer
}
2021-07-27 13:21:26 +05:30
func InitializeProducers(kafkaConfiguration config.KafkaConfigurations, env string) {
2021-05-07 13:19:32 +05:30
sarama.Logger = log.New(os.Stdout, "[sarama] ", log.LstdFlags)
logger = utils.GetLogger()
2021-07-27 13:21:26 +05:30
syncProducer = GetSyncProducer(kafkaConfiguration, env)
asyncProducer = GetAsyncProducer(kafkaConfiguration, env)
}
2021-07-27 18:39:42 +05:30
func createTLSConfiguration() (t *tls.Config) {
t = &tls.Config{
InsecureSkipVerify: false,
}
return t
}
2021-03-25 13:24:08 +05:30
// using confluent-kafka-go
// func GetProducerConfig(kafkaConfiguration config.KafkaConfigurations) *kafka.ConfigMap {
// var config = kafka.ConfigMap {
// "bootstrap.servers": kafkaConfiguration.Bootstrap_Servers,
// // "ssl.endpoint.identification.algorithm" : kafkaConfiguration.SSL_Endpoint_Algorithm,
// // "sasl.mechanism": kafkaConfiguration.SASL_Mechanism,
// // "request.timeout.ms": kafkaConfiguration.Request_Timeout_Ms,
// // "security.protocol": kafkaConfiguration.Security_Protocol,
// // "retry.backoff.ms": kafkaConfiguration.Retry_Backoff_MS,
// // "sasl.jaas.config": kafkaConfiguration.Sasl_JAAS_Config
// }
// return &config
// }
// func GetProducer(kafkaConfiguration config.KafkaConfigurations) *kafka.Producer {
// var config = GetProducerConfig(kafkaConfiguration)
// producer, err := kafka.NewProducer(config)
// if err != nil {
// panic(err)
// }
// return producer
// }