인프런 커뮤니티 질문&답변

ygh님의 프로필 이미지
ygh

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Test

안녕하세요! 질문이 있습니다.

작성

·

3.7K

0

안녕하세요! 강의 들으면서 잘 안되는 부분이 있어서 질문드립니다.

해당영상의 주문 추가 api를 수행하는 과정에서 kafka로 메시지가 정상적으로 보내지지 않는 문제가 발생했습니다.

에러 메세지는 다음과 같았습니다.

Send failed; nested exception is org.apache.kafka.common.errors.TimeoutException: Topic example-catalog-topic not present in metadata after 60000 ms.

카프카에 example-catalog-topic이 존재하지 않아서 메세지를 전송하는 과정에서 timeout이 발생하는 것 같은데요.

혹시, 카프카에 컨테이너에 직접 접속해서 topic을 수동으로 만들어주는 과정이 필요한가 해서, 직접  docker exec ... 명령어로 카프카 컨테이너에 접속한 후 

다음과 같은 명령어를 수행 시켜도 토픽 리스트를 읽지 못하고 명령어가 정상적으로 수행되지 않는 것으로 보였습니다. (172.18.0.101이 아닌 127.0.0.1 도 똑같이 수행되지 않았습니다.)

혹시 강의내용 외에, 추가적인 설정이 더 필요한 것인지 궁금합니다.

참고로, order-service의 KafkaProducerConfig 클래스에서

properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "172.18.0.101:9092");

다음과 같이 말씀해주신대로 ip를 지정해 주었고,

docker-compose-single-broker.yml 파일은 다음과 같이 강의내용과 동일하게 작성했습니다.

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
    networks:
      my-network:
        ipv4_address: 172.18.0.100
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 172.18.0.101
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
    networks:
      my-network:
        ipv4_address: 172.18.0.101

networks:
  my-network:
    name: ecommerce-network  # 172.18.0.1 ~

답변 4

1

ygh님의 프로필 이미지
ygh
질문자

다시 시도해봐도

order-service와 catalog-service 모두 

WARN [order-service,,] 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/172.18.0.101:9092) could not be established. Broker may not be available.

와 같은 로그가 뜨면서 kafka topic과의 통신이 안되는 것을 확인했습니다.

혹시, 카프카 관련 별도의 설정이 필요한 걸까요...??

0

저도 동일한 오류가 발생하여 답글 남깁니다.

오류 로그를 살펴보니 order-service와 catalog-service가 kafka 호출 시, bootstrap server ip가 아닌 localhost로 호출하고 있었습니다. 그래서 order-service와 catalog-service 컨테이너를 올릴때 bootstrap server ip를 환경변수로 선언하고 동작시키니 테스트가 정상 동작하였습니다.

  • order-service 추가 환경변수 : -e "spring.kafka.bootstrapServers=172.18.0.101:9092"

  • catalog-service 추가 환경변수 : -e "spring.kafka.consumer.bootstrapServers=172.18.0.101:9092"

 

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다. 

보내주신 메일 내용과 함께 같이 확인해 보았는데, 우선 해당 코드에 문제는 없었습니다. 다만 말씀하신 것처럼 제가 테스트한 환경에 M1 칩이 아니라 이전 Intel 칩이 장착된 MacOS라 같은 환경은 아니었습니다. 개인적인 이야기이지만, 최근 여러 기사를 접하면서 M1 칩으로 업그레이드를 해야하는지 고민 중이기는 하지만, 아직까지 저희쪽 작업에 대한 큰 이점이 보이지 않고 있어서 망설이고 있습니다. 

말씀하신 내용으로 처리가 되셨다고 하셨으니, 저도 조만간에 M1 MacOS를 준비하여 재현해 보도록 하겠습니다. 정보 공유 감사드리며, 추가 질문사항 있으시면 글 남겨주시기 바랍니다. 

감사합니다. 

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

Kafka 서버가 정상적으로 작동중이지 않는것 같습니다. 강의에서 사용한 wurstmeister/kafka  이미지를 사용하는 docker-compose 예제를 다른 서비스와 상관없이 기본 상태로 실행해 보시기 바랍니다. 초기 상태의 docker-compose-single-broker.yml 파일로 기동해 보시고, 여기에서 Topic의 생성이나, 조회가 가능한지 살펴보시기 바랍니다. 그리고 문제가 없다면, order-service에서 토픽의 생성과 전송이 잘 되는지 확인해 보셔야 할 것 같습니다.

만약, 여기까지 실행해 보셨을 때, 별다른 문제 없이 잘 실행되셨다면, docker-compose에서 기동하시기 전에 Docker network가 정상적으로 생성되었고, 해당 Network에 zookeeper, kafka broker가 기동되었는지 확인해 보시기 바랍니다. 

작업하시면서 진행되지 않는 부분이 있으시면, 작업하신 Kafka 관련 코드를 공유해 주시면, 오류를 같이 찾아보도록 하겠습니다.

edowon0623@gmail.com

감사합니다. 

ygh님의 프로필 이미지
ygh
질문자

안녕하세요!

계속해서 시도를 해보았는데요. 결국 해결하였습니다.

제 개인 PC인 M1 Macbook의 apple silicon chip이 문제였던 것으로 보입니다.

wurstmeister/kafka-docker github 사이트에 올라온 issue들을 보면 저와 동일한 issue를 겪은 사람들이 있었습니다. (https://github.com/wurstmeister/kafka-docker/issues/647)

m1 macbook에서는

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
    networks:
      my-network:
        ipv4_address: 172.18.0.100
  kafka:
    build: .  # 이 부분 변경
    # image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 172.18.0.101
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
    networks:
      my-network:
        ipv4_address: 172.18.0.101

networks:
  my-network:
    name: ecommerce-network

이런식으로 docker-compose-single-broker.yml을 구성하시면 정상동작하는 것을 확인했습니다.

감사합니다!

ygh님의 프로필 이미지
ygh

작성한 질문수

질문하기