컨슈머, 메세지큐, 토픽 등 컨셉을 이해하자.
HTTP vs. Kafka
HTTP
- 통신 주체가 2개이다(서버 대 서버 혹은 클라이언트 대 서버)
- 요청을 주고 응답을 받는다.
- 서버가 여러 대라고 할지라도, 한 번에 하나의 서버에만 요청 가능
- 요청을 보냈을 때 서버에 문제가 있어서 응답을 못한다면 요청이 유실될 수 있음
ex) 전화. 전화를 걸었을 때 상대가 요청을 받지 않으면 응답을 받지 못함
Kafka
- 요청만 가능하다
- 한 번 요청하면 해당 요청에 관련된 모든 서버(=컨슈머)에게 요청이 전달됨
- 컨슈머에게 요청을 보내면 알아서 다른 서버들에게 요청을 보냄
- 요청 유실의 걱정이 덜함
ex) 카톡. 요청을 보낼 시 상대가 요청을 받지 않아도 나중에 응답 가능
카프카는 MSA를 위한 것
http처럼 하나의 프로토콜이다.
HTTP(REST) - 전화
- 요청을 하면 응답이 온다(양방향 통신)
- 한번에 하나의 서버에만 요청 가능
카프카는 단방향 통신이므로 응답은 받을 수 없다.
-
HTTP
요청자 : 브라우저, 서버
응답유무 : 있음
요청의 수신자 수 : 1명
-
카프카
요청자 : 서버
응답유무 : 없음
요청의 수신자 수 : 현재 메세지가 쓰여지는 카톡방에 참여중인 모든 사람
카프카 - 카톡
요청만 할 수 있다.
한번 요청을 하면 해당 요청에 관련된 모든 서버(컨슈머)에게 요청이 전달 된다.
카프카가 나오기 이전, 원조는 RabbitMQ이다.
- RedPanda
카프카의 구현체
기본적으로 kafka api와 호환 가능
주키퍼/JVM 없음
카프카보다 10배 빠름
파티션 limit이 2백만개(무료)
RedPanda 실습
트리플 브로커가 안정적 이지만 원활한 실습을 위해 싱글 브로커로 설치, 8070으로 콘솔에 접속
- 폴더를 하나 만들고 git bash를 연다.
- vi docker-compose.yml // vi 편집기에서 docker-compose.yml 파일 열기
💡vi 사용법
- vi에서 편집 모드로 전환하기
vi는 기본적으로 명령 모드에서 열리기 때문에 파일을 수정하려면 편집 모드로 전환해야야 함 → i 또는 a 입력
- 편집 후 저장 및 종료
편집이 끝난 후 저장하고 나가려면 명령 모드로 돌아가야 함
Esc 명령 모드로 돌아가기
:wq 저장 후 종료
:q! 저장 없이 종료
:w 저장만 하고 계속 작업
- docker-compose up -d // docker-compose.yml 파일 작성 후 docker compose 실행


- 도커 실행 확인


콘솔에서 토픽(단톡방) 파서 메세지 작성(프로듀스)했을 때 관련자(컨슈머)들이 즉시 수신하는 것을 명령으로 실습하기
winpty docker exec -it redpanda-0 bash
터미널 1 : 토픽 chat-room-1 생성
rpk topic create chat-room-1
rpk topic produce chat-room-1
메세지 1
메세지 2
...
# 종료는 Ctrl + C
터미널 2 : 토픽 chat-room-1 에 메세지 수신
rpk topic consume chat-room-1
...
# 종료는 Ctrl + C

- 실행 결과 확인
localhost:8070으로 접속하여 메세지 확인 가능
