【问题标题】:Access kafka docker from outside从外部访问 kafka docker
【发布时间】:2021-05-30 21:52:14
【问题描述】:

我已经设置了一个 docker-compose.yaml

version: '3'

services:
  zookeeper:
    image: zookeeper:latest
    restart: unless-stopped
    ports:
        - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: ligato/kafka-arm64
    ports:
      - "9093:9093"
    expose:
      - "9093"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9093
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_BROKER_ID: 1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper

由于我部署在JETSON NX上,所以选择镜像“ligato/kafka-arm64”,容器信息为

CONTAINER ID   IMAGE                COMMAND                  CREATED             STATUS         PORTS                                                  NAMES
c8d890135148   ligato/kafka-arm64   "supervisord -n"         5 seconds ago       Up 2 seconds   2181/tcp, 9092/tcp, 0.0.0.0:9093->9093/tcp             kafka_docker_kafka_1
edba89568398   zookeeper:latest     "/docker-entrypoint.…"   About an hour ago   Up 5 seconds   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   kafka_docker_zookeeper_1

然后在容器内成功创建主题,并运行生产者

docker exec -it c8d890135148 /bin/bash

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topic01

./bin/kafka-console-producer.sh --broker-list kafka:9092 --topic topic01

并尝试输入一些字母,但在容器外什么都没有……只是卡住了任何东西。

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic topic01 --from-beginning

有人在这个问题上有经验吗?请与我分享一些cmets!

在上面之后,我尝试在容器外使用最新的kafka版本,kafka_2.13,2.8,0,并使用相同的命令,但得到

[2021-05-30 03:52:48,240] WARN [Consumer clientId=consumer-console-consumer-6086-1, groupId=console-consumer-6086] Bootstrap broker 127.0.0.1:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2021-05-30 03:52:48,347] WARN [Consumer clientId=consumer-console-consumer-6086-1, groupId=console-consumer-6086] Bootstrap broker 127.0.0.1:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2021-05-30 03:52:48,453] WARN [Consumer clientId=consumer-console-consumer-6086-1, groupId=console-consumer-6086] Bootstrap broker 127.0.0.1:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2021-05-30 03:52:48,558] WARN [Consumer clientId=consumer-console-consumer-6086-1, groupId=console-consumer-6086] Bootstrap broker 127.0.0.1:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

消息不断重复。

对于这两个问题有任何 cmet 吗?提前感谢!

【问题讨论】:

  • 第二个问题 - 默认情况下 Kafka 不在端口 9093 上运行
  • @OneCricketeer 感谢您的回复。我想知道如何正确设置容器内端口和容器外端口。我认为kafka的默认端口是9092,对吧?所以我将内部端口设置为 9092,将外部端口设置为 9093,所以我让外部 kafka 尝试连接到端口 9093,这是容器的外部端口,这有什么问题吗?我应该将外部端口更改为 9092 吗?
  • 我只是指您的评论 - “我尝试在容器外使用最新的 kafka 版本,kafka_2.13,2.8,0,并使用相同的命令”

标签: docker apache-kafka


【解决方案1】:

我不确定容器是否支持这些属性...而且它自 2019 年初以来一直没有更新,因此如果您想要最新的 Kafka 版本,请查看 Confluent 或 Bitnami Kafka 图像。

在任何情况下,侦听器都应该在外部绑定以允许外部流量

KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093

另外:它本身也包含 Zookeeper,所以你不应该有一个单独的 Zookeeper 容器,你应该避免挂载 Docker 套接字

【讨论】:

  • 按照你说的设置后,还是一样的消息
  • 就像我说的,我不认为特定的ligato/kafka-arm64 图像可以满足您的要求;具体来说,它似乎是 Spotify Kafka 图像的一个分支,它只使用广告主机名 + 端口,根本没有侦听器配置环境变量
猜你喜欢
  • 1970-01-01
  • 2022-09-24
  • 2019-04-14
  • 2021-01-12
  • 2021-09-19
  • 1970-01-01
  • 2019-10-01
  • 2016-04-19
  • 1970-01-01
相关资源
最近更新 更多