1. 카프카란?
- LinkedIn이 개발한 시스템
- Apache Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다.
- 분산형 게시-구독 메시징 플랫폼
- 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션
- 서로 다른 구성 요소 간의 안정적인 데이터 교환
- 데이터 처리를 위한 실시간 스트리밍
- 필요한 모든 곳에서 대규모 데이터를 동시에 이동할 수 있습니다.
2. 카프카를 왜 쓰나요?
[카프카 사용 이전]
end-to-end 연결 방식의 아키텍처의 문제로는 시스템이 작을 때는 문제가 없을 수 있으나
커질수록 연동이 복잡해지고 결합도가 매우 크다 보니까 시스템을 확장하고 싶을 경우 엄청난 노력이 필요하게 됩니다.
[카프카 사용 이후]
- 소스 애플리케이션과 타겟 애플리케이션의 결합도 [coupling]가 낮아집니다.
- 연동 작업이 간단해져 시스템 확장이 쉽습니다.
- 장비 추가나 작업을 서비스를 중단하지 않으면서 가능합니다. (스케일 아웃)
- Consumer를 여러 개(Consumer Group)를 사용할 수 있어서 병렬 처리가 가능합니다.
- Replication을 사용해 고가용성이 가능합니다. (고장 나지 않는 시스템)
- 낮은 지연(latency) 높은 처리량(throughput)을 지원함에 따라 데이터를 효과적으로 아주 많이 처리할 수 있습니다.
3. 카프카 용어 정리
Broker: 카프카 애플리케이션 서버 단위(보통 3개 이상의 broker로 구성(클러스터링)하여 사용하는 것을 권장)
Topic: 데이터 분리 단위, 다수 파티션 보유 (like table)
Partition: 레코드를 담고 있음, 컨슈머 요청 시 레코드 전달
Offset: 각 레코드당 파티션에 할당된 고유 번호
Producer: 레코드를 브로커로 전송하는 애플리케이션
Consumer: 레코드를 polling 하는 애플리케이션
Consumer group: 다수 컨슈머 묶음
Consumer offset: 특정 컨슈머가 가져간 레코드의 번호
Replication: 파티션 복제 기능
ISR: 리더+팔로워 파티션의 sync가 된 묶음 (replication group이라고 생각하면 됩니다.)
4. 카프카 설치
1. 아래의 사이트에 접속해서 다운로드 URL을 복사합니다
(또는 다운로드하여 ftp툴을 이용해 직접 서버에 업로드해도 됩니다.)
https://kafka.apache.org/downloads
2. wget을 이용하여 다운로드합니다.
경로 같은 경우엔 소스 파일은 /usr/local/src 에 보관하고 /usr/local/ 에 설치하는 것이 관례
# /usr/local/src
# wget --no-check-certificate https://dlcdn.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz
3. 압축을 해제합니다.
# tar xvf kafka_2.13-3.0.0.tgz
5. 카프카 환경설정
간단한 테스트를 위한 로컬 설정을 합니다.
# cd /usr/local/src/kafka_2.13-3.0.0/config
# vi server.properties
[31번 라인 정도에 있는 다음 내용 주석 해제]
listeners=PLAINTEXT://:9092
[36번 라인 정도에 있는 다음 내용 주석 해제 후 다음과 같이 내용 변경]
advertised.listeners=PLAINTEXT://localhost:9092
server.properties 주요 설정
broker.id : 정수로 된 브로커 번호. 클러스터 내 고유번호로 지정
listeners : Kafka 통신에 사용되는 host:port
advertised.listeners : Kafka Client가 접속할 host:port
log.dirs : 메시지를 저장할 디렉토리
log.segment.bytes : 메시지가 저장되는 파일의 크기 단위
log.retention.ms : 메시지를 얼마나 보존할지 지정
zookeeper.connect : 브로커의 메타데이터를 저장하는 주키퍼의 위치
auto.create.topics.enable : 자동으로 토픽 생성 여부
num.partitions : 자동 생성된 토픽의 기본 파티션 개수
message.max.bytes : 브로커에 쓰려는 메시지 최대 크기
6. 카프카 테스트
- 카프카는 일반적으로는 보통 3개 이상의 broker로 구성하여 사용하는 것을 권장합니다. (다른 서버로 둔 3개의 카프카 broker) 그러나 테스트를 위해 1개의 카프카만 사용합니다.
- 프로듀서와 컨슈머는 보통 Spring Boot(Java)나 Python, Scala에게 제공되는 라이브러리를 이용하여 구현하지만 간단한 테스트를 위해 console 프로듀서, 컨슈머를 활용합니다.
- sh 명령어 실행은 절대 경로를 활용하여 실행하였습니다. 상대 경로를 사용해도 됩니다.
1. 카프카 실행
카프카를 실행하기 위해서는 먼저 zookeeper를 실행합니다. (브로커의 메타데이터를 저장 용도로 사용합니다.)
[1. zookeeper 데몬으로 실행]
# /usr/local/src/kafka_2.13-3.0.0/bin/zookeeper-server-start.sh -daemon /usr/local/src/kafka_2.13-3.0.0/config/zookeeper.properties
[2. kafka 데몬으로 실행]
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-server-start.sh -daemon /usr/local/src/kafka_2.13-3.0.0/config/server.properties
[3. 실행 확인]
# ps -ef | grep zookeeper
# ps -ef | grep kafka
2. Topic Create
kafka-test라는 topic을 생성해줍니다. 1개의 Partition과 1개의 Replication으로 생성합니다.
생성 후 잘 생성이 되었는지 리스트를 확인합니다.
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic kafka-test
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
__consumer_offsets
kafka-test
3. Producer 실행
콘솔을 이용해 Producer를 실행합니다.
새로운 Console창을 띄우고 해당 Console을 이용해서 Kafka에게 데이터를 전달할 Producer 실행 sh파일을 실행합니다.
데이터를 입력하면 Kafka에 데이터가 전달됩니다.
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic kafka-test
> hello
> kafka test
4. Consumer 실행
콘솔을 이용해 Consumer를 실행합니다.
새로운 Console창을 띄우고 Kafka에서 데이터를 Polling 할 Consumer 실행 sh파일을 실행합니다.
실행을 하게 되면 Producer에서 입력하여 Kafka에 저장된 데이터를 Polling 해 옵니다.
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka-test --from-beginning
5. 실행 결과
6. Topic Delete
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic kafka-test
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
'Backend > Kafka' 카테고리의 다른 글
[Kafka] 카프카 Burrow 설치 (카프카 모니터링) (0) | 2022.01.29 |
---|---|
[Kafka] 기본 카프카 명령어 (command-line tool) (0) | 2022.01.13 |
[Spring for Apache Kafka] Consumer Mysql Insert (0) | 2022.01.11 |
[Spring for Apache Kafka] Error while fetching metadata with correlation id (0) | 2022.01.10 |
[Spring for Apache Kafka] Apache Kafka Producer (0) | 2022.01.09 |