반응형

Kafka를 사용해서 event를 주고 받는 코드를 작성하다, publish는 되지만 consume이 되지 않는 문제가 발생했다.

 

메시지가 자세하게 나오지 않아

logging:
  level:
    org.springframework.kafka: DEBUG
    org.apache.kafka: DEBUG

 

이렇게 kafka 관련해서 더 자세한 로그를 출력하도록 하고, 로그를 확인하고 있으니

 

org.apache.kafka.common.errors.CoordinatorNotAvailableException: The coordinator is not available.

 

이런 에러가 발생하고 있었다.

 

이 전에도 kafka를 계속 테스트 해보았는데, kafka의 docker-compose 문제라고 생각했고 이 에러메시지를 구글에 검색해보았다.

 

https://stackoverflow.com/questions/40316862/the-group-coordinator-is-not-available-kafka

 

The group coordinator is not available-Kafka

When I am write a topic to kafka,there is an error:Offset commit failed: 2016-10-29 14:52:56.387 INFO [nioEventLoopGroup-3-1][org.apache.kafka.common.utils.AppInfoParser$AppInfo:82] - Kafka versio...

stackoverflow.com

 

그러니 이런 자료를 찾을 수 있었는데, 나와 같은 문제인 것 같았다.

 

답글에 있는대로 하나의 kafka만 사용하면 이런 에러가 발생 할 수 있다고 했다.

현재 

services:
  zookeeper:
    container_name: zookeeper
    image: confluentinc/cp-zookeeper:7.2.6
    ports:
      - '32181:32181'
    environment:
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
    networks:
      - vp

  kafka:
    container_name: kafka
    image: confluentinc/cp-kafka:7.2.6
    ports:
      - '9092:9092'
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092
    networks:
      - vp

  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - "9000:8080"
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:29092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:22181

    networks:
      - vp

networks:
  vp:
    driver: bridge
    name: vp
    external: true

 

이렇게 하나의 kafka만 사용하고 있었고, 답글대로

KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

 

이런 옵션을 추가해주었고

 

docker container를 다시 실행주었다.

 

그러고 이벤트를 발생시키니

@Component
class ImageEventListener(
    private val imageService: ImageService
) {

    @KafkaListener(topics = ["IMAGE_DELETE_IMAGE_TOPIC"], groupId = "seungkyu")
    fun deleteImageListener(fileName: String){
        println("Deleting image $fileName")
        imageService.deleteImage(fileName)
    }
}

 

이렇게 작성한 이벤트가 실행되는 것을 볼 수 있었다.

 

kafka 연결 문제에만 3일 정도 쓴 거 같은데... 역시 구글링하면 답이 나오기는 한다....해결해서 다행이다 ㅠㅠ

+ Recent posts