簡體   English   中英

docker內部和外部的Kafka訪問

[英]Kafka access inside and outside docker

我正在嘗試使用 docker-compose 啟動 kafka 服務,它應該可以在 docker 內部和外部訪問。 因此,應該在內部和外部設置合適的廣告商:

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9094:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE

問題是當我嘗試從集群外部連接時,我沒有得到 127.0.0.1 作為節點的名稱,而是內部主機名:

$ kafkacat -L -b 127.0.0.1:9094
Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap):
 1 brokers:
  broker 1001 at 91588ea968d4:9092
 28 topics:
 ...

KAFKA_ADVERTISED_LISTENERS 和 KAFKA_LISTENERS 的目的不是處理這種情況嗎? 我嘗試設置 KAFKA_ADVERTISED_HOST_NAME 但它被忽略了(一份文檔說它已棄用,另一份說它仍然處於活動狀態),但這似乎不是答案,因為我想要兩個不同的廣告主機名用於兩個不同的網絡。

我想老問題仍然存在:如何使 kafka 在 docker-compose 內外工作?

我需要做的是將偵聽器聲明為都綁定到 docker 主機,然后以不同的方式宣傳它們 - 一個到 docker 網絡,一個到主機:

services:
  zookeeper:
    image: confluentinc/cp-zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_SYNC_LIMIT: 2
  kafka:
    image: confluentinc/cp-kafka
    ports:
      - 9094:9094
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://kafka:9094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL

您的偵聽器配置看起來正確,問題在於您的 Docker Compose:

ports:
  - "9094:9092"

您將9094 (“外部”)映射回9092 (“內部”),因此當您連接時,您正在連接到“內部”偵聽器。 如果您刪除這行配置,那么您的偵聽器設置應該按預期工作。

有關更多信息,請參閱http://rmoff.net/2018/08/02/kafka-listeners-explained/

同意@Robin Moffatt 的回答,即外部端口9094映射到容器的9092

除了從 docker-compose.yml 中刪除該配置外,外部端口9094還應映射到容器的9094

ports:
  - "9094:9094"

PS:我無法將此添加為對先前答案的評論,因此將其添加為新答案。

暫無
暫無

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

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