Как подключиться spring микросервису из docker контейнера к kafka в контейнере?

Создаю контейнеры через docker-compose up

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - 22181:2181

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - 29092:29092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  mctwo:
    build: /
    ports:
      - 9090:9090
networks:
  default:
    external:
      name: mcone_default

Объединяю в одну сеть. Теперь по идее до контейнера с кафкой можно достучаться по адресу kafka:29092? или kafka_1:29092? В application.yml перепробовал разные адреса, но итог один

spring:
  kafka:
    bootstrap-servers: kafka_1:29092

Но подключиться не может.

mctwo_1      | 2021-12-28 16:06:46.838  WARN 1 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient   : [AdminClient clientId=adminclient-1] Connection to node -1 (
kafka/172.21.0.5:29092) could not be established. Broker may not be available.
mctwo_1      | 2021-12-28 16:07:03.565  WARN 1 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient   : [AdminClient clientId=adminclient-1] Connection to node 1 (l
ocalhost/127.0.0.1:29092) could not be established. Broker may not be available.

Где посмотреть нужный адрес?


Ответы (2 шт):

Автор решения: Aleksey Vaganov

Командой docker container inspect mctwo_1 проверьте в какой сети находится ваш контейнер mctwo_1 из которого вы пытаетесь соединится с kafka.

Далее командой docker container inspect kafka_1 проверьте находится ли ваш контейнер kafka_1 в той же сети.

Если они оба в одной сети, то в качестве имени хоста для соединения можно использовать имя сервиса kafka или имя контейнера kafka_1.

Если при этом остается ошибка, то смотрите в сторону настроек сервиса kafka.

→ Ссылка
Автор решения: Alexander Pavlov
  1. У тебя Кафка внутри сети стартует на 9092, при этом прокидываешь с хоста 29092 на 29092, так что снаружи к Кафке точно не подключиться (порт прокинут в никуда). Стоит поменять на 29092:9092, чтобы можно было подключаться извне Докера (но mctwo не работает не из-за этого).

  2. mctwo сервис в той же сети, поэтому он должен смочь подключиться к kafka:9092, но ты ему говоришь идти на 29092. Тебе надо сделать spring.kafka.bootstrap-servers: kafka:9092

→ Ссылка