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

介绍:

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

虚拟机:安装java,kafka,zookeeper

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

1、虚拟机部署

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

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

    

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

    

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

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

    

 2、本地eclipse

    1)新建maven工程

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

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4.  
  5. <groupId>hadoop</groupId>
  6. <artifactId>eclipseandmaven</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9.  
  10. <name>eclipseandmaven</name>
  11. <url>http://maven.apache.org</url>
  12.  
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. </properties>
  16. <dependencies>
  17.  
  18. <dependency>
  19. <groupId>org.apache.storm</groupId>
  20. <artifactId>storm-kafka-client</artifactId>
  21. <version>1.1.1</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.apache.kafka</groupId>
  25. <artifactId>kafka-clients</artifactId>
  26. <version>2.2.0</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.apache.storm</groupId>
  30. <artifactId>storm-core</artifactId>
  31. <version>1.1.1</version>
  32. <!-- 本地测试注释集群运行打开 -->
  33. <!-- <scope>provided</scope>-->
  34. </dependency>
  35. <dependency>
  36. <groupId>junit</groupId>
  37. <artifactId>junit</artifactId>
  38. <version>3.8.1</version>
  39. <scope>test</scope>
  40. </dependency>
  41. </dependencies>
  42. </project>

建立  MainTopology.java

  1. import org.apache.storm.Config;
  2. import org.apache.storm.LocalCluster;
  3. import org.apache.storm.StormSubmitter;
  4. import org.apache.storm.kafka.spout.KafkaSpout;
  5. import org.apache.storm.kafka.spout.KafkaSpoutConfig;
  6. import org.apache.storm.topology.TopologyBuilder;
  7.  
  8. public class MainTopology {
  9. public static void main(String[] args) throws Exception {
  10. TopologyBuilder builder = new TopologyBuilder();
  11. //ip设置为虚拟机ip,后面的topic要和虚拟机上的一样
  12. KafkaSpoutConfig.Builder<String, String> kafkaBuilder = KafkaSpoutConfig.builder("192.168.83.133:9092","test561");// 设置kafka属于哪个组
  13. kafkaBuilder.setGroupId("testgroup");
  14. // 创建kafkaspoutConfig
  15. KafkaSpoutConfig<String, String> build = kafkaBuilder.build();
  16. // 通过kafkaspoutConfig获得kafkaspout
  17. KafkaSpout<String, String> kafkaSpout = new KafkaSpout<String, String>(build);
  18. // 设置5个线程接收数据
  19. builder.setSpout("kafkaSpout", kafkaSpout, 5);
  20. // 设置2个线程处理数据
  21. builder.setBolt("printBolt", new PrintBolt(), 2).localOrShuffleGrouping("kafkaSpout");
  22. Config config = new Config();
  23. if (args.length > 0) {
  24. // 集群提交模式
  25. config.setDebug(false);
  26. StormSubmitter.submitTopology(args[0], config, builder.createTopology());
  27. } else {
  28. // 本地测试模式
  29. config.setDebug(true);
  30. // 设置2个进程
  31. config.setNumWorkers(2);
  32. LocalCluster cluster = new LocalCluster();
  33. cluster.submitTopology("kafkaSpout", config, builder.createTopology());
  34. }
  35. }
  36. }

建立  PrintBolt.java

  1. import org.apache.storm.topology.BasicOutputCollector;
  2. import org.apache.storm.topology.OutputFieldsDeclarer;
  3. import org.apache.storm.topology.base.BaseBasicBolt;
  4. import org.apache.storm.tuple.Tuple;
  5.  
  6. public class PrintBolt extends BaseBasicBolt {
  7. /**
  8. * execute会被storm一直调用
  9. *
  10. * @param tuple
  11. * @param basicOutputCollector
  12. */
  13. public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
  14. // 为了便于查看消息用err标红
  15.  
  16. System.err.println(tuple.getValue(4));
  17. System.err.println(tuple.getValues());
  18. }
  19.  
  20. public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
  21.  
  22. }
  23. }

  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)中的窗口发送字符串

      

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

      

  4、问题罗列

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

  1. ps -ef | grep kafka
  2.  
  3. kill -9 kafkapid
  4.  
  5. ps -ef | grep zookeeper
  6.  
  7. kill -9 zookeeperpid

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

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

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

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

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

    4)jdk版本不适合

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

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

  1.       name2696671285@qq.com
  2.       pwdOracle123

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

参考:

https://blog.csdn.net/luozhonghua2014/article/details/80369469?utm_source=blogxgwz5

https://blog.csdn.net/wxgxgp/article/details/85701844

防火墙:

https://blog.csdn.net/feeltouch/article/details/21830541

https://kiddwyl.iteye.com/blog/67708

远程kafka通信实例,各种bug解决----虚拟机+本地电脑的更多相关文章

  1. Flex通信-与Java实现Socket通信实例

    Flex通信-与Java实现Socket通信实例  转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...

  2. 【Azure 云服务】Azure Cloud Service在发布新部署后遇见不能RDP(远程连接)到实例时如何处理?

    Azure 云服务是PaaS 的一个示例. 与 Azure 应用服务一样,此技术设计用于支持可缩放.可靠且运营成本低廉的应用程序. 同样,应用服务托管在虚拟机 (VM) 上,Azure 云服务也是如此 ...

  3. 解决虚拟机linux端mysql数据库无法远程访问

    解决虚拟机linux端mysql数据库无法远程访问 1. 在控制台执行 mysql -u root -p mysql,CentOS系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台 ...

  4. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  5. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...

  6. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

  7. visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优

    文/朱季谦 最近在做了一些JVM监控与调优的事情,算是第一次实践,还比较陌生,故而先把这一次经验简单记下笔记,这样,对后面学习调优方面时,不至于又想不起来了.本文档主要总结在window本地环境远程对 ...

  8. 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法

    百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...

  9. paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决

    paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决 windows ok linux犯错误... 查看loging, 初始化的时候儿jdbcurl,user,pwd都是 ...

随机推荐

  1. mongodb学习之:文档操作

    在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...

  2. hdu1427 速算24点

    </pre><pre> //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD #in ...

  3. window.onerror 错误监听,发到后台

    var doc = document.body || document.documentElement; var _onerror = Onerror(''); var Onerror = funct ...

  4. 有关 java 不定参数

    不定参数实际为数组参数的一种写法而已,本质上与数组参数完全相同 //1.数组参数函数 public static int sum(int[] values) { } //2.不定参数函数 不定参数只能 ...

  5. LVS集群的负载调度

    LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. ...

  6. Python 参数校验的进化

    Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...

  7. Windows消息类型及说明

    WM_ Window Message 窗口消息,一般用在SendMessage,PostMessage这样的消息函数中 SM_ Static Message 静态标签消息 SS_ Static Sty ...

  8. 卡特兰数 HDU2067 & HDU4165 & HDU1134

    题目链接:https://vjudge.net/problem/HDU-2067 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others)    Memory Limi ...

  9. SpringMVC与Struts2区别与比较

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  10. C#入门---1、C#装备知识(C#如何学习)

    C#入门---1.C#装备知识(C#如何学习) 一.总结 一句话总结: 主视频,辅助书和教程:还是得看视频,直接看书或者看教程效率不高 1.C#和.NET的关系和区别? .net是一个平台,核心是.n ...