首页 > 解决方案 > 在 Docker 容器中访问 Kafka 代理

问题描述

我一辈子都找不到这方面的信息,所以如果这很明显,请原谅我。

我正在将 Kafka 代理的端口发布到我的主机 (MacOS),但无法从主机连接。然后,即使我exec进入容器我也不能ping localhost:9092curl它。

我也尝试过达到的KAFKA_ADVERTISED_LISTENERS价值,PLAINTEXT://kafka1:9092这给了我一个ping: cannot resolve PLAINTEXT://kafka1:9092

这是我的 docker-compose 文件的相关位:

version: '3'
services:
  zookeeper:
    container_name: zookeeper
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      KAFKA_OPTS: "-Dzookeeper.4lw.commands.whitelist=*"
    ports:
      - "2181:2181"

  kafka1:
    build: .
    container_name: "kafka1"
    depends_on:
      - zookeeper
    ports:
      - "8778"
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OPTS: '-javaagent:/usr/jolokia/agents/jolokia-jvm.jar=host=0.0.0.0'

Dockerfile如下:

FROM confluentinc/cp-kafka:latest

ENV JOLOKIA_VERSION 1.3.5
ENV JOLOKIA_HOME /usr/jolokia-${JOLOKIA_VERSION}
RUN curl -sL --retry 3 \
  "https://github.com/rhuss/jolokia/releases/download/v${JOLOKIA_VERSION}/jolokia-${JOLOKIA_VERSION}-bin.tar.gz" \
  | gunzip \
  | tar -x -C /usr/ \
 && ln -s $JOLOKIA_HOME /usr/jolokia \
 && rm -rf $JOLOKIA_HOME/client \
 && rm -rf $JOLOKIA_HOME/reference

有任何想法吗?

标签: dockerapache-kafkadocker-compose

解决方案


如果您尝试从容器内订阅主题,则应将引导服务器指定为kafka1:9092. 这个设置对我来说很好,我可以通过本地机器卷曲它

curl localhost:9092
curl: (52) Empty reply from server

此外,您可以尝试添加更多环境变量

kafka1:
    environment:
    - BOOTSTRAP_SERVERS=kafka2:9092
    - ZOOKEEPER=zookeeper:2181

推荐阅读