在Docker中安装kafka遇到问题记录
- Docker
- 时间:2023-08-22 15:15
- 4074人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
命令含义解答:
在docker安装kafka的时候,启动kafka的时候会执行下面语句:
docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.11.129:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.129:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
那么
docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.11.129:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.129:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
这个命令什么意思?
这个命令是用于在Docker中启动一个Kafka容器的命令。让我来解释一下这个命令的每个部分的含义:
docker run -d
: 这是Docker命令的一部分,用于在后台运行容器。--log-driver json-file --log-opt max-size=100m --log-opt max-file=2
: 这些是日志驱动相关的选项,用于配置容器的日志。--name kafka
: 这是为容器指定一个名称,本例中是"kafka"。-p 9092:9092
: 这是用于将容器内部的9092端口映射到主机的9092端口,以便可以通过主机访问Kafka。-e KAFKA_BROKER_ID=0
: 这是设置Kafka Broker ID的环境变量,本例中设置为0。-e KAFKA_ZOOKEEPER_CONNECT=192.168.11.129:2181/kafka
: 这是指定Zookeeper的连接地址和端口的环境变量,本例中连接到192.168.11.129的2181端口。-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.129:9092
: 这是设置广告侦听器的环境变量,Kafka将广告侦听器公布给Zookeeper。-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
: 这是设置侦听器的环境变量,这里设置Kafka监听所有接口的9092端口。-v /etc/localtime:/etc/localtime
: 这是将主机的时区文件挂载到容器中,以确保容器的时区与主机一致。wurstmeister/kafka
: 这是要运行的Kafka镜像的名称。
通过运行这个命令,您将在Docker中启动一个具有配置和映射的Kafka容器,其中包括Broker ID、Zookeeper连接、广告侦听器等设置。这样,您就可以在主机上使用Kafka来进行消息传递和其他操作。
疑问:上文中的-e KAFKA_ZOOKEEPER_CONNECT=192.168.11.129:2181/kafka。其中的192.168.11.129是zookeeper服务的ip地址吗?
答:
是的,192.168.11.129
是Zookeeper服务的IP地址。在这个命令中,通过设置KAFKA_ZOOKEEPER_CONNECT
环境变量为192.168.11.129:2181/kafka
,指定了Kafka连接到的Zookeeper服务的地址和端口。在这里,192.168.11.129
是Zookeeper服务器的IP地址,2181
是Zookeeper的默认端口号。在/kafka
后面的/kafka
路径是指定Kafka在Zookeeper中的命名空间。
docker与宿主机直接ping的问题
环境:docker中使用ifconfig查看ip是172.17.0.2,宿主机的ip是192.168.8.190.
docker desktop中启动zookeeper后,使用ifconfig,查看ip是172.17.0.2.在Windows的宿主机上ping 172.17.0.2,ping不通。但是在docker中的zk可以ping 通宿主机的ip。
如果在Windows的宿主机上无法ping通172.17.0.2,但在Docker中的zk能够ping通宿主机的IP,这可能是由于Windows主机上的网络配置导致的。
Docker Desktop使用虚拟网络和网络地址转换(NAT)来连接容器和宿主机。默认情况下,Docker会将容器连接到一个虚拟网络,并在宿主机上创建一个虚拟网卡来与这个网络进行通信。因此,172.17.0.2是在Docker的虚拟网络上分配给zk容器的IP地址,仅在Docker虚拟网络中可用。
要使Windows宿主机能够访问到容器内的IP地址,可以尝试使用Docker的端口映射功能,将容器的端口映射到宿主机上的一个端口。例如,可以使用以下命令来运行zk容器并映射端口:
docker run -d -p 2181:2181 --name my-zk zookeeper:tag
这将把zk容器的2181端口映射到宿主机上的2181端口。然后,在Windows主机上,可以使用它自己的IP地址和映射的端口访问zk。
那如果在docker中启动了kafka镜像。启动命令:docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.17.0.2:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.17.0.2:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
使用172.17.0.2还是使用Windows宿主机的ip?
在这种情况下,应该使用宿主机的IP地址,而不是172.17.0.2。原因是Kafka的KAFKA_ADVERTISED_LISTENERS
参数会告知客户端应该连接到哪个IP地址来访问Kafka服务器。
根据你提供的命令行参数,Kafka的广告侦听器配置为PLAINTEXT://172.17.0.2:9092
,这意味着Kafka会告知客户端通过连接到172.17.0.2的9092端口来访问Kafka。然而,这只适用于Docker内部的网络。
如果你想从Windows宿主机访问Kafka,请将KAFKA_ADVERTISED_LISTENERS
参数的值更改为宿主机的IP地址。即修改为PLAINTEXT://宿主机ip地址:9092
,例如:
docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.17.0.2:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主机ip地址:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
请将宿主机ip地址
替换为你的Windows宿主机的实际IP地址。这样,Kafka就会告知客户端通过连接到宿主机的IP地址的9092端口来访问Kafka,从而使Windows宿主机能够访问到Kafka服务。