카프카(Kafka)란?
분산 이벤트 스트리밍 플랫폼. 주로 대용량의 실시간 로그 데이터를 처리하는 데 사용된다.
✅ 특징
- 분산 시스템 : 여러 브로커(Broker)로 구성되어 장애에 강함
- 고성능, 확장성 : 초당 수백만 개의 메시지를 처리 가능
- 내구성 : 데이터를 디스크에 저장하여 안정적 유지
- 실시간 스트리밍 : 대용량 데이터를 빠르게 처리
✅ 주요 구성 요소
- 프로듀서 (Producer) : 메시지를 생성하여 카프카로 전송하는 역할
- 컨슈머 (Consumer) : 메시지를 구독하여 가져가는 역할
- 브로커 (Broker) : 카프카 서버로, 메시지를 저장하고 분배하는 역할
- 토픽 (Topic) : 메시지가 저장되는 논리적 분류 단위
- 파티션 (Partition) : 토픽을 나누어 병럴 처리 가능하게 하는 단위
- 컨슈머 그룹 (Consumer Group) : 여러 Consumer가 같은 토픽을 병렬로 소비할 수 있도록 그룹
프로듀서는 다양한 데이터 소스로부터 데이터를 가져와 카프카의 특정 토픽에 메시지를 발행한다.
브로커는 프로듀서로부터 메시지를 받아서 저장하고, 컨슈머에게 메시지를 전달하는 역할을 한다.
컨슈머는 특정 토픽을 구독하고, 해당 토픽의 메시지를 소비하는 역할을 한다.
Ubuntu에 Kafka 설치
https://kafka.apache.org/downloads
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
2.13 으로 되어있는 링크 복사 후 리눅스 컴퓨터에 받아준다.
wget으로 받아온 후 압축 해
wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
tar zxvf kafka_2.13-3.9.0.tgz
자바가 필요하니까 jdk도 설치
apt install -y openjdk-17-jdk
설치해서 bin 폴더로 들어가면 엄청 많은 실행파일들을 확인할 수 있다.
bin 폴더 안에 카프카 실행
./kafka-server-start.sh ../config/server.properties
카프카를 실행 후 주키퍼를 실행해준다.
(원래 다른 서버로 실행해야 하지만, 여유 공간이 없어 한 서버에서 진행한다.)
주키퍼(Zookeeper)란?
분산 시스템을 위한 중앙 집중형 서비스
= 카프카와 같은 분산 시스템이 정상적으로 동작하도록 돕는 코디네이션 서비스
카프카는 분산 시스템이기 때문에 여러 개의 브로커(서버)가 함께 동작해야 한다.
하지만 브로커끼리 "누가 뭘 할지?" "어떤 서버가 죽었는지?" "새로운 브로커가 추가되었는지?" 등을 조율하지 못해서 이러한 기능이 필요하다
= 이 역할을 주키퍼가 담당한다.
✅ 주키퍼의 주요 역할
- 카프카 클러스터 관리 : 브로커 추가/제거, 카프카 브로커들의 상태(정상/오류 여부)를 감시
- 리더 선출 : 카프카는 토픽을 파티션으로 나누고, 각 파티션에 리더를 정해야 하는데 주키퍼가 리더 브로커를 자동으로 선출
- 메타데이터 저장 : 토픽, 파티션, 오프셋 정보 관리
- 노드 감시(Watcher) 기능 : 클러스터 내 변경 사항을 감지하고 브로커들에게 알림
- 동기화 관리 : 여러 노드 간 상태를 동기
✅ 카프카와 주키퍼 구조
카프카의 주키퍼 클라이언트는 카프카의 브로커를 관리하고 조정하는 데 사용된다.
카프카도 분산 처리 플랫폼이지만 메시지를 주고받는 것 외에는 아무것도 하지 않기 때문에, 브로커 상태 관리를 위한 주키퍼를 사용하는 것이다.
일반적으로 카프카 메시지 브로커와 주키퍼는 1:1로 구성되며, 만약 프로듀서가 특정 카프카 브로커로 메시지를 생산했을 때 이를 실패하면 주키퍼가 다른 정상 서버로 프로듀서와 컨슈머에게 브로커를 알리는 식으로 운영된다.
Ubuntu에 Zookeeper 설치
위에서 설치했던 아파치 카프카 압축파일을 그대로 사용한다.
bin 폴더 안에 zookeeper 실행
./zookeeper-server-start.sh ../config/zookeeper.properties
실행하면 zookeeper 그림이 보이면서 실행되는 걸 확인할 수 있다.
카프카 브로커 서버를 통해 메시지 주고받기 (서버 총 3대 구성)
특정 토픽으로 메시지를 보내고
토픽을 구독하고 있는 서버들이 메시지를 받아가게 한다.
a 토픽으로 메시지를 보내면, a 토픽을 구독하고 있는 서버들이 메시지를 받아가게 한다.
컨슈머 서버
server.properties에서 카프카 서버로 설정
root@test:~/kafka_2.13-3.9.0# vi config/server.properties
vi 편집기로 설정을 열어서 수정해준다.
// 34번째 줄
listeners=PLAINTEXT://[카프카 브로커 서버 IP 주소]:9092
// 38번째 줄
advertised.listeners=PLAINTEXT://[카프카 브로커 서버 IP 주소]:9092
카프카의 기본 포트 번호는 9092다.
listeners = ~~~
- Kafka 브로커가 수신할 네트워크 주소를 지정하는 설정
- 내부적으로 브로커가 실행되는 서버의 IP 주소 및 포트를 지정
advertised.listenenrs ~~
- Kafka 브로커가 클라이언트에게 알리는 주소
- 클라이언트가 이 브로커에 연결할 때 이 주소를 사용한다.
- 브로커가 자신의 위치를 클라이언트에게 홍보하는 역할
프로듀서 서버
bin 폴더 안에서 명령어 입력
카프카 프로듀서를 실행해 토픽 abc에 메시지를 보낼 수 있도록 하고,
브로커 서버의 IP와 포트를 지정해서 메시지를 보낼 브로커를 연결하는 명령어
./kafka-console-producer.sh --broker-list [카프카 브로커 서버 ip 주소]:9092 --topic abc
컨슈머 서버
bin 폴더 안에 명령어 입력
카프카 컨슈머를 실행해 토픽 abc에서 메시지를 읽는 명령어
--bootstrap-server 옵션을 통해 브로커에 연결해서 메시지를 가져와 출력한다.
./kafka-console-consumer.sh --bootstrap-server [카프카 브로커 서버 ip 주소]:9092 --topic abc
테스트
10.10.10.111: 프로듀서 서버
10.10.10.222: 컨슈머 서버
10.10.10.123: 카프카 브로커 서버
프로듀서 서버에서 메시지를 입력하면 컨슈머 서버로 메시지가 잘 전달된다.
'CS > Linux' 카테고리의 다른 글
[Linux] NFS 서버 및 클라이언트 구성 (이미지 파일 업로드) (0) | 2025.03.04 |
---|---|
[Linux] 문서 편집기 vi (0) | 2024.11.20 |
[Linux] 폴더, 파일 관련 명령어 / 권한 (0) | 2024.11.20 |
[Linux] 절대경로, 상대경로 / 디렉터리 이동 / ls 명령어, 옵션 (0) | 2024.11.20 |
[Linux] 리눅스(Linux)란? / 리눅스 구성 요소 / 리눅스 환경 준비 (0) | 2024.11.20 |