kafka發送消息之壓測

kafka循環發送消息,達到壓測的目的

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;

public class KafkaProducerDemo {


    private final KafkaProducer<String, String> producer;

    public final static String TOPIC = "test";

    private KafkaProducerDemo() {
        Properties props = new Properties();
        //xxx服務器ip
        props.put("bootstrap.servers","127.0.0.1:9092");
        props.put("zookeeper.connect","127.0.0.1:2181");
        //所有follower都響應了才認爲消息提交成功,即"committed"
        props.put("acks", "all");
        //retries = MAX 無限重試,直到你意識到出現了問題:)
        props.put("retries", 0);
        //producer將試圖批處理消息記錄,以減少請求次數.默認的批量處理消息字節數
        //batch.size當批量的數據大小達到設定值後,就會立即發送,不顧下面的linger.ms
        props.put("batch.size", 16384);
        //延遲1ms發送,這項設置將通過增加小的延遲來完成--即,不是立即發送一條記錄,producer將會等待給定的延遲時間以允許其他消息記錄發送,這些消息記錄可以批量處理
        props.put("linger.ms", 1);
        //producer可以用來緩存數據的內存大小。
        props.put("buffer.memory", 33554432);
        props.put("key.serializer",
                "org.apache.kafka.common.serialization.IntegerSerializer");
        props.put("value.serializer",
                "org.apache.kafka.common.serialization.StringSerializer");

        producer = new KafkaProducer<String, String>(props);
    }

    public void produce() throws InterruptedException {
        int messageNo = 0;
        final int COUNT = 1;

        while(messageNo < COUNT) {
            String data = "{\"test\":\"\test\", \"uuid\":\""+ UUID.randomUUID().toString()+"\"}";
            System.out.println("data:"+data);
            try {
                producer.send(new ProducerRecord<String, String>(TOPIC, data));
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("發送消息,第"+ ++messageNo +"條");
            Thread.sleep(1000);
        }

        producer.close();
    }

    static String dateFormat() {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simpleDateFormat.format(date);
    }

    public static void main(String[] args) {
        try {
            new KafkaProducerDemo().produce();
            System.exit(0);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章