簡體   English   中英

使用 docker compose 運行 kafka 並公開不同的端口而不是默認端口

[英]Run kafka using docker compose and expose a different port instead of default one

我正在嘗試使用 docker compose 啟動一個 kafka 集群,我正在使用以下配置:

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    command: [start-kafka.sh]
    ports:
      - "15092:9092"
    hostname: kafka
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:15092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://:15092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - "zookeeper"

這兩個服務都已啟動並正在運行,但是當我嘗試使用代理external-ip:15092從外部源生成消息時,我收到以下錯誤:

dial tcp: lookup kafka: no such host

你能幫我弄清楚缺少什么配置嗎?

謝謝

你得到“沒有這樣的主機”,這發生在端口甚至被使用之前。 您需要在同一個 Docker 網絡中的另一個容器中運行代碼才能解析服務名稱

無論如何,Kafka 不會那樣工作(一個簡單的端口轉發)

兩個聽眾仍然設置為 9092

您需要添加/更改包含externalIP:15092的廣告偵聽externalIP:15092才能使其工作,並且您可以找到記錄偵聽器差異的多個位置(包括該容器的 wiki 頁面)


所以, KAFKA_LISTENERS: INSIDE://:9092就是你所需要的(或者更恰當地說,把INSIDE://0.0.0.0:9092

但你需要編輯

KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://<your_external_IP>:15092

這是一個暴露不同端口的配置:

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "49815:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: wurstmeister/kafka
    container_name: broker
    ports:
      - "49816:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://broker:9092,INTERNAL://broker:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:49816,INTERNAL://broker:29092
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL

關鍵點:

  • 您的外部源需要連接到 Docker 公開的地址 ( localhost:49816 ) 並使用端口9092綁定到代理。 因此,您需要使用該值為外部連接設置KAFKA_ADVERTISED_LISTENERS
  • 代理應該偵聽9092以通過 Docker 端口綁定獲取來自外部的連接。 因此,您需要在KAFKA_LISTENERS PLAINTEXT://broker:9092為外部偵聽KAFKA_LISTENERS
  • 您仍然需要偵聽 Brokers 和 Zookeeper 的容器間連接才能運行,因此您需要使用從 Docker 內部可見的內部端點INTERNAL://broker:29092設置KAFKA_LISTENERSKAFKA_ADVERTISED_LISTENERS

這是完整的配置鏈接: https ://docs.confluent.io/platform/current/installation/configuration/broker-configs.html#brokerconfigs_listeners(它用於 Confluence 圖像,但它與 wurstmeister 的工作方式相同)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM