Docker安装kafka
1、启动zookeeper容器
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
2、启动kafka容器
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=124.71.206.65:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://124.71.206.65:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
3、参数意义
-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
-e KAFKA_ZOOKEEPER_CONNECT=124.71.206.65:2181/kafka 配置zookeeper管理kafka的路径124.71.206.65:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://124.71.206.65:9092 把kafka的地址端口注册给zookeeper
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
4、kafka容器启动报错
sudo docker logs 容器id
报错如下:
[2022-03-24 15:37:19,696] INFO [ZooKeeperClient Kafka server] Closed. (kafka.zookeeper.ZooKeeperClient)
[2022-03-24 15:37:19,699] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:271)
at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:125)
at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1948)
at kafka.server.KafkaServer.createZkClient$1(KafkaServer.scala:431)
at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:456)
at kafka.server.KafkaServer.startup(KafkaServer.scala:191)
at kafka.Kafka$.main(Kafka.scala:109)
at kafka.Kafka.main(Kafka.scala)
[2022-03-24 15:37:19,702] INFO shutting down (kafka.server.KafkaServer)
连接zookeeper超时。
5、解决
将配置中 KAFKA_ZOOKEEPER_CONNECT的zookeeper的端口设置为外网ip,因为127.0.0.1或0.0.0.0相对kafka镜像来说是自己的镜像内部的内部ip,docker镜像外部无法访问。
我上面配置的124.71.206.65这个ip是公网的地址。 而对于docker容器内的ip需要的是内网ip即可。
ipconfig -a // 即 192.168.0.12
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.12 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:fe43:428d prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:43:42:8d txqueuelen 1000 (Ethernet)
RX packets 4791727 bytes 3513888397 (3.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4164455 bytes 538220021 (513.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
将images镜像删除,把上面配置改为:
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.0.12:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://:9092 -t wurstmeister/kafka
6、查询运行状态
sudo docker ps -a