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时,无法发送、接收消息的问题的更多相关文章

  1. oracle11gR2 win7_32位客户端连接虚拟机中oracle11gR2 win7_32位服务器方法

    改写服务器中的监听文件(listener.ora和tnsnames.ora) “ora-12541:TNS:无监听程序”问题的解决 ora-12541:TNS:无监听程序,出现这种错误的时候,可以尝试 ...

  2. kafka控制测试发送接收消息

    kafaka,生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 消费者:./kafka-co ...

  3. 通过java客户端连接hbase 注意事项

    1.通过Java客户端连接Hbase,其中hbase通过zookeeper去管理,需要注意的是客户端端口. 通过在浏览器端输入地址查看:http://192.168.3.206:60010/maste ...

  4. 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接

    在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...

  5. Zookeeper学习记录及Java客户端连接示例

    1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...

  6. Elasticsearch - java客户端连接

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...

  7. PL/SQL客户端连接虚拟机(linux)下的oracle服务器配置

    虚拟机上linux装了oracle数据库服务器,想通过windowspl/sql客户端连接到服务器上,虚拟机的网络连接方式我设置为host-only.     去oracle官方网站下载instant ...

  8. Java对象在虚拟机中的创建、内存分布、访问定位以及死亡判定

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6535156.html  一:虚拟机中对象的创建 1:虚拟机遇到new指令时,在常量池检索是否有对应的符号引用, ...

  9. Java 虚拟机中的运行时数据区分析

    本文基于 JDK1.8 阐述分析 运行过程 我们都知道 Java 源文件通过编译器编译后,能产生相应的 .Class 文件,也就是字节码文件.而字节码文件通过 Java 虚拟机中的解释器,编译成特定机 ...

随机推荐

  1. Android插件换肤 一.实现原理

    学习缺的不是时间,而是耐心 目的 1.搞懂系统获取资源文件到在加载布局的整个流程是自己实现换肤功能的理论基础 2.提高分析源码.追踪源码的能力 要点 1.XmlResourceParser (通过这个 ...

  2. Solon 特性简集,相较于 Springboot 有什么区别?

    Solon 是一个类似Springboot的微型开发框架,也是一个不基于Servlet的开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的 ...

  3. Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)

    首先 我们先看到的这个方法入参是:Function<? super Object , V> mapper ,这是jdk1.8为了统一简化书写格式引进的函数式接口 . 简单 解释一下我对Fu ...

  4. springMVC框架连接数据库查询数据

    1.框架搭建,创建一个maven项目打war包 web.xml文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  5. Git设置记住账号密码

    Git设置记住账号密码 添加如下配置 [credential] helper = store

  6. 项目中同一个页面引入不同的jQuery版本的不冲突问题

    在写项目的过程中,如果需要使用jQuery时,时长会遇到需要引入不同版本的jQuery,可能上一个负责该项目的人用到的是老版本的jQuery,而你去添加功能时用的是新版本的,这个问题很难避免掉,如果去 ...

  7. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  8. IdentityServer4 之Client Credentials走起来

    前言 API裸奔是绝对不允许滴,之前专门针对这块分享了jwt的解决方案(WebApi接口裸奔有风险):那如果是微服务,又怎么解决呢?每一个服务都加认证授权也可以解决问题,只是显得认证授权这块冗余,重复 ...

  9. ElasticSearch教程——分片、扩容以及容错机制(转学习使用)

    一.Primary shard和replica shard机制 1.index包含多个shard; 2.每个shard都是一个最小的工作单元,承载部分的数据,Lucene实例,完整的简历索引和处理请求 ...

  10. 风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施

    风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施 Python 语言可能发生的命令执行漏洞 内置危险函数 eval和exec函数 eval eval是一个python内置函数, ...