我是容器化新手。我正在尝试设置我的本地环境,我的 java 应用程序想要连接到 Kafka。无法使用 Docker,所以决定使用 Podman。我有三个容器在同一网络上运行,每个容器用于 Kafka、Zookeeper 和 kafka UI。我用的是macOS。
这是我正在使用的 Podman 命令:-
创建网络:
podman network create kafka-network --driver bridge
启动 Zookeper:
podman run --name zookeeper-server -p 2181:2181 --network kafka-network -e ALLOW_ANONYMOUS_LOGIN=yes docker.io/bitnami/zookeeper:3.8
启动 Kafka:
podman run --name kafka-server --network kafka-network -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:1 -p 9092:9092 docker.io/bitnami/kafka:3.4
启动 Kafka-ui:
podman run -it --name kafka-ui -p 9090:8080 --network kafka-network -e KAFKA_CLUSTERS_0_NAME=local -e KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper-server:2181 -e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-server:9092 -e DYNAMIC_CONFIG_ENABLED=true docker.io/provectuslabs/kafka-ui:latest
java应用程序使用的Url:PLAINTEXT://localhost:9092
Java 应用程序能够在分配分区时进行连接,但 kafka ui 日志显示“无法建立与节点 1 (localhost/127.0.0.1:9092) 的连接。代理可能不可用。”
如果我在 podman 命令中将 localhost 更改为 kafka-server,在该命令中我正在启动 kafka,那么 Kafka UI 可以正常工作,但消费者不会订阅 java 应用程序中的分区。
不知道为什么我会看到这种奇怪的行为。欢迎额外的解释,因为我试图理解这里环境变量的目的。谢谢
虽然是Docker,但我在想尝试的时候也有同样的经历
kafka-ui
,直到今天早上才开始工作。由于尝试了不同的 UI,那里的一些配置暗示 broker:9092
也应该作为引导服务器提供。
为了澄清,我使用 Docker Compose 与 3 个服务,
zookeeper
、broker
和 kafka-ui
,如下所示:
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.3.0
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-kafka:7.3.0
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TOOLS_LOG4J_LOGLEVEL: ERROR
kafka-ui:
image: provectuslabs/kafka-ui
hostname: kafka-ui
container_name: kafka_ui
depends_on:
- broker
ports:
- "8080:8080"
environment:
DYNAMIC_CONFIG_ENABLED: 'true'
KAFKA_CLUSTERS_0_NAME: kafkacluster
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: 'broker:29092,localhost:29092,localhost:9092,broker:9092'
在上面的配置中,我之前有
broker:29092
但没有 broker:9092
。添加broker:9092
后,它就活了! (^^,)
为了验证这确实是解决方案,我恢复到没有
broker:9092
的配置,并且再次遇到了与以前相同的问题。
我希望这有帮助!