0. 카프카와 주키퍼의 관계
주키퍼 서버를 두고 하위에 명령을 받는 카프카 노드를 여러개 받는 형식입니다.
->주키퍼는 하둡에서 나온 용어입니다.
하나의 컨테이너 내부에서 주키퍼, 카프카 최소 2개 이상의 컨테이너를 실행하기 위해 도커 컴포즈로 여러개의 컨테이너를 하나의 서비스로 정의하여 처리할 필요가 있습니다.
1. 도커 컴포즈(docker-compose.yml) 생성
version: '3' # docker-compose 버전 지정
services: # docker-compose의 경우 docker 컨테이너로 수행될 서비스들은 services 하위에 기술
zookeeper: # 서비스 이름. service 하위에 작성하면 해당 이름으로 동작
image: wurstmeister/zookeeper # 도커 이미지
container_name: zookeeper
ports: # 외부포트:컨테이너내부포트
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
ports: # 외부포트:컨테이너내부포트
- "9092:9092"
environment: # kafka 브로터를 위한 환경 변수 지정
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # kafka가 zookeeper에 커넥션하기 위한 대상을 지정
volumes:
- /var/run/docker.sock:/var/run/docker.sock
주키퍼와 카프카를 따로 만든 후 연동하는 작업 없이 생성할 수 있어 도커 컴포즈를 사용합니다.
docker-compose 실행은 위에 생성한 docker-compose.yml 파일 위치로 이동 후, 도커 컴포즈는 업,다운으로 실행합니다.
docker-compose up -d
도커 컴포즈가 docker run 명령어를 대체했기에 이미지 2개와 실행중인 컨테이너를 확인할 수 있습니다.
docker-compose 실행이 안될 경우에는 아래를 참고하세요
윈도우는 WSL을 통해 우분투를 열고 명령어를 입력합니다.
$ sudo apt-get update
$ sudo apt-get install docker-compose-plugin
2. 카프카
프로듀서는 토픽이라는 곳에 발송하고, 카프카 클러스터 내부에서 토픽을 지정하여 컨슈머는 구독 중인 토픽이 갱신되는지 기다렸다가 갱신되면 등록된 메시지를 가져옵니다. 사진처럼 여러개 컨슈머가 토픽을 구독할 수 있습니다.
2.1 터미널로 카프카 토피그 퍼블리셔, 컨슈머 확인
*# kafka 접속*
docker exec -it kafka bash
*# kafka 버전확인*
// 스프링부트와 연결 시 버전 정보가 매우 중요합니다
kafka-topics.sh --version
*# 토픽 생성*
//sample_topic_1은 토픽 이름, 서버 주소는 카프카 9092, replication-factor는 1개의 아파치 카프카 클러스터
kafka-topics.sh --create --topic sample_topic_1 --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
*# 토픽 목록 조회*
kafka-topics.sh --list --bootstrap-server localhost:9092
# 프로듀스 실행(토픽명: test_topic)
kafka-console-producer.sh --broker-list localhost:9092 --topic sample_topic_1
> 토픽 메세제 발행
>
# 컨슈머 실행
# --from-beginning 옵션은 해당 토픽의 맨 처음 메시지부터 확인 가능
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sample_topic_1
아래 퍼블리셔에서 메세지를 보내면 위 컨슈머에서 해당 메세지가 들어오는것을 확인할 수 있습니다.
3. 스프링부트 연동
gradle에서 kafka 의존성 설정을 진행한다. kafka 버전은 도커컴포즈로 생성한 버전과 맞춰야합니다.
![](https://blog.kakaocdn.net/dn/blkwH4/btsFYsVGWKo/LDhRJSEoDSkLORPUSHK0dk/img.png)
# kafka 버전 맞춰서 의존성 설정
implementation ('org.springframework.kafka:spring-kafka:2.8.1')
'SpringBoot' 카테고리의 다른 글
artillery 스트레스 테스트 (0) | 2024.02.29 |
---|---|
스프링 시큐리티 5.X에서 6버전으로 변경 (0) | 2023.12.31 |
스프링부트에서 RabbitMQ 메세지 큐로 사용 (1) | 2023.12.17 |
메세지큐 톺아보기 (2) | 2023.12.07 |
프로젝트 설정 : DB 연동 및 민감한 정보 마스킹 (0) | 2023.10.25 |