package com.github.ddth.kafka.qnd; import java.util.concurrent.TimeUnit; import com.github.ddth.kafka.KafkaClient; import com.github.ddth.kafka.KafkaMessage; public class QndConsumerManual { private final static int NUM_MSGS = 1000; private final static String TOPIC = "ddth-kafka"; private final static String GROUP_ID = "ddth-kafka"; private final String BOOTSTRAP_SERVERS = "localhost:9092"; public void flush(KafkaClient kafkaClient, String groupId, String topic) { kafkaClient.seekToEnd(groupId, groupId); KafkaMessage msg = kafkaClient.consumeMessage(groupId, topic); while (msg != null) { msg = kafkaClient.consumeMessage(groupId, topic); } } public void qndSyncNoAckProducer() throws Exception { System.out.println("========== QND: NoAck Producer =========="); final boolean CONSUME_FROM_BEGINNING = true; final KafkaClient.ProducerType PRODUCER_TYPE = KafkaClient.ProducerType.NO_ACK; try (KafkaClient kafkaClient = new KafkaClient(BOOTSTRAP_SERVERS)) { kafkaClient.init(); flush(kafkaClient, GROUP_ID, TOPIC); long timestart = System.currentTimeMillis(); long RECEIVED_MSGS = 0; for (int i = 0; i < NUM_MSGS; i++) { KafkaMessage msg = new KafkaMessage(TOPIC, "message - " + i + ": " + System.currentTimeMillis()); kafkaClient.sendMessage(PRODUCER_TYPE, msg); long t1 = System.currentTimeMillis(); msg = kafkaClient.consumeMessage(GROUP_ID, CONSUME_FROM_BEGINNING, TOPIC, 10000, TimeUnit.MILLISECONDS); long t2 = System.currentTimeMillis(); if (msg != null) { RECEIVED_MSGS++; } // System.out.println((msg != null ? msg.contentAsString() : // null) + "\t" + (t2 - t1)); } long timeEnd = System.currentTimeMillis(); long d = timeEnd - timestart; System.out.println("Total: " + RECEIVED_MSGS + " msgs in " + d + "ms / " + (RECEIVED_MSGS * 1000.0 / (double) d) + " msg/sec"); Thread.sleep(2000); } } public void qndSyncLeaderAckProducer() throws Exception { System.out.println("========== QND: LeaderAck Producer =========="); final boolean CONSUME_FROM_BEGINNING = true; final KafkaClient.ProducerType PRODUCER_TYPE = KafkaClient.ProducerType.LEADER_ACK; try (KafkaClient kafkaClient = new KafkaClient(BOOTSTRAP_SERVERS)) { kafkaClient.init(); flush(kafkaClient, GROUP_ID, TOPIC); long timestart = System.currentTimeMillis(); long RECEIVED_MSGS = 0; for (int i = 0; i < NUM_MSGS; i++) { KafkaMessage msg = new KafkaMessage(TOPIC, "message - " + i + ": " + System.currentTimeMillis()); kafkaClient.sendMessage(PRODUCER_TYPE, msg); long t1 = System.currentTimeMillis(); msg = kafkaClient.consumeMessage(GROUP_ID, CONSUME_FROM_BEGINNING, TOPIC, 10000, TimeUnit.MILLISECONDS); long t2 = System.currentTimeMillis(); if (msg != null) { RECEIVED_MSGS++; } // System.out.println((msg != null ? msg.contentAsString() : // null) + "\t" + (t2 - t1)); } long timeEnd = System.currentTimeMillis(); long d = timeEnd - timestart; System.out.println("Total: " + RECEIVED_MSGS + " msgs in " + d + "ms / " + (RECEIVED_MSGS * 1000.0 / (double) d) + " msg/sec"); Thread.sleep(2000); } } public void qndSyncAllAcksProducer() throws Exception { System.out.println("========== QND: AllAcks Producer =========="); final boolean CONSUME_FROM_BEGINNING = true; final KafkaClient.ProducerType PRODUCER_TYPE = KafkaClient.ProducerType.ALL_ACKS; try (KafkaClient kafkaClient = new KafkaClient(BOOTSTRAP_SERVERS)) { kafkaClient.init(); flush(kafkaClient, GROUP_ID, TOPIC); long timestart = System.currentTimeMillis(); long RECEIVED_MSGS = 0; for (int i = 0; i < NUM_MSGS; i++) { KafkaMessage msg = new KafkaMessage(TOPIC, "message - " + i + ": " + System.currentTimeMillis()); kafkaClient.sendMessage(PRODUCER_TYPE, msg); long t1 = System.currentTimeMillis(); msg = kafkaClient.consumeMessage(GROUP_ID, CONSUME_FROM_BEGINNING, TOPIC, 10000, TimeUnit.MILLISECONDS); long t2 = System.currentTimeMillis(); if (msg != null) { RECEIVED_MSGS++; } // System.out.println((msg != null ? msg.contentAsString() : // null) + "\t" + (t2 - t1)); } long timeEnd = System.currentTimeMillis(); long d = timeEnd - timestart; System.out.println("Total: " + RECEIVED_MSGS + " msgs in " + d + "ms / " + (RECEIVED_MSGS * 1000.0 / (double) d) + " msg/sec"); Thread.sleep(2000); } } public static void main(String[] args) throws Exception { QndConsumerManual test = new QndConsumerManual(); test.qndSyncNoAckProducer(); test.qndSyncLeaderAckProducer(); test.qndSyncAllAcksProducer(); } }