虚拟服务器接收不到消息,远程kafka通信实例,各种bug解决----虚拟机+本地电脑...

为了实现远程kafka通信,我可谓是呕心沥血。期间各种bug各种调,太煎熬了 (T.T)

介绍:

我用一台虚拟机作为远程消息的发送方,用本地电脑主机作为消息的接收方

虚拟机:安装java,kafka,zookeeper

主机:eclipse,注意我没有说在主机上也要安装kafka的

1、虚拟机部署

1)下载kafka_2.11-2.2.0 我用的最新的(当前)

2)解压到 /usr/local/ ,注意切换都root,不然后面编辑不了文件

b4d2ca1ba0fb98bd000944ec5cebb4ca.png

3)配置文件 kafka/config/server.properties 只用修改下面三个

54724d349d44d96a5607c6180d4f8c00.png

稍微解释下:上面的ip都是一个,都是虚拟机ip,修改后可以在本机接收消息也可以在远程(本地电脑或者其他电脑接收)

不知道虚拟机ip?  在命令行下 敲 ifconfig就可以找到了

2、本地eclipse

1)新建maven工程

pom.xml    注意里面的kafka版本最好和远程对应(其他版本有可能发生错误,收不到消息)

4.0.0

hadoop

eclipseandmaven

0.0.1-SNAPSHOT

jar

eclipseandmaven

http://maven.apache.org

UTF-8

org.apache.storm

storm-kafka-client

1.1.1

org.apache.kafka

kafka-clients

2.2.0

org.apache.storm

storm-core

1.1.1

junit

junit

3.8.1

test

建立  MainTopology.java

importorg.apache.storm.Config;importorg.apache.storm.LocalCluster;importorg.apache.storm.StormSubmitter;importorg.apache.storm.kafka.spout.KafkaSpout;importorg.apache.storm.kafka.spout.KafkaSpoutConfig;importorg.apache.storm.topology.TopologyBuilder;public classMainTopology {public static void main(String[] args) throwsException {

TopologyBuilder builder= newTopologyBuilder();//ip设置为虚拟机ip,后面的topic要和虚拟机上的一样

KafkaSpoutConfig.Builder kafkaBuilder = KafkaSpoutConfig.builder("192.168.83.133:9092","test561");//设置kafka属于哪个组

kafkaBuilder.setGroupId("testgroup");//创建kafkaspoutConfig

KafkaSpoutConfig build =kafkaBuilder.build();//通过kafkaspoutConfig获得kafkaspout

KafkaSpout kafkaSpout = new KafkaSpout(build);//设置5个线程接收数据

builder.setSpout("kafkaSpout", kafkaSpout, 5);//设置2个线程处理数据

builder.setBolt("printBolt", new PrintBolt(), 2).localOrShuffleGrouping("kafkaSpout");

Config config= newConfig();if (args.length > 0) {//集群提交模式

config.setDebug(false);

StormSubmitter.submitTopology(args[0], config, builder.createTopology());

}else{//本地测试模式

config.setDebug(true);//设置2个进程

config.setNumWorkers(2);

LocalCluster cluster= newLocalCluster();

cluster.submitTopology("kafkaSpout", config, builder.createTopology());

}

}

}

建立  PrintBolt.java

importorg.apache.storm.topology.BasicOutputCollector;importorg.apache.storm.topology.OutputFieldsDeclarer;importorg.apache.storm.topology.base.BaseBasicBolt;importorg.apache.storm.tuple.Tuple;public class PrintBolt extendsBaseBasicBolt {/*** execute会被storm一直调用

*

*@paramtuple

*@parambasicOutputCollector*/

public voidexecute(Tuple tuple, BasicOutputCollector basicOutputCollector) {//为了便于查看消息用err标红

System.err.println(tuple.getValue(4));

System.err.println(tuple.getValues());

}public voiddeclareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {

}

}

3、运行

切换到kafka安装目录

1)启动zookeeper

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

2)启动kafka服务

bin/kafka-server-start.sh -daemon config/server.properties

3)创建生产者

bin/kafka-console-producer.sh --broker-list 192.168.83.133:9092 --topic test561

4)创建消费者

bin/kafka-console-consumer.sh --bootstrap-server 192.168.83.133:9092 --topic test561 --from-beginning

5)启动本地eclipse项目

6)在3)中的窗口发送字符串

40bbb912c8c0c3b8327426670f98cef7.png

7)4)中可以收到消息,同时本地也可以收到消息

ccd99a4d446ac9b4e46d032388e4a83a.png 

35a93c500ec6a50294717392d5e4fddb.png

4、问题罗列

1)再次使用发现启动不了------杀进程

ps -ef |grep kafka

kill-9kafka的pid

ps-ef |grep zookeeper

kill-9 zookeeper的pid

2)收不到消息是不是防火墙的原因

进行远程telnet测试(如果不报错就可以用,不用改动什么了,否则要把虚拟机防火墙关闭或者开放端口 下面有连接 )

telnet192.168.83.133 9092

3)自己安装的zookeeper和kafka自带的不能混用

我自己安装了一个然后还设置了自启动,然后每次运行kafka自带的zookeeper时总是启动不了消费者。。。。。。

之后我把它删了只用kafka自带的就可以了。

4)jdk版本不适合

java版本我原先用的openjdk1.7,后来重新下载了一个jdk1.8安装的,

然后下载时要登录,就找了一个(谢谢共享)

name:2696671285@qq.com

pwd:Oracle123

5)还有。。。到以后再总结吧

参考:

防火墙:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值