在虚拟机上搭建 Docker Kafka 宿主机器程序无法访问解决方法

本文主要是介绍在虚拟机上搭建 Docker Kafka 宿主机器程序无法访问解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、问题描述

在虚拟机CentOS-7上搭建的Docker Kafka ,docker内部可以创建Topic、可以生产者数据、可以消费数据,而在宿主机开发程序无法消费Docker  Kafka的数据。

1.1、运行情况

[docker@localhost ~]$ docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS                    PORTS                                                                     NAMES
c894cb467f23   wurstmeister/kafka   "start-kafka.sh"         19 minutes ago   Up 19 minutes             0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                 kafka
ca4c190038ea   zookeeper            "/docker-entrypoint.…"   58 minutes ago   Up 58 minutes             2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp   zookeeper

1.2、生产数据

[docker@localhost ~]$ docker exec -it kafka kafka-console-producer.sh --broker-list 192.168.33.231:9092 --topic test
>123
>345
>2024-06-07

1.3、消费数据

[docker@localhost ~]$ docker exec -it kafka kafka-console-consumer.sh --bootstrap-server 192.168.33.231:9092 --topic test --from-beginning
123
345
2024-06-07

2、问题分析

2.1、docker 配置

docker run -d --name kafka --publish 9092:9092 \
--link zookeeper \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.33.231 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.33.231:2181 \
--env KAFKA_ADVERTISED_PORT=9092  \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.33.231:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://:9092 \
--env KAFKA_LOG_DIRS=/kafka/kafka-logs-1 \
-v /bigdata/kafka_data/data:/kafka/kafka-logs-1  \
wurstmeister/kafka

2.2.端口查看

[docker@localhost ~]$ lsof -i:9092
[docker@localhost ~]$
[docker@localhost ~]$
[docker@localhost ~]$
[docker@localhost ~]$
[docker@localhost ~]$
[docker@localhost ~]$
[docker@localhost ~]$ netstat -tunlp | grep 9092
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:9092            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::9092                 :::*                    LISTEN      -

2.3、原因分析

1)配置原因

-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://139.226.179.239:9092 
把kafka的地址端口注册给zookeeper,若远程访问要改成外网IP,千万注意是外网IP,很多文章只说是宿主机IP, 演示例子上写的是内网IP,很容易被误导

-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 
配置kafka的监听端口

2)虚拟机防火墙

  • 查看防火墙是否开启

systemctl status firewalld

  • 开启防火墙

firewall-cmd --list-ports

  • 重启防火墙

firewall-cmd --reload

  • 启动防火墙后,默认没有开启任何端口,需要手动开启端口

firewall-cmd --zone=public --add-port=9092/tcp --permanent

参数:--zone    (作用域)
      --add-port=9092/tcp   (添加端口,格式:端口/通讯协议)
      --permanent   (永久生效,没有此参数重启后失效)

3、解决方法

3.1、关闭虚拟机防火墙

systemctl stop firewalld.service

3.2、添加宿主机到Docker的路由

以管理员身份运行CMD,添加如下路由
route add -p 172.17.0.2 mask 255.255.0.0 192.168.33.231

3.3、打开虚拟机NET网卡配置

添加宿主机和虚拟机网卡 端口转发如图:

4、结论:

本机-宿主机程序直接发送数据

Docker kafka 数据:

这篇关于在虚拟机上搭建 Docker Kafka 宿主机器程序无法访问解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042044

相关文章

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步