我是卡夫卡新手,我正在尝试做一些简单的事情。
我用 docker 运行 kafka。 这是我的 docker-compose:
version: "3.2"
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181"
kafka:
image: wurstmeister/kafka
depends_on:
- zookeeper
ports:
- "9092-9094:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafkaui:
image: provectuslabs/kafka-ui
depends_on:
- kafka
- zookeeper
ports:
- "8080:8080"
environment:
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:9092"
如您所见,我将 KAFKA_ADVERTISED_HOST_NAMEE
的我的 IP 设置为 127.0.0.1然后我这样做:
docker-compose up -d
我检查 with docker ps -a
我看到了这个屏幕截图
在此输入图片描述
然后我增加经纪人的数量:
docker-compose up --scale kafka=3 -d
我用 docker ps -a
检查,看到了这个屏幕截图:
在此输入图片描述
在我的浏览器上,我转到:http://127.0.0.1:8080 我发现我有 1 个集群处于离线状态,请参见屏幕截图: 在此输入图片描述
为什么??? 我有一台旧电脑: Linux Mint 21、4 Gb RAM、英特尔酷睿 i3
我需要更多内存吗?
内存不是问题
由于无法连接而处于离线状态。
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
+ ports: 9092:9092
表示它只接受来自 external 主机的连接,而不接受其他容器的连接。您将无法使用该变量集来扩展容器,因为它需要是 kafka
,但当您扩展到超过一个代理时,它也不能硬编码为 kafka
(换句话说,每个容器都需要一个唯一的主机名) )。 此页面涵盖更多详细信息。但是,一种解决方案是使用 KAFKA_LISTENERS: PLAINTEXT://:9092
,并从 Compose 中删除 ports
,除非您确实需要 Docker 外部的连接。
无论如何,在同一主机上运行多个代理并没有真正的好处。
您需要在 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS 属性中强制设置 ip,或者在 ui 中进行设置,通过添加新集群,当您在那里时,其余的很简单