设为首页 加入收藏

TOP

Kafka--Java--Demo
2019-05-13 14:30:56 】 浏览:134
Tags:Kafka--Java--Demo

最近开始在做kafka的相关的东西,想着也来写点东西的

我用的maven构建,用了两个不同的jar版本和json的包,感觉区别蛮大的,,需要用到首先安装zookeeper和kafka,windows也是可以安装的。后面文章会介绍怎么安装。

<dependency>

<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.9.2</artifactId>
<version>0.8.2.2</version>
<classifier>test</classifier>

</dependency>

<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.1.1</version>

</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.36</version>
</dependency>

简单实现时先了,生产者(kafka_2.9.2),消费者(kafka_2.11),还写了个工具类(仅仅写消费者),

生产者:

public class KafkaProducerDemo {
public final static String TOPIC = "wander";

public static void main(String[] args) {

Sample s = new Sample();//这类有两个对象类,因为需求,可以直接替换出一个对象也行,
s.setSp_id(11);
s.setDust(22);
s.setPm2_5(33);
s.setPm10(444);
s.setTemp(55);
s.setHumid(66);
s.setWind_direct("东");
s.setWind_speed(111);
s.setAir_pressure(1111);
s.setNoise(66);
s.setRecv_time("2121");
s.setCsite_id(4444);
s.setDev_code("2121");
//創建
RealSampleKafka sample = new RealSampleKafka(s);
//封裝datasource
sample.setDataSource(Consts.DB_URL);
//发送消息工具类
KafkaUtils.sendMsgToKafka(sample);
System.out.println(sample);

}


消费者:

public class KafkaConsumer {

private final ConsumerConnector consumer;

private KafkaConsumer() {
Properties props = new Properties();
// zookeeper 配置
props.put("zookeeper.connect", "127.0.0.1:2181");
// group 代表一个消费组
props.put("group.id", "wandergroup");
// zk连接超时
props.put("zookeeper.session.timeout.ms", "4000");
props.put("zookeeper.sync.time.ms", "200");
props.put("rebalance.max.retries", "5");
props.put("rebalance.backoff.ms", "1200");


props.put("auto.commit.interval.ms", "1000");
props.put("auto.offset.reset", "smallest");
// 序列化类
props.put("serializer.class", "kafka.serializer.StringEncoder");
ConsumerConfig config = new ConsumerConfig(props);
consumer = kafka.consumer.Consumer.createJavaConsumerConnector(config);
}
void consume() {
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(KafkaProducer.TOPIC, new Integer(1));
StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties());
StringDecoder valueDecoder = new StringDecoder(new VerifiableProperties());
Map<String, List<KafkaStream<String, String>>> consumerMap = consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder);
KafkaStream<String, String> stream = consumerMap.get(KafkaProducer.TOPIC).get(0);
ConsumerIterator<String, String> it = stream.iterator();
while (it.hasNext())
System.out.println(" it.next().message() + "消费了");
}

public static void main(String[] args) {
new KafkaConsumer().consume();
}

}

工具类:



/**
*kafka工具类
*
*/
public class KafkaUtils {
private static KafkaProducer<Integer, String> producer;
public final static String TOPIC = "linlin";
private KafkaUtils() { }
/**
* 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成
*/
static {
Properties properties = new Properties();
properties.put("bootstrap.servers", "127.0.0.1:9092");
properties.put("metadata.broker.list", "127.0.0.1:9092");
properties.put("zk.connect", "127.0.0.1:2181");
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("serializer.class", "kafka.serializer.StringEncoder");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("request.required.acks", "1");
producer = new KafkaProducer<Integer, String>(properties);
}

/**
* 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。
* @param msg
*/
public static void sendMsgToKafka(RealSampleKafka msg) {
try {
producer.send(new ProducerRecord<Integer, String>(TOPIC, JSON.toJSONString(msg)));
} catch (Exception e) {
Consts.logger.error(e.getMessage(), e);
} finally {
//关闭资源
producer.close();
}

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Netty】浅谈ByteBuf对JDK原生By.. 下一篇vertica-->kafka-->mongodb..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目