카프카란?
실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼이다.
즉, API로 데이터를 바로 요청을 하는 것이 아닌 미들웨어인 카프카를 둬서 프로듀서가 메시지를 생산해서 토픽으로 메시지를 보내고, 컨슈머는 토픽의 메시지를 가져와 사용하는 애플리케이션 부분이다.
따라서 연결되어 있는 토픽에 메시지(큐)가 들어오면 컨슈머는 그 메시지를 받을 수 있는 것이다.
장점)
1. 대량의 데이터를 처리 가능하고, 시스템 부하에 따라 확장이 가능하다.
2. 카프카는 실시간 데이터 처리를 위해 설계되었다. 데이터가 전송되는 즉시 프로듀서와 컨슈머가 데이터를 처리할 수 있고, 데이터의 지연 시간이 최소화되기 때문에 실시간 데이터 스트리밍이 가능하다.
3. 카프카는 메시지를 영속적으로 저장하기 때문에 나중에 다시 데이터를 재처리할 수 있다.
Docker
나는 윈도우 환경을 쓰고 있어서 그냥 실행했을 때 오류점들이 발생하였다. 따라서 도커를 사용한다.
먼저 도커에 올리기 위해 컴포즈 파일을 생성할 것이다.
kafka-compose.yml
version: '3.8'
services:
zookeeper:
image: wurstmeister/zookeeper:latest
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:latest
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
그 후 PowerShell에서 yml이 있는 디렉터리에 가서 아래의 명령어를 실행한다.
docker-compose -f kafka-compose.yml up
그러면 다음과 같이 도커에서 컨테이너가 실행 중인 것을 볼 수 있다.
이제 아래의 명령어로 카프카 컨테이너를 접속할 것이다.
docker exec -it kafka /bin/bash
그러면 이제 접속한 카프카에서 토픽을 생성할 것이고, 컨슈머랑 프로듀서로 확인해 볼 것이다.
토픽 생성
kafka-topics.sh --create --topic topic1 --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3
(순서가 보장되어야 한다면 파티션을 1개를 쓰거나 키를 사용해야 된다.)
나는 topic1이라는 이름으로 토픽을 생성할 것이다. 위 명령어를 카프카에서 실행시켜 보면 다음과 같이 토픽이 생성된 것을 볼 수 있다.
토픽 리스트 확인: kafka-topics.sh --list --bootstrap-server localhost:9092
토픽 상세 조회: kafka-topics.sh --describe --topic topic1 --bootstrap-server kafka:9092
토픽 삭제: kafka-topics.sh --delete --bootstrap-server kafka:9092 --topic topic1
컨슈머 실행(관리자 권한 실행)
컨슈머를 실행시키기 위해선 새 PowerShell 창으로 kafka-console-consumer.sh를 실행시켜줘야 하는데 그러기 위해서는 도커에서 카프카 설치 경로로 가줘야 한다.
cd /opt/kafka_2.13-2.8.1/bin/
./kafka-console-consumer.sh --topic topic1 --bootstrap-server kafka:9092 (옵션적으로 --group 그룹명)
경로 이동해 주고 sh을 실행하는 명령어고 실행해 보면 아래와 같이 깜빡깜빡거리는데 메시지를 받고 있기 때문에 정상 작동된 거다.
프로듀서 실행
이제 메시지를 토픽에 저장하는 프로듀서를 실행할 것인데 새 PowerShell 창으로 도커 카프카에 접속해서 kafka-console-producer.sh을 실행하기 위해 다시 /opt/kafka_2.13-2.8.1/bin/으로 간 다음 아래 명령어를 실행해 보면
./kafka-console-producer.sh --topic topic1 --broker-list kafka:9092
입력 창이 >로 변하고 작성할 수 있는 창이 뜨게 되는데 여기서 메시지를 입력해 보면
왼쪽이 프로듀서, 오른쪽이 컨슈머로 프로듀서에서 메시지가 등록됨과 동시에 컨슈머에서 메시지가 도착한다.
'JAVA > kafka' 카테고리의 다른 글
[Redis/kafka] 데이터베이스 동시성 문제 해결 코드 (STEP 3. Redisson, kafka로 과부하 줄이기) (0) | 2023.07.06 |
---|---|
[Spring] 카프카 스프링에서 토픽 프로듀싱, 컨슈밍 해보자. (feat. nGrinder) (0) | 2023.07.03 |