func GetStrategy(consumerId string) func(*kafkaClient.Worker, *kafkaClient.Message, kafkaClient.TaskId) kafkaClient.WorkerResult { consumeRate := metrics.NewRegisteredMeter(fmt.Sprintf("%s-ConsumeRate", consumerId), metrics.DefaultRegistry) return func(_ *kafkaClient.Worker, msg *kafkaClient.Message, id kafkaClient.TaskId) kafkaClient.WorkerResult { kafkaClient.Infof("main", "Got a message: %s", string(msg.Value)) consumeRate.Mark(1) return kafkaClient.NewSuccessfulResult(id) } }
func main() { fmt.Println(("Starting Producer")) runtime.GOMAXPROCS(runtime.NumCPU()) numMessage := 0 brokerConnect, topic, sleepTime, graphiteConnect, graphiteFlushInterval, flushMsgCount, flushFrequency, producerCount, maxMessagesPerReq := resolveConfig() _ = graphiteConnect _ = graphiteFlushInterval startMetrics(graphiteConnect, graphiteFlushInterval) produceRate := metrics.NewRegisteredMeter("ProduceRate", metrics.DefaultRegistry) //kafkaClient.CreateMultiplePartitionsTopic(zkConnect, topic, numPartitions) //p := producer.NewKafkaProducer(topic, []string{brokerConnect}) //defer producer.Close() //defer p.Close() saramaError := make(chan *sarama.ProducerError) saramaSuccess := make(chan *sarama.ProducerMessage) clientConfig := sarama.NewConfig() clientConfig.ClientID = uuid.NewV1().String() clientConfig.Producer.Flush.Messages = flushMsgCount clientConfig.Producer.Flush.Frequency = flushFrequency clientConfig.Producer.Flush.MaxMessages = maxMessagesPerReq clientConfig.Producer.Return.Successes = true clientConfig.Producer.RequiredAcks = sarama.NoResponse //WaitForAll clientConfig.Producer.Timeout = 1000 * time.Millisecond client, err := sarama.NewClient([]string{brokerConnect}, clientConfig) for i := 0; i < producerCount; i++ { if err != nil { panic(err) } // config.Compression = 2 producer, err := sarama.NewAsyncProducerFromClient(client) go func() { if err != nil { panic(err) } for { message := &sarama.ProducerMessage{Topic: topic, Key: sarama.StringEncoder(fmt.Sprintf("%d", numMessage)), Value: sarama.StringEncoder(fmt.Sprintf("message %d!", numMessage))} numMessage++ producer.Input() <- message time.Sleep(sleepTime) } }() go func() { for { select { case error := <-producer.Errors(): saramaError <- error case success := <-producer.Successes(): saramaSuccess <- success } } }() } ctrlc := make(chan os.Signal, 1) signal.Notify(ctrlc, os.Interrupt) go func() { start := time.Now() count := 0 for { select { case err := <-saramaError: fmt.Println(err) case <-saramaSuccess: produceRate.Mark(1) count++ elapsed := time.Since(start) if elapsed.Seconds() >= 1 { fmt.Println(fmt.Sprintf("Per Second %d", count)) count = 0 start = time.Now() } } } }() <-ctrlc }