远程kafka通信实例,各种bug解决----虚拟机+本地电脑
为了实现远程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版本最好和远程对应(其他版本有可能发生错误,收不到消息)
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>hadoop</groupId>
- <artifactId>eclipseandmaven</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>eclipseandmaven</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.apache.storm</groupId>
- <artifactId>storm-kafka-client</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.kafka</groupId>
- <artifactId>kafka-clients</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.storm</groupId>
- <artifactId>storm-core</artifactId>
- <version>1.1.1</version>
- <!-- 本地测试注释集群运行打开 -->
- <!-- <scope>provided</scope>-->
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
建立 MainTopology.java
- import org.apache.storm.Config;
- import org.apache.storm.LocalCluster;
- import org.apache.storm.StormSubmitter;
- import org.apache.storm.kafka.spout.KafkaSpout;
- import org.apache.storm.kafka.spout.KafkaSpoutConfig;
- import org.apache.storm.topology.TopologyBuilder;
- public class MainTopology {
- public static void main(String[] args) throws Exception {
- TopologyBuilder builder = new TopologyBuilder();
- //ip设置为虚拟机ip,后面的topic要和虚拟机上的一样
- KafkaSpoutConfig.Builder<String, String> kafkaBuilder = KafkaSpoutConfig.builder("192.168.83.133:9092","test561");// 设置kafka属于哪个组
- kafkaBuilder.setGroupId("testgroup");
- // 创建kafkaspoutConfig
- KafkaSpoutConfig<String, String> build = kafkaBuilder.build();
- // 通过kafkaspoutConfig获得kafkaspout
- KafkaSpout<String, String> kafkaSpout = new KafkaSpout<String, String>(build);
- // 设置5个线程接收数据
- builder.setSpout("kafkaSpout", kafkaSpout, 5);
- // 设置2个线程处理数据
- builder.setBolt("printBolt", new PrintBolt(), 2).localOrShuffleGrouping("kafkaSpout");
- Config config = new Config();
- if (args.length > 0) {
- // 集群提交模式
- config.setDebug(false);
- StormSubmitter.submitTopology(args[0], config, builder.createTopology());
- } else {
- // 本地测试模式
- config.setDebug(true);
- // 设置2个进程
- config.setNumWorkers(2);
- LocalCluster cluster = new LocalCluster();
- cluster.submitTopology("kafkaSpout", config, builder.createTopology());
- }
- }
- }
建立 PrintBolt.java
- import org.apache.storm.topology.BasicOutputCollector;
- import org.apache.storm.topology.OutputFieldsDeclarer;
- import org.apache.storm.topology.base.BaseBasicBolt;
- import org.apache.storm.tuple.Tuple;
- public class PrintBolt extends BaseBasicBolt {
- /**
- * execute会被storm一直调用
- *
- * @param tuple
- * @param basicOutputCollector
- */
- public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
- // 为了便于查看消息用err标红
- System.err.println(tuple.getValue(4));
- System.err.println(tuple.getValues());
- }
- public void declareOutputFields(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)中的窗口发送字符串
7)4)中可以收到消息,同时本地也可以收到消息
4、问题罗列
1)再次使用发现启动不了------杀进程
- ps -ef | grep kafka
- kill -9 kafka的pid
- ps -ef | grep zookeeper
- kill -9 zookeeper的pid
2)收不到消息是不是防火墙的原因
- 进行远程telnet测试(如果不报错就可以用,不用改动什么了,否则要把虚拟机防火墙关闭或者开放端口 下面有连接 )
- telnet 192.168.83.133 9092
3)自己安装的zookeeper和kafka自带的不能混用
我自己安装了一个然后还设置了自启动,然后每次运行kafka自带的zookeeper时总是启动不了消费者。。。。。。
之后我把它删了只用kafka自带的就可以了。
4)jdk版本不适合
java版本我原先用的openjdk1.7,后来重新下载了一个jdk1.8安装的,
然后下载时要登录,就找了一个(谢谢共享)
- name:2696671285@qq.com
- pwd:Oracle123
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解决----虚拟机+本地电脑的更多相关文章
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
- 【Azure 云服务】Azure Cloud Service在发布新部署后遇见不能RDP(远程连接)到实例时如何处理?
Azure 云服务是PaaS 的一个示例. 与 Azure 应用服务一样,此技术设计用于支持可缩放.可靠且运营成本低廉的应用程序. 同样,应用服务托管在虚拟机 (VM) 上,Azure 云服务也是如此 ...
- 解决虚拟机linux端mysql数据库无法远程访问
解决虚拟机linux端mysql数据库无法远程访问 1. 在控制台执行 mysql -u root -p mysql,CentOS系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台 ...
- Linux下简单的socket通信实例
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
- 【运维技术】kafka三实例集群环境搭建及测试使用
kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...
- springboot + kafka 入门实例 入门demo
springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...
- visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优
文/朱季谦 最近在做了一些JVM监控与调优的事情,算是第一次实践,还比较陌生,故而先把这一次经验简单记下笔记,这样,对后面学习调优方面时,不至于又想不起来了.本文档主要总结在window本地环境远程对 ...
- 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法
百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...
- paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决
paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决 windows ok linux犯错误... 查看loging, 初始化的时候儿jdbcurl,user,pwd都是 ...
随机推荐
- mongodb学习之:文档操作
在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...
- hdu1427 速算24点
</pre><pre> //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD #in ...
- window.onerror 错误监听,发到后台
var doc = document.body || document.documentElement; var _onerror = Onerror(''); var Onerror = funct ...
- 有关 java 不定参数
不定参数实际为数组参数的一种写法而已,本质上与数组参数完全相同 //1.数组参数函数 public static int sum(int[] values) { } //2.不定参数函数 不定参数只能 ...
- LVS集群的负载调度
LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. ...
- Python 参数校验的进化
Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...
- Windows消息类型及说明
WM_ Window Message 窗口消息,一般用在SendMessage,PostMessage这样的消息函数中 SM_ Static Message 静态标签消息 SS_ Static Sty ...
- 卡特兰数 HDU2067 & HDU4165 & HDU1134
题目链接:https://vjudge.net/problem/HDU-2067 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limi ...
- SpringMVC与Struts2区别与比较
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- C#入门---1、C#装备知识(C#如何学习)
C#入门---1.C#装备知识(C#如何学习) 一.总结 一句话总结: 主视频,辅助书和教程:还是得看视频,直接看书或者看教程效率不高 1.C#和.NET的关系和区别? .net是一个平台,核心是.n ...