不想看过程,可以看已解决报错的创建kafka容器命令如下:

docker run -d --name kafka -p 9092:9092 --link zookeeper -e KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" wurstmeister/kafka:2.12-2.3.1

有兴趣看发现问题的过程再往下看。。。。。。。。。。

Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper

一.使用Docker安装zookeeper

下载镜像:

docker pull zookeeper:3.4.14

创建容器:

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14

查看是否成功:

docker ps

并使用tcp工具测试ip端口是通的。 

测试工具可下载使用:https://download.csdn.net/download/a34569345/88259825

二.使用Docker安装kafka

下载镜像:

docker pull wurstmeister/kafka:2.12-2.3.1

创建容器:

docker run -d --name kafka -e KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 -e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" --net=host wurstmeister/kafka:2.12-2.3.1

说明:使用 --net=host:直接使用容器宿主机的网络命名空间,即没有独立的网络环境。它使用宿主机的ip和端口。

 查看是否成功:

docker ps

使用tcp工具测试ip端口不通,使用代码也访问不上。

所以下面指定不使用--net=host,使用 -p 9092:9092 来指定端口。

删除刚刚创建的kafka容器,再执行:

docker run -d --name kafka -p 9092:9092 -e KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 -e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" wurstmeister/kafka:2.12-2.3.1

发现启动时报错了:

[2023-08-27 12:05:22,335] 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.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:258)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:254)
        at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:112)
        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1826)
        at kafka.server.KafkaServer.createZkClient$1(KafkaServer.scala:364)
        at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:387)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:207)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
        at kafka.Kafka$.main(Kafka.scala:84)
        at kafka.Kafka.main(Kafka.scala)

修改为以下命令才创建成功:

docker run -d --name kafka -p 9092:9092 --link zookeeper -e KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" wurstmeister/kafka:2.12-2.3.1

说明:增加了--link zookeeper,zookeeper的ip配置修改成zookeeper。

--link zookeeper 和 KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 中的zookeeper指的是docker中zookeeper容器的名称,也可以使用容器的id。

注意:关联zookeeper容器频繁创建和删除kafka容器,后导致kafka生产和消费不生效,需要成删除zookeeper和kafka容器,重新创建。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