Package kafka.perf.producer

Source Code of kafka.perf.producer.Producer

/*
* Copyright 2010 LinkedIn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package kafka.perf.producer;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;

import kafka.javaapi.message.ByteBufferMessageSet;
import kafka.message.Message;
import kafka.javaapi.producer.SyncProducer;
import kafka.producer.SyncProducerConfig;

public class Producer extends Thread
{
  private final SyncProducer producer;
  private final String topic;
  private final int messageSize;
  private AtomicLong bytesSent =  new AtomicLong(0L);
  private AtomicLong messagesSent =  new AtomicLong(0L);
  private AtomicLong lastReportMessageSent = new AtomicLong(System.currentTimeMillis());
  private AtomicLong lastReportBytesSent = new AtomicLong(System.currentTimeMillis());
  private String producerName;
  private int batchSize;
  private int numParts;
  private final int compression;

  public Producer(String topic, String kafkaServerURL, int kafkaServerPort,
                  int kafkaProducerBufferSize, int connectionTimeOut, int reconnectInterval,
                  int messageSize, String name, int batchSize, int numParts, int compression)
  {
    super(name);
    Properties props = new Properties();
    props.put("host", kafkaServerURL);
    props.put("port", String.valueOf(kafkaServerPort));
    props.put("buffer.size", String.valueOf(kafkaProducerBufferSize));
    props.put("connect.timeout.ms", String.valueOf(connectionTimeOut));
    props.put("reconnect.interval", String.valueOf(reconnectInterval));
    producer = new SyncProducer(new SyncProducerConfig(props));
    this.topic = topic;

    this.messageSize = messageSize;
    producerName = name;
    this.batchSize = batchSize;
    this.numParts = numParts;
    this.compression = compression;
  }

  public void run() {
    Random random = new Random();
    while(true)
    {
      List<Message> messageList = new ArrayList<Message>();
      for(int i = 0; i < batchSize; i++)
      {
        Message message = new Message(new byte[messageSize]);
        messageList.add(message);
      }
      ByteBufferMessageSet set = new ByteBufferMessageSet(kafka.message.CompressionCodec$.MODULE$.getCompressionCodec(compression), messageList);
      producer.send(topic, random.nextInt(numParts), set);
      bytesSent.getAndAdd(batchSize * messageSize);
      messagesSent.getAndAdd(messageList.size());
    }
  }

  public double getMessagesSentPs()
  {
    double val = (double)messagesSent.get() / (System.currentTimeMillis() - lastReportMessageSent.get());
    return val * 1000;
  }

  public String getProducerName()
  {
    return producerName;
  }

  public double getMBytesSentPs()
  {
    double val = ((double)bytesSent.get() / (System.currentTimeMillis() - lastReportBytesSent.get())) / (1024*1024);
    return val * 1000;
  }

  public long getTotalBytesSent() {
    return bytesSent.get();
  }
}
TOP

Related Classes of kafka.perf.producer.Producer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.