安装kafka到window上,编写kafka java客户端连接kafka

来源:互联网 发布:破解软件游戏 编辑:程序博客网 时间:2024/06/06 12:33

最近想测试一下kafka的性能,折腾了大半天才把kafka安装到window上。下文提供安装的整个过程,绝对是可用的完整的,同时提供完整的kafka java客户端代码,用于与kafka沟通。在这里必须吐槽一下,网上大部分关于如何把kafka安装到window上的文章,要么不完整,要么kafka客户端代码是错误的或者不是基于0.8版本的。但是必须提醒一下,这篇文章只是介绍了其中的一种安装方法,可能不是最简洁的。


1、软件准备

  • kafka_2.9.1-0.8.2.1.tgz,需要到kafka官网下载。
  • sbt-0.13.9.msi,需要到sbt官网下载下载。
  • git bash 网上大把,我用的是Git-1.9.4-preview20140611.exe
  • Eclipse
  • Maven
  • Java 7

2、kafka环境设置

2.1  切换到kafka目录

先解压kafka_2.9.1-0.8.2.1.tgz,例如解压到D:\sam.lin\software\kafka\kafka_2.9.1-0.8.2.1。使用git bash,切换到kafka目录下。例如:


kafka需要的一些组件可以使用sbt update命令得到,如下:


2.2 sbt update

敲打回车键后,会出现一个错误信息,"sbt: No such file or directory",这个时候你需要安装sbt,下载网址我在上面的【软件准备】中已经提供了。本文下载的是sbt-0.13.9.msi这个版本。

sbt update命令会开始下载组件,如果是第一次安装,这个过程比较漫长,耐心等待吧。
当出现[success]字样时,说明安装组件成功了。

2.3 sbt package

如下图:


当出现[success]字样时,说明命令执行成功了。

2.4 sbt sbt-dependency

如下图:


当出现[info] org.scala-sbt:sbt:0.13.8,说明命令执行成功了。
到此,kafka环境搭建完毕。接下来需要搭建zookeeper.

3、zookeeper环境设置

注意,安装zookeeper的时候,在window上使用shell来安装是没法成功的,至少我尝试很多次都没成功。其实kafka已经为我们提供了在window安装zookeeper的bat脚本了,这些脚本存放在kafka安装目录中的bin/window上,如下:




注意在这里不能使用git bash了,原因是git bash执行bat文件时,会报语法错误。我们换成window的cmd命令行。

3.1 修改zookeeper和kafka的配置文件

  1) 修改config目录下的server.properties文件,修改
log.dirs=/D/sam.lin/software/kafka/kafka_2.9.1-0.8.2.1/kafka-logs

  2) 修改config目录下的log4j.properties文件,修改
log4j.appender.kafkaAppender.File=/D/sam.lin/software/kafka/kafka_2.9.1-0.8.2.1/logs/server.log

  3) 修改config目录下的zookeeper.properties文件,加入或者修改
dataDir=/D/sam.lin/software/kafka/kafka_2.9.1-0.8.2.1/data/zookeeper

3.2 使用window cmd命令行界面,切换到/bin/window目录

3.3 启动zookeeper



命令:zookeeper-server-start.bat ../../config/zookeeper.properties
启动成功后,不要关闭这个cmd命令行界面,因为关闭它,zookeeper进程就停了。


4、启动kafka broker


命令:kafka-server-start.bat ../../config/server.properties

启动成功后,不要关闭这个cmd命令行界面,因为关闭它,kafka进程就停了。

5、创建topic


命令:kafka-run-class.bat kafka.admin.TopicCommand --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hellotest

这个命令创建了名字为"hellotest"的topic。

6、发送消息

    
命令:kafka-console-producer.bat --broker-list localhost:9092 --topic hellotest
注意这里的hellotest就是刚才创建的topic。这个命令执行后,可以直接在命令行后面输入你要发的消息。

后面的samsamsam就我输入的,往hellotest这个topic发送的消息。下面我们创建消费者来消费消息。

7、接收消息


命令:kafka-console-consumer.bat --zookeeper localhost:2181 --topic hellotest --from-beginning

同样的,必须指定到hellotest这个topic消费消息,我在生产者的cmd命令行界面中输入samsamsam后,消息者cmd命令行界面立刻接收到了。


8、使用kafka提供的java 客户端来发送和接收消息

上面提到可以使用kafka自带的命令行工具来发送消息和接收消息,下面介绍一下使用java发送和接收消息。

8.1 发送者

     
package com.kafka;import java.util.Properties;import kafka.javaapi.producer.Producer;import kafka.producer.KeyedMessage;import kafka.producer.ProducerConfig;public class Sender {  public static void main(String[] args) {    Properties prop = new Properties();    prop.put("metadata.broker.list", "127.0.0.1:9092");    prop.put("serializer.class", "kafka.serializer.StringEncoder");    ProducerConfig producerConfig = new ProducerConfig(prop);    Producer<String, String> producer = new<String, String> Producer(producerConfig);    String topic = "hellotest";    KeyedMessage<String, String> message = new<String, String> KeyedMessage(topic, "Sam Hello Test message2");    producer.send(message);    producer.close();  }}

