딸기말차
[MSA] 23. EC2 접속 편의성, Kafka 본문
엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)
백엔드 개발 부트캠프
백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.
playdata.io
1. WSL 에서 EC2 접속
# home 혹은 .ssh 디렉토리 내 key 파일 존재 여부 확인
이 때 key 파일이 없으면, cp 명령어를 통해 복사해 가져온다.
# 기존 접속 방법
ssh -i ~/.ssh/amigo.pem ec2-user@43.202.65.216
# kafka 키워드로 접속 가능하게 설정
Host kafka
HostName 43.202.65.216
User ec2-user
IdentityFile /home/lhs/.ssh/amigo.pem
# 기존에 일일이 ip를 작성해 접속하던 것을 Host 를 통해 접속
ssh kafka
2. VSCode를 통해 EC2 접속
1. 보안 주체 설정
# C -> Users -> [User이름] -> .ssh
C:\Users\Playdata\.ssh
1. 상속 제거를 통해 보안주체 초기화
2. 보안 주체 추가
2. config 파일 생성
# config
Host kafka
HostName 43.202.65.216
User ec2-user
IdentityFile C:\Users\Playdata\.ssh\amigo.pem
3. VS Code 내에서 >Remote-SSH:Connect to Host
# 설정 정보 연결
> Remote-SSH
4. Open Folder -> OK를 통해 EC2 내부와 일치하는지 확인
3. Kafka 용어
1. 구성요소
1. 주키퍼 (Zookeeper)
Kafka의 메타 데이터 관리 및 상태 점검
2. 카프카 클러스터 (Kafka Cluster)
여러대의 broker 를 구성한 cluster
3. 브로커 (Broker)
Kafka 어플리케이션이 설치 된 서버
4. 프로듀서 (Producer)
Kafka로 메세지를 보내는 역할을 하는 클라이언트
5. 컨슈머 (Consumer)
Kafka 에서 메세지를 꺼내서 사용하는 클라이언트
6. 토픽 (Topic)
메세지 피드를 토픽으로 구분, 각 토픽의 이름은 Kafka 내에서 고유 값이다.
7. 파티션 (Partition)
병렬 처리 및 고성능을 얻기 위해 하나의 토픽을 여러개로 나눈 것
8. 세그먼트 (Segment)
프로듀서가 전송한 실제 메세지가 브로커로 도착 후, 브로커의 로컬 디스크에 저장되는 파일
9. 메세지 (Message)
프로듀서가 브로커로 전송하거나 컨슈머가 읽어가는 데이터
2. 동작 방식
1) 리플리케이션 (replication)
메세지를 여러개로 복제, 카프카 클러스터 브로커에 분산 시키는 동작을 의미한다.
replication 을 사용하면 하나의 메세지를 여러 브로커에 저장하게 된다. 이렇게 함으로써 메세지 손실을 대비할 수 있고, 안정성이 올라간다.
이 때, replication-factor를 통해, 카프카 내에 복제 메세지를 몇개를 유지할 것인지 설정할 수 있다.
# 안정성 - 리소스 간 trade-off
안정성을 유지하기 위해서는 하나의 메세지를 여러개 복제해야하는데, 이러면 리소스가 낭비되게 된다.
때문에 각각의 장단점이 존재하고, trade-off 가 발생하게 된다.
# 기준점 예시
개발, 테스트 : factor 1
운영환경 : factor 2 [약간의 손실을 허용], factor 3 [손실 허용]
2) 파티션 (partition)
하나의 토픽이 한 번에 처리할 수 있는 한계를 높이기 위해 여러 토픽으로 나눠 병렬 처리 가능하도록 나눈 것
# 파티션 수 설정
- 운영자가 설정한다.
- 늘리는 것은 마음대로 늘릴 수 있다.
- 줄이는 것은 마음대로 줄일 수 없다.
3) 세그먼트 (segment)
세그먼트는 파티션 내에 존재하고, 프로듀서가 전송한 메세지를 저장하는 역할을 한다.
# 처리 과정
1. 프로듀서는 카프카의 peter-overview01 토픽으로 메세지를 전송
2. peter-overview01 토픽은 파티션이 하나인 상태이고,
프로듀서로부터 받은 메세지를 파티션 0의 세그먼트 파일에 저장한다.
3. 브로커의 세그먼트 로그파일에 저장 된 메세지는 컨슈머가 읽어갈 수 있다.
3. 핵심 개념
1) 분산 시스템 (scale-out)
클러스터 구조로 되어있기 때문에 필요하면 언제든지 서버를 늘리고 줄일 수 있다.
2) 페이지 캐시
물리적인 메모리 캐시를 통해 사용
3) 배치 전송 처리
배치 전송이란, 데이터를 묶어서 보내는 것을 의미한다.
4) 압축 전송
압축을 통해 용량을 줄여, 트래픽을 줄인다.
1. gzip
2. iz4, snappy
5) 토픽, 파티션, 오프셋
이러한 개념들을 사용함으로써 속도가 빠르다.
6) 복제를 통한 고가용성 보장
복제를 해서 안정성을 올렸기 때문에, 메세지 손실 없이 사용 가능하다.
4. Kafka 기동
1. Zookeeper 구동 중인지 확인
# zookeeper 서버 구동중인지 확인
ssh peter-zk01.foo.bar
ssh peter-zk02.foo.bar
ssh peter-zk03.foo.bar
sudo systemctl status zookeeper-server
2. Kafka 접속
# Kafka EC2 접속
ssh peter-kafka01.foo.bar
ssh peter-kafka02.foo.bar
ssh peter-kafka03.foo.bar
# 각각의 EC2 접속 후 kafka 서버 기동
sudo systemctl enable --now kafka-server
5. Kafka log 확인
# kafka02 접속
ssh peter-kafka02.foo.bar
# /data/kafka-logs 디렉토리로 이동
cd /data/kafka-logs
# 로그 파일이 저장되어있는 디렉토리로 이동
cd peter-overview01-0/
# 헥사 코드 출력 키워드를 통해 로그 확인
xxd 00000000000000000000.log
* 헥사 코드로 출력하지 않으면 인코딩 문제 때문에 글씨가 깨진다.
* 로그 확인 시 producer 가 보낸 hi consumer 라는 메세지를 볼 수 있다.
6. 70일차 후기
EC2에 좀 더 편하게 접속하기 위해 설정정보를 만들고, 키를 옮겨 WSL이나 VS Code에서도 사용할 수 있도록 설정을 했다.
이 설정은 외부 서버에 접속해야하는 경우 공통으로 사용할 수 있는 부분이기 때문에, 추후 회사에서 회사 서버에 접속해야 하는경우에도 활용할 수 있을 거 같다는 생각이 들었다.
'Bootcamp > MSA' 카테고리의 다른 글
[MSA] 22. Ansible, Zooker, Kafka 설치 (0) | 2023.11.08 |
---|---|
[MSA] 21. Keycloak (0) | 2023.11.07 |
[MSA] 20. Custom System 구축, Kafka (0) | 2023.11.06 |
[MSA] 19. Namespace, ConfigMap, AWS CLI (0) | 2023.11.03 |
[MSA] 18. Ingress, PV / PVC (0) | 2023.11.02 |