package com.neverwinterdp.kafka.consumer; import java.util.List; import kafka.javaapi.PartitionMetadata; import kafka.javaapi.TopicMetadata; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.neverwinterdp.kafka.producer.DefaultKafkaWriter; import com.neverwinterdp.kafka.tool.KafkaTool; import com.neverwinterdp.kafka.tool.server.KafkaCluster; import com.neverwinterdp.util.FileUtil; public class KafkaPartitionReaderUnitTest { static { System.setProperty("log4j.configuration", "file:src/test/resources/test-log4j.properties"); } private KafkaCluster cluster; @Before public void setUp() throws Exception { FileUtil.removeIfExist("./build/cluster", false); cluster = new KafkaCluster("./build/cluster", 1, 1); cluster.setNumOfPartition(5); cluster.start(); Thread.sleep(2000); } @After public void tearDown() throws Exception { cluster.shutdown(); } @Test public void testReader() throws Exception { String NAME = "test"; DefaultKafkaWriter writer = new DefaultKafkaWriter(NAME, cluster.getKafkaConnect()); for(int i = 0; i < 100; i++) { String hello = "Hello " + i; writer.send("hello", 0, "key-" + i, hello, 5000); } writer.close(); readFromPartition(NAME, 0, 1); readFromPartition(NAME, 0, 2); readFromPartition(NAME, 0, 3); } private void readFromPartition(String consumerName, int partition, int maxRead) throws Exception { KafkaTool kafkaTool = new KafkaTool(consumerName, cluster.getZKConnect()); kafkaTool.connect(); TopicMetadata topicMetadata = kafkaTool.findTopicMetadata("hello"); PartitionMetadata partitionMetadata = findPartition(topicMetadata.partitionsMetadata(), partition); KafkaPartitionReader partitionReader = new KafkaPartitionReader(consumerName, cluster.getZKConnect(), "hello", partitionMetadata); List<byte[]> messages = partitionReader.fetch(10000, maxRead); for(int i = 0; i < messages.size(); i++) { byte[] message = messages.get(i) ; System.out.println((i + 1) + ". " + new String(message)); } partitionReader.commit(); partitionReader.close(); kafkaTool.close(); } private PartitionMetadata findPartition(List<PartitionMetadata> list, int partition) { for(PartitionMetadata sel : list) { if(sel.partitionId() == partition) return sel; } return null; } }