8.2 消费者

代码一


package com.kafka;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import kafka.consumer.ConsumerConfig;import kafka.consumer.KafkaStream;import kafka.javaapi.consumer.ConsumerConnector;public class ConsumerDemo {  private final ConsumerConnector consumer;  private final String topic;  private ExecutorService executor;  public ConsumerDemo(String zookeeper, String groupid, String aTopic) {    consumer = kafka.consumer.Consumer.createJavaConsumerConnector(ConsumerProps(zookeeper, groupid));    this.topic = aTopic;  }  public void run(int threads) {    Map<String, Integer> topicMap = new HashMap<String, Integer>();    topicMap.put(topic, new Integer(threads));    Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicMap);    List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);    executor = Executors.newFixedThreadPool(threads);    int numThread = 0;    for (final KafkaStream stream : streams) {      executor.submit(new ConsumerDemoRun(stream, numThread));      numThread++;    }  }  private static ConsumerConfig ConsumerProps(String zookeeper, String groupid) {    Properties properties = new Properties(); // config properties file    properties.put("zookeeper.connect", zookeeper);    properties.put("group.id", groupid);    properties.put("zookeeper.session.timeout.ms", "400");    properties.put("zookeeper.sync.time.ms", "200");    properties.put("auto.commit.interval.ms", "1000");    properties.put("auto.offset.reset", "smallest");    return new ConsumerConfig(properties);  }  public void shutdown() {    if (consumer != null)      consumer.shutdown();    if (executor != null)      executor.shutdown();    try {      if (!executor.awaitTermination(5000, TimeUnit.MILLISECONDS)) {        System.out.println("Timed out waiting for consumer threads to shut down, exiting uncleanly");      }    } catch (InterruptedException e) {      System.out.println("Interrupted during shutdown, exiting uncleanly");    }  }  public static void main(String[] args) {    String zookeeper = "localhost:2181";    String groupid = "group1";    String topic = "hellotest";    int threads = 1;    ConsumerDemo test = new ConsumerDemo(zookeeper, groupid, topic);    test.run(threads);    try {      Thread.sleep(10000);    } catch (InterruptedException ie) {    }    test.shutdown();  }}

代码二
package com.kafka;import kafka.consumer.ConsumerIterator;import kafka.consumer.KafkaStream;public class ConsumerDemoRun implements Runnable {  private KafkaStream aStream;  private int aThread;  public ConsumerDemoRun(KafkaStream stream, int thread) {    aStream = stream; // set stream from main read    aThread = thread; // set thread from main read  }  public void run() {    ConsumerIterator<byte[], byte[]> iterator = aStream.iterator(); // used to                                                                    // check                                                                    // throughout                                                                    // the list                                                                    // continiously    while (iterator.hasNext()) {      System.out.println("Thread " + aThread + ": " + new String(iterator.next().message()));    }    System.out.println("Shutting down Thread: " + aThread);  }}


要运行上面的代码,需要加入如下依赖
                 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.9.2</artifactId><version>0.8.2.1</version></dependency>



总结:

在window上安装kafka还挺麻烦的,上面提供的安装方式比较繁琐,应该有更加简单的方式。目前还没找到。
   

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网贷不知道在哪个平台借的怎么办 车过户后出现问题车主不承认怎么办 卖了车买家一直不过户怎么办 我的车卖了但是买家不过户怎么办 如果买家拍了赠品但联系不上怎么办 淘宝产品处罚下架顾客退货怎么办 生源地贷款续贷密码忘了怎么办 助学贷款续贷密码忘了怎么办 京东上回收东西如果是坏的怎么办 58.同城找的工作被骗了怎么办 京东第三方买了二手机怎么办 手机无法显示百度视频的视频怎么办 如果微信被盗号朋友钱被骗怎么办 绑定银行卡的电话号码换了怎么办办 银行卡绑定的手机号空号了怎么办 微信提示绑定银行卡次数超限怎么办 手机卡太久没用被注销了怎么办 电信宽带欠费缴费后上不了网怎么办 电信宽带欠费后缴费连不上网怎么办 电脑开不了机屏亮但不开机怎么办 手机信息探探链接点开了怎么办 买的钻戒的票丢掉了怎么办 如果我过户了原来的积分怎么办? 英雄联盟安装到了一半卡住了怎么办 微信登录不上怎么办一直在转圈 lol老是忘了放装备技能怎么办 英雄联盟屏幕出现红框锁定了怎么办 钢三开局修改对电脑有用怎么办 我的世界为什么一直黑屏闪退怎么办 苹果6plus玩游戏闪退怎么办 电脑重置开机黑屏了怎么办才好? 龟头有一小块和鱼鳞一样脱皮怎么办 海盗来了赠送碎片密码忘了怎么办 王者荣耀还差几百金币买英雄怎么办 英雄联盟更新后画面突然很卡怎么办 苹果手机微信登陆没反应怎么办 谷歌商店注册短信一直验证怎么办 英雄联盟开游戏退出来进不去怎么办 忘记了路由器和网关的密码怎么办 逆战无尽塔防71关没怪了怎么办 看香的师傅要钱特别多怎么办