1. 카프카 개념과 구조 요약
- 브로커(Broker): 카프카 서버 프로세스 1개. 로그를 저장하고 클라이언트 요청을 처리함.
- 노드(Node): 브로커가 떠 있는 머신(VM/서버). 보통 “노드=브로커 1:1”.
- 클러스터(Cluster): 같은 cluster.id 를 공유하는 브로커들의 집합.
- 토픽(Topic): 이름 있는 로그 스트림(예: orders).
- 파티션(Partition): 토픽을 병렬 처리·확장하기 위한 샤드. 각 파티션은 append-only 로그.
- 리더/팔로워(Leader/Follower): 파티션의 리더 1개가 쓰기·읽기를 주도, 나머지는 복제.
- 복제(Replication): 각 파티션을 여러 브로커에 복사(RF=2/3…). 장애시 가용성↑.
- 컨슈머 그룹(Consumer Group): 같은 그룹의 컨슈머들이 파티션을 나눠 읽음(스케일아웃).
- 오프셋(Offset): 파티션 내 메시지 위치. 그룹 단위로 커밋하여 재시작 시 이어읽기.
- 컨트롤러(Controller, KRaft): 메타데이터(누가 리더인지 등)를 관리하는 합의(Quorum) 노드 집합.
- KRaft 포트(기본 9093)로 컨트롤러들이 선출/합의함.
- Kafka 3.x에선 브로커와 컨트롤러를 한 프로세스에 함께 띄우는 구성이 흔함.
2.네트워크·포트(기본값)
- 9092: 클라이언트(프로듀서/컨슈머/MM2)가 붙는 리스너
- 9094: 브로커 간 복제(Inter-broker)
- 9093: KRaft 컨트롤러 쿼럼
3. 최소 3노드 KRaft 클러스터 템플릿 (설정용)
-공통 준비
# 1) 클러스터 UUID 1개 생성(한 번만)
bin/kafka-storage.sh random-uuid
# 출력된 UUID를 메모해두고, 세 브로커 모두 같은 UUID로 "format" 수행
# 2) 각 브로커 서버프로퍼티 파일 준비(아래 예시)
- 브로커 1 설정 파일
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@10.10.1.11:9093,2@10.10.1.12:9093,3@10.10.1.13:9093
# 리스너(바인드)와 광고주소(클라이언트가 접속할 주소) 분리
listeners=INTERNAL://10.10.1.11:9092,REPLICATION://10.10.1.11:9094,CONTROLLER://10.10.1.11:9093
advertised.listeners=INTERNAL://10.10.1.11:9092,REPLICATION://10.10.1.11:9094
listener.security.protocol.map=INTERNAL:PLAINTEXT,REPLICATION:PLAINTEXT,CONTROLLER:PLAINTEXT
inter.broker.listener.name=REPLICATION
controller.listener.names=CONTROLLER
log.dirs=/data/kafka-logs
num.network.threads=3
num.io.threads=8
socket.request.max.bytes=104857600
- 브로커 2 설정 파일과 3 설정 파일은 노드 아이디와 IP 만 변경하면 됨.
4. 포맷 및 기동
# 클러스터 UUID는 위에서 만든 "같은 것"으로
bin/kafka-storage.sh format -t <그 UUID> -c config/server.properties
# 시작
bin/kafka-server-start.sh -daemon config/server.properties
# 확인
ss -lntp | egrep '9092|9093|9094'
bin/kafka-metadata-shell.sh --snapshot /data/kafka-logs/__cluster_metadata-*/00000000000000000000.log
5. 트러블슈팅 “증상→원인→조치”
- 클라이언트가 Connection to node -1 could not be established
- 원인: advertised.listeners 가 외부에서 도달 불가한 주소/포트
- 조치: 클라이언트가 실제로 접속하는 프록시/NAT 외부주소를 광고로 설정
- Controller not available / 선출 실패
- 원인: 9093 차단, controller.quorum.voters IP/포트 불일치
- 조치: 9093 상호통신 열기, voters 3노드 모두 정확히 기입
- 복제 지연/URP 증가
- 원인: 9094 차단, 디스크 느림, 네트워크 혼잡
- 조치: 9094 확인, 디스크 IOPS/Latency 점검, topic/segment 튜닝
- Not leader for partition
- 원인: 리더가 바뀌었거나, 특정 브로커에 직접 붙음
- 조치: 부트스트랩 서버 리스트 사용, 재시도 로직/메타데이터 갱신
- Ping 안됨 환경(망연계)에서도 동작?
- 예: 가능. TCP 9092/9093/9094 만 정확히 열려 있으면 충분. 연결 확인은 nc -vz <ip> <port>.
'CS 공부 > 기타' 카테고리의 다른 글
| [ETC] ESXi란 무엇인가? (0) | 2025.08.26 |
|---|---|
| [ETC] 두 PC에 Kafka 브로커 분리 설치 및 클러스터 검증 실습 (2) | 2025.08.24 |
| [etc] NTP 란 무엇인가? (0) | 2025.08.21 |
| [기타] Mac OS 에서 가상 윈도우 PC 로 원격 접속하기 (1) | 2025.08.18 |
| 개인 서버 구조 VM 분리형 vs Docker/LXC 컨테이너형 에 대하여 (4) | 2025.08.11 |