前面已经部署好了Kafka集群并且在利用kafka集群提供的脚本测试通过,下面要进入Java开发环境搭建。
一、环境描述
1、server2008下 eclipse (kepler)
2、本机建立了虚拟机系统: redhat 6.4 ip:192.168.5.130,192.168.5.132,192.168.5.133
3、在三台虚拟机上部署了zookeeper 分布式192.168.5.130:2181,192.168.5.132:2181,192.168.5.133:2181
4、在虚拟机上部署了kafka broker集群:192.168.5.130:9092,192.168.5.132:9092,192.5.133:9092
broker id 分别为 1,2,3
二、目标
1、在eclipse上建立工程,导入依赖库,可以正常编译, producter和consumer 都可以实现
2、可以在eclipse 调试程序, 本机 ----》连接虚拟机的 zookeeper集群和 kafka的broker集群
三、搭建过程
整个过程其实走了一些弯路,网络上一些内容因为版本的问题,可能会用 maven方式,实际上现在也可以直接用常用的java工程开发方式,看各自喜欢。
另外,最新的api开发更简单而且据说效率更高,所以。。。。摸索都是泪。希望本篇可以让大家少走弯路。
1) maven方式建立工程
----------具体安装maven和配置的步骤见maven实践
在eclipse集成maven已经实现后,创建一个maven工程: 打开eclipse,File->new->other 选中maven project
然后,修改pom.xml,在文件中增加如下依赖
完成后,保存。保存会触发maven工程自己会从网络上下载依赖库,出现如下界面,就说明工程正在自动下载依赖库。
编写producter代码:
public class MyProducer {
private static finalString TOPIC = "test"; //kafka创建的topic
private staticfinal String CONTENT = "This is a single message"; //要发送的内容
private staticfinal String BROKER_LIST ="192.168.5.130:9092,192.168.5.132:9092,192.168.5.133:9092"; //broker的地址和端口
private staticfinal String SERIALIZER_CLASS = "kafka.serializer.StringEncoder"; // 序列化类
public static voidmain(String[] args) {
Propertiesprops = new Properties();
props.put("serializer.class", SERIALIZER_CLASS);
props.put("metadata.broker.list", BROKER_LIST);
ProducerConfigconfig = new ProducerConfig(props);
Producer
//Send onemessage.
KeyedMessage
newKeyedMessage
producer.send(message);
//Sendmultiple messages.
List
newArrayList
for (int i =0; i < 5; i++) {
messages.add(new KeyedMessage
(TOPIC, "Multiple message at a time. " + i));
}
producer.send(messages);
producer.close();
}
}
然后确保没有错误后,在需要测试的类上右键-》run as java application
正常情况下,就可以连接上kafka,producter向消息队列推送消息,consumer可以从消息队列接受消息。
在虚拟机上开一个consumer接受消息,
[hadoop@hslave1kafka_2.10-0.9.0.1]$ bin/kafka-console-consumer.sh --zookeeperhmaster:2181,hslave1:2181,hslave2:2181 --from-beginning --topic test执行结果如下:
到此结束,window开发环境与集群通信没有问题,在此期间会遇到很多问题,本人已经解决,所以赶快去测试一通吧。实践是出真理。