Kafka 的生产者
package com.xnmzdx.kafka;
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import kafka.producer.Producer;
/**
* kafka生产者
* @author Administrator
*
*/
public class KafkaProduceDemo {
public static void main(String[] args) {
//创建配置对象
Properties props = new Properties();
//连接的broker
props.put("bootstrap.servers", "storm01:9092");
//设置确认机制
props.put("acks", "1");
//设置消息的key的序列化方式
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
//设置消息的value的序列化方式
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
//创建kafka生产者对象
KafkaProducer<String,String> producer = new KafkaProducer<String,String>(props);
for(int i=0;i<10; i++){
//创建消息对象
ProducerRecord<String,String> record = new ProducerRecord<String,String>("test","hello" + i);
//发送消息
producer.send(record);
}
//关闭生产者
producer.close();
}
}
Kafka的消费者
(详解可参见:https://blog.csdn.net/zytmaster/article/details/107543509)
package com.xnmzdx.kafka;
import java.util.Arrays;
import java.util.Properties;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
/**
* kafka消费者
* @author Administrator
*
*/
public class KafkaConsumerDemo {
public static void main(String[] args) {
//创建配置对象
Properties props = new Properties();
//连接的broker
props.put("bootstrap.servers", "storm01:9092");
// //设置确认机制
// props.put("acks", "1");
//设置消息的key的序列化方式
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
//设置消息的value的序列化方式
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
//设置消费者组
props.put("group.id", "topic1");
//创建消费者对象
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
//订阅的主题
consumer.subscribe(Arrays.asList("test"));
//kafka中的消息消费是一个不断轮询的过程,消费者需要做的就是重复的pull,pull方法返回订阅主题分区上的一组消息,如果这分区中没有消息,那么pull回来的就是空。
while(true){
//通过消费者对象的poll方法获取数据
//poll的参数控制pull方法的阻塞时间,在消费者的缓冲区里没有可用的数据时会发生阻塞,时间参数的设置取决于应用程序对相应速度的要求,比如需要在多长时间里将控制权交给执行轮询的线程。
ConsumerRecords<String,String> records = consumer.poll(1000);
for(ConsumerRecord<String,String> record : records){
System.out.println(record.value());
}
}
}
}