1. 先安装zookeeper
a. 下载zookeeper-3.3.6.tar.gz 解压到D:\xxx下,
b. 修改zookeeper主配置文件,conf\zoo.cfg 如没有,则新建,将其中的linux路径分隔符统一改成windows下java 语言的分隔符 \\ 如:D:\\xxx\\xxx
c. 运行bin\zkServer.bat则启动了zookeeper , 测试用,可用jps显示 出QuorumPeerMain进程,则表明zookeeper安装成功,然后ctrl+c关闭zookeeper进程
2. 安装kafka
a. 下载kafka_2.10-0.8.2.0.tar.gz,解压到D:\kafka_2.10-0.8.2.0
b. conf\zookeeper.properties 启动zookeeper时使用的配置文件,相当于上文中的zoo.cfg , 修改配置文件后,启动zookeeper时使用kafka中bin\windows\zookeeper-server-start.bat文件 ,启动方法如下图所示
校验启动:
c. 启动kafka(提前修改好kafka-server的配置文件servier.properties
3. 校验
a.首先创建topic
先查看topic列表
创建topic
再次查看topic列表
b. 启动控制台消息接收器
c. 启动控制台消息发送器并发送消息(hello world!)
则消息接收控制台已经收到消息
至此,windows平台下 kafka的安装已全部完成
4. 使用java语言编写消息发送、接收客户端、kafka作为消息中间件的代码
代码:
package kafka_learn;
import java.util.Properties;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
public class MyProducer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("metadata.broker.list", "localhost:9092");
props.put("serializer.class", "kafka.serializer.StringEncoder");
props.put("request.required.acks", "0");
props.put("producer.type", "async");
ProducerConfig config = new ProducerConfig(props);
Producer<String, String> producer = new Producer<String, String>(config);
String msg = "message from ydy client";
KeyedMessage<String, String> data = new KeyedMessage<String, String>("ydy", msg);
producer.send(data);
producer.close();
}
}
Consumer代码:
package kafka_learn;
import java.util.HashMap;
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;
public class MyConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("zookeeper.connect", "localhost:2181");
props.put("auto.commit.enable", "true");
props.put("auto.commit.interval.ms", "60000");
props.put("group.id", "test-group");
ConsumerConfig consumerCfg = new ConsumerConfig(props);
ConsumerConnector consumerConn = Consumer.createJavaConsumerConnector(consumerCfg);
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put("ydy", 1);
KafkaStream<byte[], byte[]> kstream = consumerConn.createMessageStreams(topicCountMap).get("ydy").get(0);
ConsumerIterator<byte[], byte[]> iter = kstream.iterator();
System.out.println("--------开始从kafka接受消息----------");
while(iter.hasNext()){
System.out.println(new String(iter.next().message()));
}
}
}