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일 정도 쓴 거 같은데... 역시 구글링하면 답이 나오기는 한다....해결해서 다행이다 ㅠㅠ
'토이 프로젝트' 카테고리의 다른 글
AbstractGatewayFilterFactory 테스트하기 (1) | 2024.12.08 |
---|---|
Junit에서 Redis mock 에러 (0) | 2024.12.07 |
Reactive Kafka를 사용해 Email notification 서버에서 메일 보내기 (0) | 2024.11.28 |
WebFlux에서 RedissonReactive를 사용한 동시성 이슈 해결 (0) | 2024.11.17 |
Redis Sentinel 설정 (0) | 2024.11.09 |