关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题
kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案?
1.问题排查
(1)首先通过在服务器上使用命令行来模拟生产、消费数据,发现生产、消费数据正常。测试如下:
#生产者
bin/kafka-console-consumer.sh --bootstrap-server ***.***.***.***:9092 --topic test
其中 ***.***.***
代表的是 kafka broker的地址.
再开一个窗口启动消费者:
#消费者
bin/kafka-console-consumer.sh --bootstrap-server ***.***.***.***:9092 --topic test
在生产端随机输入数据,在消费者端接收正常,如下图所示:
(2)那么问题可能出现在client和服务端的连接上了,经过查资料分析,看到网上有如下解决方案:
将kafka/config/server.properties文件中advertised.listeners改为如下属性。192.168.75.137是我虚拟机的IP。改完后重启,OK了。Java端的代码终于能通信了
advertised.listeners=PLAINTEXT://192.168.75.137:9092
advertised.listeners上的注释是这样的:
#Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
意思就是说:hostname、port都会广播给producer、consumer。如果你没有配置了这个属性的话,则使用listeners的值,如果listeners的值也没有配置的话,则使用
java.net.InetAddress.getCanonicalHostName()返回值(这里也就是返回localhost了,也就是你的broker的hostname)。
这么说也没毛病,但是我本身也做了hostname的映射,即使返回hostname,我这边也能解析的,不用这样配置也ok啊,问题肯定不是这里。然后我继续排查。
(3) 通过getCanonicalHostName()方法排查
找到的测试语句如下:
import java.net.*;
public class TestDemo {
public static void outHostName(InetAddress address, String s)
{
System.out.println("通过" + s + "创建InetAddress对象");
System.out.println("主 机 名:" + address.getCanonicalHostName());
System.out.println("主机别名:" + address.getHostName());
System.out.println("");
}
public static void main(String[] args) throws Exception
{
// outHostName(InetAddress.getLocalHost(), "getLocalHost方法");
outHostName(InetAddress.getByName("***.***.***.***"),"***.***.***.***");
// outHostName(InetAddress.getByName("www.baidu.com"), "www.baidu.com");
}
}
2.问题解决
***.***.***.***
处为我的kafka broker的地址,结果输出结果为映射的其他的hostname,果然是配的时候大意了,在客户端查找对应的ip的映射,果然有问题,把对应的ip和hostname进行了更正,再次运行java代码生产消息后,kafka端成功消费,问题解决。
感谢:
https://blog.csdn.net/zhaominpro/article/details/79068141
https://blog.csdn.net/qq_37111953/article/details/79877086
关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题的更多相关文章
- oracle11gR2 win7_32位客户端连接虚拟机中oracle11gR2 win7_32位服务器方法
改写服务器中的监听文件(listener.ora和tnsnames.ora) “ora-12541:TNS:无监听程序”问题的解决 ora-12541:TNS:无监听程序,出现这种错误的时候,可以尝试 ...
- kafka控制测试发送接收消息
kafaka,生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 消费者:./kafka-co ...
- 通过java客户端连接hbase 注意事项
1.通过Java客户端连接Hbase,其中hbase通过zookeeper去管理,需要注意的是客户端端口. 通过在浏览器端输入地址查看:http://192.168.3.206:60010/maste ...
- 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接
在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...
- Zookeeper学习记录及Java客户端连接示例
1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...
- Elasticsearch - java客户端连接
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...
- PL/SQL客户端连接虚拟机(linux)下的oracle服务器配置
虚拟机上linux装了oracle数据库服务器,想通过windowspl/sql客户端连接到服务器上,虚拟机的网络连接方式我设置为host-only. 去oracle官方网站下载instant ...
- Java对象在虚拟机中的创建、内存分布、访问定位以及死亡判定
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6535156.html 一:虚拟机中对象的创建 1:虚拟机遇到new指令时,在常量池检索是否有对应的符号引用, ...
- Java 虚拟机中的运行时数据区分析
本文基于 JDK1.8 阐述分析 运行过程 我们都知道 Java 源文件通过编译器编译后,能产生相应的 .Class 文件,也就是字节码文件.而字节码文件通过 Java 虚拟机中的解释器,编译成特定机 ...
随机推荐
- Jquery Ajax如何添加header参数
转自网络 1 $.ajax({ 2 type: "POST", 3 url: "http://192.168.0.88/action.cgi?ActionID=WEB_R ...
- Core3.0读取appsetting.json中的配置参数
前言 方法很多,下面的例子也是从百度上搜索到的,原文链接已经找不到了. 方法1 1.添加NovelSetting节点,写入相关的配置信息 2.创建类,字段与上面的配置一致 3.StartUp.cs中获 ...
- WIN7远程桌面连接提示:“发生身份验证错误。要求的函数不受支持”
问题 WIN7远程桌面连接–"发生身份验证错误.要求的函数不受支持" 最近WIN7升级补丁后发现远程桌面无法连接了,报"发生身份验证错误.要求的函数不受支持"的 ...
- Autofac的基本使用---1、前言
Autofac的基本使用---目录 代码地址 https://github.com/catbiscuit/AutofacStudy 参考网上的大神,原博文地址 https://www.cnblogs. ...
- 【mybatis-plus】主键id生成、字段自动填充
一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UU ...
- AOP的姿势之 简化 MemoryCache 使用方式
0. 前言 之前写了几篇文章介绍了一些AOP的知识, 但是还没有亮出来AOP的姿势, 也许姿势漂亮一点, 大家会对AOP有点兴趣 内容大致会分为如下几篇:(毕竟人懒,一下子写完太累了,没有动力) AO ...
- @RequestBody,@RequestParam请求数据接收数据
一. @RequestBody 注解 @RequestBody是用于解析body中的json内容,对于我们使用时候我们需要指定Content-Type参数为application/json,标识我们需 ...
- 冰河又一MySQL力作出版(文末送书)!!
写在前面 继<海量数据处理与大数据技术实战>之后,冰河的又一力作<MySQL技术大全:开发.优化与运维实战>出版,相信这本书对任何想系统学习MySQL的小伙伴来说,都会带来实质 ...
- [LeetCode98]98. Validate Binary Search Tree判断二叉搜索树
判断二叉搜索树的方法是: 中序遍历形成递增序列 //全局变量记录中序遍历产生的序列,因为要递归,所以要用全局变量 List<Integer> list = new ArrayList< ...
- maven方式使用jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...