好久没用参与大数据之类的开发了,近日接触到一个项目中使用到kafka,因此要在本地搭建一个简易的kafka服务。时间比较紧急,之前有使用docker的经验,因此本次就使用docker来完成搭建。在搭建过程中出现的一些问题,及时记录,以便后期再遇见。
环境
-
计算机环境:win10 22H2
-
docker Version:4.13.1 (90346)
zookeeper和kafka搭建
由于zookeeper与kafka是集群性质的,本次使用的目的简单就是开发一个Topic 生产者,然后通过消费者进行验证
zookeeper与kafka(理论知识后期补充吧)
zookeeper镜像下载
docker pull wurstmeister/zookeeper
kafka镜像的下载
docker pull wurstmeister/kafka
搭建网桥
docker network create kafka-network
启动zookeeper
docker run -d --name zookeeper --network kafka-network -p 2181:2181 wurstmeister/zookeeper
启动kafka
docker run -d --name kafka --network kafka-network -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_LISTENERS=PLAINTEXT://kafka:9092 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 wurstmeister/kafka
查看IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' kafka
由于使用的是网桥,可以通过服务的名称来描述ip。
kafka 日志中报错
WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 警告可能是由于 Kafka 代理(broker)未正确配置或者未正确运行导致的 或者 WARN [Controller id=1001, targetBrokerId=1001] Connection to node 1001 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 警告 Kafka 控制器(Controller)无法与本地主机的 Kafka 代理建立连接
解决办法
上述警告,Kafka 消费者无法连接到本地主机的 Kafka 代理(broker),经过检查,发现当时PLAINTEXT://kafka:9092 配置错误,引用的是PLAINTEXT://localhost:9092。 修改PLAINTEXT://localhost:9092 ----> PLAINTEXT://kafka:9092 最终完美解决
在本地操作kafka报错
%3|1711527992.579|FAIL|rdkafka#producer-1| [thrd:kafka:9092/1002]: kafka:9092/1002: Failed to resolve 'kafka:9092': 不知道这样的主机。 (after 2269ms in state CONNECT) %3|1711527992.579|ERROR|rdkafka#producer-1| [thrd:app]: rdkafka#producer-1: kafka:9092/1002: Failed to resolve 'kafka:9092': 不知道这样的主机。 (after 2269ms in state CONNECT) %3|1711527993.640|FAIL|rdkafka#producer-1| [thrd:kafka:9092/1002]: kafka:9092/1002: Failed to resolve 'kafka:9092': 不知道这样的主机。 (after 48ms in state CONNECT, 1 identical error(s) suppressed) %3|1711527993.640|ERROR|rdkafka#producer-1| [thrd:app]: rdkafka#producer-1: kafka:9092/1002: Failed to resolve 'kafka:9092': 不知道这样的主机。 (after 48ms in state CONNECT, 1 identical error(s) suppressed)
解决办法
这个错误是由于程序无法解析主机名 "kafka:9092" 导致的。所以我想到改网络,通过ip与域名的配置。由于是win10系统所有需要修改:C:\Windows\System32\drivers\etc\hosts 文件末尾加上
127.0.0.1 zookeeper 127.0.0.1 kafka