消费者代码:
import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.ExecutorService; import kafka.consumer.Consumer; import kafka.consumer.ConsumerConfig; import kafka.consumer.ConsumerIterator; import kafka.consumer.KafkaStream; import kafka.javaapi.consumer.ConsumerConnector; /** * Created by mahuichao on 16/8/9. */ public class ConsumerDemo { private final ConsumerConnector consumer; private final String topic; private ExecutorService executor; public ConsumerDemo(String a_zookeeper, String a_groupId, String a_topic) { consumer = Consumer.createJavaConsumerConnector(createConsumerConfig(a_zookeeper, a_groupId)); this.topic = a_topic; } public void shutdown() { if (consumer != null) consumer.shutdown(); if (executor != null) executor.shutdown(); } public void run(int numThreads) throws InterruptedException { Map<String, Integer> topicCountMap = new HashMap<String, Integer>(); topicCountMap.put(topic, new Integer(numThreads)); Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer .createMessageStreams(topicCountMap); List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic); while (true) { for (KafkaStream stream : streams) { ConsumerIterator<byte[], byte[]> it = stream.iterator(); while (it.hasNext()) { System.out.println(new String(it.next().message())); } } System.out.printf("received complete"); Thread.sleep(2000); } } private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId) { Properties props = new Properties(); props.put("zookeeper.connect", a_zookeeper); props.put("group.id", a_groupId); props.put("zookeeper.session.timeout.ms", "400"); props.put("zookeeper.sync.time.ms", "200"); props.put("auto.commit.interval.ms", "1000"); return new ConsumerConfig(props); } public static void main(String[] arg) throws InterruptedException { String[] args = {"120.25.177.114:2181", "group-1", "test", "2"}; String zooKeeper = args[0]; String groupId = args[1]; String topic = args[2]; int threads = Integer.parseInt(args[3]); ConsumerDemo demo = new ConsumerDemo(zooKeeper, groupId, topic); demo.run(threads); try { Thread.sleep(10000); } catch (InterruptedException ie) { } demo.shutdown(); } }
以下是生产者:
import kafka.javaapi.producer.Producer; import kafka.producer.KeyedMessage; import kafka.producer.ProducerConfig; import scala.util.Random; import java.util.Date; import java.util.Properties; /** * Created by mahuichao on 16/8/9. */ public class ProducerDemo { public static void main(String[] args) throws InterruptedException { Random rnd = new Random(); int events = 100; // 设置配置属性 Properties props = new Properties(); props.put("zk.connect", "120.25.177.114:2181"); props.put("metadata.broker.list", "120.25.177.114:9092"); props.put("serializer.class", "kafka.serializer.StringEncoder"); // key.serializer.class默认为serializer.class props.put("key.serializer.class", "kafka.serializer.StringEncoder"); // 触发acknowledgement机制,否则是fire and forget,可能会引起数据丢失 // 值为0,1,-1,可以参考 // http://kafka.apache.org/08/configuration.html props.put("request.required.acks", "1"); ProducerConfig config = new ProducerConfig(props); // 创建producer Producer<String, String> producer = new Producer<String, String>(config); // 产生并发送消息 long start = System.currentTimeMillis(); for (long i = 0; i < events; i++) { long runtime = new Date().getTime(); String ip = "192.168.2." + i;//rnd.nextInt(255); String msg = runtime + ",www.example.com," + ip; //如果topic不存在,则会自动创建,默认replication-factor为1,partitions为0 KeyedMessage<String, String> data = new KeyedMessage<String, String>( "test", ip, msg); producer.send(data); System.out.println("发送成功"); // 每两秒发送一次 Thread.sleep(2000); } System.out.println("耗时:" + (System.currentTimeMillis() - start)); // 关闭producer producer.close(); } }
具体细节不做介绍了,如果想要把spark和kafka连用,我们spark-streaming的章节已经做了讲述。
感谢开源