ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SpringBoot와 Docker compose로 pull 받은 Kafka 연동 시 발생한 오류
    Apache Kafka/오류 해결 2024. 1. 14. 23:23

    문제 1

    현재 카프카의 경우, AWS LightSail 서버에 Docker로 올려둔 상황이며,

    로컬 환경에서의 스프링부트와 연동하고자 하는데 아래와 같은 문제가 발생했다.

    INFO 33496 --- [ntainer#0-0-C-1] org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-chatting-1, groupId=chatting] Node 1001 disconnected.
    WARN 33496 --- [ntainer#0-0-C-1] org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-chatting-1, groupId=chatting] Connection to node 1001 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

     

     

    해결 1

    해당 문제를 해결하기 위해서 docker-compose.yml의 kafka container 환경 변수에 아래와 같이 추가해 주었다.

        KAFKA_ADVERTISED_HOST_NAME: <LIGHTSAIL_PUBLIC_IP>

     

    기존 KafkaProducerConfig와 KafkaConsumerConfig 부분에는 Public IP로 적용이 되어있었기 때문에,

    .yml 파일 부분만 수정해 주었다.

    advertised.host.name은 프로듀서, 컨슈머, 다른 브로커들에 주어지는 호스트 이름으로,

    지정하지 않으면 host.name이 사용된다고 한다.

    host.name의 기본값은 null 이므로, 값을 넣지 않으면 시스템에 있는 모든 인터페이스에 바인딩하고, 지정하면 특정 IP에 바인딩을 수행한다. (참고로 advertised.port도 마찬가지)

     

     


     

    문제 2

    위 문제를 해결하고 나서 추가적으로 또 다른 문제를 만나버렸다..

    아래와 같은 오류가 발생하며 프로듀서와 컨슈머 간의 통신이 안되는 현상이 계속 발생했다.

    ERROR Error when sending message to topic chatting with key: null, value: 1 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
    org.apache.kafka.common.errors.TimeoutException: Expiring 4 record(s) for chatting-0:120000 ms has passed since batch creation

     

     

    해결 2

    역시나 통신과 관련된 환경변수를 빼먹은 이유였다

    kafka를 docker-compose를 통해 사용했기 때문에 아래와 같은 절차를 통해 해결하였다.

     

    1. Docker 컨테이너 내부의 터미널 세션에 접근

    $ docker exec -it kafka /bin/bash

     

    (docker container에 접근해서 파일 수정하는게 처음이라면, 파일 수정을 위해 Vim 설치)

    $ apt-get update
    $ apt-get install vim

     

    2. 카프카 server.properties 열기

    $ bash# cd /opt/kafka/config
    $ bash# vi server.properties

     

    3. advertised.listeners=PLAINTEXT://{public IP}:9092 로 변경하고 저장

     

     

     

    4. 카프카 서버 구동

    kafka-server-start.sh -daemon

     

     

    프로듀서와 컨슈머 연결 성공 화면

     

     

     

     

     

Designed by Tistory.