java kafka api_Kafka-2.11学习笔记(三)JavaApi访问kafka

鲁春利的工作笔记,好记性不如烂笔头

Kafka底层是基于Scala语言实现的,但是也提供了Java的API接口。

Java实现的消息生产者package com.lucl.kafka.simple;

import java.util.Properties;

import kafka.javaapi.producer.Producer;

import kafka.producer.KeyedMessage;

import kafka.producer.ProducerConfig;

import org.apache.log4j.Logger;

/**

 Copyright: Copyright (c) 2015 

*

 Date : 2015-11-17 21:42:50 

*

 Description : JavaApi for kafka producer 

*

* @author luchunli

*

* @version 1.0

*

*/

public class SimpleKafkaProducer {

private static final Logger logger = Logger.getLogger(SimpleKafkaProducer.class);

/**

*

*/

private void execMsgSend() {

Properties props = new Properties();

props.put("metadata.broker.list", "192.168.137.117:9092");

props.put("serializer.class", "kafka.serializer.StringEncoder");

props.put("key.serializer.class", "kafka.serializer.StringEncoder");

props.put("request.required.acks", "0");

ProducerConfig config = new ProducerConfig(props);

logger.info("set config info(" + config + ") ok.");

Producer procuder = new Producer<>(config);

String topic = "mytopic";

for (int i = 1; i <= 10; i++) {

String value = "value_" + i;

KeyedMessage msg = new KeyedMessage(topic, value);

procuder.send(msg);

}

logger.info("send message over.");

procuder.close();

}

/**

* @param args

*/

public static void main(String[] args) {

SimpleKafkaProducer simpleProducer = new SimpleKafkaProducer();

simpleProducer.execMsgSend();

}

}

此时通过控制台方式启动的消费者,可以看到生产者生产的数据被消费者消费了:[hadoop@nnode kafka0.8.2.1]$ bin/kafka-console-consumer.sh --zookeeper nnode:2181,dnode1:2181,dnode2:2181 --topic mytopic --from-beginning

hello world

this is my first message

value_1

value_2

value_3

value_4

value_5

value_6

value_7

value_8

value_9

value_10

Java实现的消息消费者package com.lucl.kafka.simple;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import kafka.consumer.Consumer;

import kafka.consumer.ConsumerConfig;

import kafka.consumer.ConsumerIterator;

import kafka.consumer.KafkaStream;

import kafka.javaapi.consumer.ConsumerConnector;

import kafka.message.MessageAndMetadata;

import kafka.serializer.Decoder;

import kafka.serializer.StringDecoder;

import kafka.utils.VerifiableProperties;

import org.apache.log4j.Logger;

/**

 Copyright: Copyright (c) 2015 

*

 Date : 2015-11-17 21:42:50 

*

 Description : JavaApi for kafka consumer 

*

* @author luchunli

*

* @version 1.0

*

*/

public class SimpleKafkaConsumer {

private static final Logger logger = Logger.getLogger(SimpleKafkaConsumer.class);

/**

*

*/

private void execMsgConsume() {

Properties props = new Properties();

props.put("zookeeper.connect", "nnode:2181,dnode1:2181,dnode2:2181");

props.put("group.id", "group-1");

props.put("serializer.class", "kafka.serializer.StringEncoder");

ConsumerConfig config = new ConsumerConfig(props);

ConsumerConnector consumer = Consumer.createJavaConsumerConnector(config);

Map topicCountMap = new HashMap();

topicCountMap.put("mytopic", 1);

Decoder keyDecoder = new StringDecoder(new VerifiableProperties());

Decoder valueDecoder = new StringDecoder(new VerifiableProperties());

Map>> createMessageStreams = consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder);

for (Iterator it = createMessageStreams.keySet().iterator(); it.hasNext(); ) {

String key = it.next();

logger.info("The key of the createMessageStreams is " + key);

List> values = createMessageStreams.get(key);

for (KafkaStream value : values) {

ConsumerIterator consumerIt = value.iterator();

while (consumerIt.hasNext()) {

MessageAndMetadata data = consumerIt.next();

logger.info("The message got by consuer is " + data.message());

}

}

}

}

/**

* @param args

*/

public static void main(String[] args) {

SimpleKafkaConsumer simpleConsumer = new SimpleKafkaConsumer();

simpleConsumer.execMsgConsume();

}

}

启动Consumer程序,然后再启动Producer程序,此时Consumer端输出内容如下:23:37:30,411  INFO SimpleKafkaConsumer:55 - The key of the createMessageStreams is mytopic

23:37:30,433  INFO VerifiableProperties:68 - Verifying properties

23:37:30,433  INFO VerifiableProperties:68 - Property client.id is overridden to group-1

23:37:30,433  INFO VerifiableProperties:68 - Property metadata.broker.list is overridden to nnode:9092

23:37:30,433  INFO VerifiableProperties:68 - Property request.timeout.ms is overridden to 30000

23:37:30,451  INFO ClientUtils$:68 - Fetching metadata from broker id:117,host:nnode,port:9092 with correlation id 0 for 1 topic(s) Set(mytopic)

23:37:30,453  INFO SyncProducer:68 - Connected to nnode:9092 for producing

23:37:30,486  INFO SyncProducer:68 - Disconnecting from nnode:9092

23:37:30,528  INFO ConsumerFetcherThread:68 - [ConsumerFetcherThread-group-1_LuchunliPC-1447947448911-f949268d-0-117], Starting

23:37:30,546  INFO ConsumerFetcherManager:68 - [ConsumerFetcherManager-1447947449115] Added fetcher for partitions ArrayBuffer([[mytopic,0], initOffset -1 to broker id:117,host:nnode,port:9092] )

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_1

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_2

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_3

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_4

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_5

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_6

23:37:52,466  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_7

23:37:52,469  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_8

23:37:52,469  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_9

23:37:52,469  INFO SimpleKafkaConsumer:61 - The message got by consuer is value_10

23:39:11,351  INFO ClientCnxn:1096 - Client session timed out, have not heard from server in 4000ms for sessionid 0x3512026596f0001, closing socket connection and attempting reconnect

23:39:11,452  INFO ZkClient:449 - zookeeper state changed (Disconnected)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值