|
@@ -9,19 +9,24 @@ import (
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/Shopify/sarama"
|
|
"github.com/Shopify/sarama"
|
|
|
|
|
+ "github.com/Shopify/sarama/tools/tls"
|
|
|
"github.com/rcrowley/go-metrics"
|
|
"github.com/rcrowley/go-metrics"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- brokerList = flag.String("brokers", os.Getenv("KAFKA_PEERS"), "The comma separated list of brokers in the Kafka cluster. You can also set the KAFKA_PEERS environment variable")
|
|
|
|
|
- topic = flag.String("topic", "", "REQUIRED: the topic to produce to")
|
|
|
|
|
- key = flag.String("key", "", "The key of the message to produce. Can be empty.")
|
|
|
|
|
- value = flag.String("value", "", "REQUIRED: the value of the message to produce. You can also provide the value on stdin.")
|
|
|
|
|
- partitioner = flag.String("partitioner", "", "The partitioning scheme to use. Can be `hash`, `manual`, or `random`")
|
|
|
|
|
- partition = flag.Int("partition", -1, "The partition to produce to.")
|
|
|
|
|
- verbose = flag.Bool("verbose", false, "Turn on sarama logging to stderr")
|
|
|
|
|
- showMetrics = flag.Bool("metrics", false, "Output metrics on successful publish to stderr")
|
|
|
|
|
- silent = flag.Bool("silent", false, "Turn off printing the message's topic, partition, and offset to stdout")
|
|
|
|
|
|
|
+ brokerList = flag.String("brokers", os.Getenv("KAFKA_PEERS"), "The comma separated list of brokers in the Kafka cluster. You can also set the KAFKA_PEERS environment variable")
|
|
|
|
|
+ topic = flag.String("topic", "", "REQUIRED: the topic to produce to")
|
|
|
|
|
+ key = flag.String("key", "", "The key of the message to produce. Can be empty.")
|
|
|
|
|
+ value = flag.String("value", "", "REQUIRED: the value of the message to produce. You can also provide the value on stdin.")
|
|
|
|
|
+ partitioner = flag.String("partitioner", "", "The partitioning scheme to use. Can be `hash`, `manual`, or `random`")
|
|
|
|
|
+ partition = flag.Int("partition", -1, "The partition to produce to.")
|
|
|
|
|
+ verbose = flag.Bool("verbose", false, "Turn on sarama logging to stderr")
|
|
|
|
|
+ showMetrics = flag.Bool("metrics", false, "Output metrics on successful publish to stderr")
|
|
|
|
|
+ silent = flag.Bool("silent", false, "Turn off printing the message's topic, partition, and offset to stdout")
|
|
|
|
|
+ tlsEnabled = flag.Bool("tls-enabled", false, "Whether to enable TLS")
|
|
|
|
|
+ tlsSkipVerify = flag.Bool("tls-skip-verify", false, "Whether skip TLS server cert verification")
|
|
|
|
|
+ tlsClientCert = flag.String("tls-client-cert", "", "Client cert for client authentication (use with -tls-enabled and -tls-client-key)")
|
|
|
|
|
+ tlsClientKey = flag.String("tls-client-key", "", "Client key for client authentication (use with tls-enabled and -tls-client-cert)")
|
|
|
|
|
|
|
|
logger = log.New(os.Stderr, "", log.LstdFlags)
|
|
logger = log.New(os.Stderr, "", log.LstdFlags)
|
|
|
)
|
|
)
|
|
@@ -45,6 +50,17 @@ func main() {
|
|
|
config.Producer.RequiredAcks = sarama.WaitForAll
|
|
config.Producer.RequiredAcks = sarama.WaitForAll
|
|
|
config.Producer.Return.Successes = true
|
|
config.Producer.Return.Successes = true
|
|
|
|
|
|
|
|
|
|
+ if *tlsEnabled {
|
|
|
|
|
+ tlsConfig, err := tls.NewConfig(*tlsClientCert, *tlsClientKey)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ printErrorAndExit(69, "Failed to create TLS config: %s", err)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ config.Net.TLS.Enable = true
|
|
|
|
|
+ config.Net.TLS.Config = tlsConfig
|
|
|
|
|
+ config.Net.TLS.Config.InsecureSkipVerify = *tlsSkipVerify
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
switch *partitioner {
|
|
switch *partitioner {
|
|
|
case "":
|
|
case "":
|
|
|
if *partition >= 0 {
|
|
if *partition >= 0 {
|