docker上启动kafka

在docker上启动kafka,是因为最近我们开发的程序需要部署到k8s,在k8s上连接kafka,连接失败,因此我先搭建个环境,以供后续还原问题,解决问题。



一、docker上启动kafka

1.下载zookeeper镜像

docker pull wurstmeister/zookeeper

2.下载kafka镜像

docker pull wurstmeister/kafka

3.启动zookeeper

docker run -d --name zookeeper -p 2181:2181  -t wurstmeister/zookeeper

4.启动kafka

docker run -d --name kafka --publish 9092:9092 --link zookeeper:zookeeper -e KAFKA_BROKER_ID=1  -e HOST_IP=192.168.65.7  -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.65.7:9092  -e KAFKA_ADVERTISED_HOST_NAME=192.168.65.7 -e KAFKA_ADVERTISED_PORT=9082  --restart=always  -t  wurstmeister/kafka

部分参数含义:

KAFKA_BROKER_ID=1 kafka在集群中的唯一标识
KAFKA_ZOOKEEPER_CONNECT=zookeeper:12181 监听zookeeper的地址 
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.65.7:19092 kafka服务器的地址

5.进入kafka容器

1.先查看kafka镜像ID:
docker ps -a
在这里插入图片描述
2.进入容器
docker exec -it ${CONTAINER ID} /bin/bash
3.进入kafka的bin目录下
cd /opt/kafka_2.18/bin
4.创建topic
./kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka
5.运行生产者
./kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka
在这里插入图片描述
6.消费topic
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic mykafka
在这里插入图片描述

6.问题记录

1.当第一次启动kafka时报以下错误,连接超时的错,我报这错是因为我启动命令错了:
 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-01-20 07:33:19,615] INFO shutting down (kafka.server.KafkaServer)
[2022-01-20 07:33:19,645] INFO App info kafka.server for 0 unregistered (org.apache.kafka.common.utils.AppInfoParser)
[2022-01-20 07:33:19,646] INFO shut down completed (kafka.server.KafkaServer)
[2022-01-20 07:33:19,647] ERROR Exiting Kafka. (kafka.Kafka$)
[2022-01-20 07:33:19,657] INFO shutting down (kafka.server.KafkaServer)
INFO Opening socket connection to server 192.168.65.7/192.168.65.7:2181. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)
报错的启动命令:
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=192.168.65.7:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.65.7 --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka

总结

启动kafka遇到了很多问题,一直以为自己是网络不通,防火墙没开之类的,最后发现一直是自己的运行命令不正确,菜鸟的我,还需继续努力呀。

<think>好的,用户的问题是“在docker上面启动kafka”,我需要详细回答这个过程。首先,我应该考虑使用Docker Compose来部署Kafka,因为通常Kafka需要依赖Zookeeper(虽然新版本可能内置,但传统方式还是用Zookeeper)。所以步骤可能包括创建docker-compose.yml文件,配置Zookeeper和Kafka的服务,然后启动容器。 首先,需要确保安装了DockerDocker Compose。然后,创建一个docker-compose.yml文件,里面定义两个服务:zookeeper和kafka。Zookeeper的镜像可以用confluentinc/cp-zookeeper,Kafka的镜像用confluentinc/cp-kafka。需要注意环境变量的配置,比如KAFKA_ZOOKEEPER_CONNECT指向zookeeper服务的地址和端口,KAFKA_ADVERTISED_LISTENERS需要设置为外部可访问的地址,可能需要用宿主机的IP或者localhost,否则客户端可能无法连接。 然后,启动命令是docker-compose up -d,这样会后台启动两个容器。之后需要验证是否启动成功,可以通过docker logs查看日志,或者进入容器内部使用kafka-topics命令创建主题测试。 可能需要注意的问题包括端口映射,比如Zookeeper默认2181,Kafka默认9092,需要映射到宿主机的端口。另外,KAFKA_ADVERTISED_LISTENERS的设置很重要,如果设置不正确,客户端连接时可能会出现问题。比如在本地测试的话,可以设置为PLAINTEXT://localhost:9092,但如果是远程服务器,可能需要设置为服务器的公网IP。 现在需要把这些步骤整理成清晰的回答,确保用户能按照步骤操作。然后根据回答提出相关问题,比如Zookeeper的作用,如何验证Kafka是否启动成功,如何修改Kafka的配置,多节点集群如何部署,或者客户端连接失败的原因等。 </think>在 Docker启动 Kafka 通常需要结合 Zookeeper(Kafka 的依赖组件,用于管理集群元数据),推荐使用 Docker Compose 简化部署。以下是具体步骤: ### **步骤 1:安装 DockerDocker Compose** 确保已安装 DockerDocker Compose(若未安装,可参考官方文档完成安装)。 ### **步骤 2:创建 `docker-compose.yml` 配置文件** 在任意目录(如 `kafka-docker`)下创建 `docker-compose.yml`,内容如下(基于 Confluent 官方镜像): ```yaml version: '3' services: zookeeper: image: confluentinc/cp-zookeeper:7.3.1 # Zookeeper 镜像 container_name: zookeeper ports: - "2181:2181" # 映射 Zookeeper 客户端端口 environment: ZOOKEEPER_CLIENT_PORT: 2181 # Zookeeper 客户端端口 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka:7.3.1 # Kafka 镜像 container_name: kafka ports: - "9092:9092" # 映射 Kafka 客户端端口 depends_on: - zookeeper # 依赖 Zookeeper 先启动 environment: KAFKA_BROKER_ID: 1 # Broker 唯一 ID KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" # Zookeeper 连接地址(容器名:端口) KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://localhost:9092" # 对外暴露的监听地址(客户端连接用) KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # 偏移量主题的副本数(单节点设为1) ``` ### **步骤 3:启动 Kafka 集群** 在 `docker-compose.yml` 所在目录执行命令启动容器: ```bash docker-compose up -d # -d 表示后台运行 ``` ### **步骤 4:验证 Kafka 是否启动成功** 1. 检查容器状态: ```bash docker ps # 应看到 `zookeeper` 和 `kafka` 容器均为 `running` 状态 ``` 2. 进入 Kafka 容器,创建测试主题: ```bash docker exec -it kafka /bin/bash # 在容器内执行以下命令创建主题(主题名 `test-topic`,分区数1,副本数1) kafka-topics --create --topic test-topic --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092 ``` 若输出 `Created topic test-topic`,则表示 Kafka 启动成功。 ### **注意事项** - **网络配置**:`KAFKA_ADVERTISED_LISTENERS` 需根据实际环境调整(如远程服务器需改为公网 IP:9092),否则客户端可能无法连接。 - **多节点集群**:若需部署多 Broker 集群,可复制 `kafka` 服务配置并修改 `KAFKA_BROKER_ID`(如 1、2、3),同时调整 `KAFKA_ADVERTISED_LISTENERS` 为不同端口。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值