반응형
Kafka란?
Kafka는 분산 메세지 큐로 대용량 데이터를 다루면서도 빠른 데이터 처리가 가능하게 합니다.
본문의 내용은 데브원영님의 강의 '아파치 카프카 for beginners'를 수강하고 정리한 내용입니다.
ref: https://www.youtube.com/@DevWonYoung
Kafka Architecture
- Kafa Producer API (source application) : click log, … logs 데이터 생성, 및 Topic에 데이터를 저장 (push)
- Kafka Cluster(a.k.a Topic) : message 저장소 (핵심 역할)
- Kafka Consumer API (target application) : Topic에 저장된 데이터를 읽음(pop). 로그 적재, 로그 처리
- etc) Kafka Streams API, Kafka Connect API
Apache Kafka Features
Topic & Partition
- Topic: 데이터가 저장되는 공간
- 여러 개 생성 가능: 각 log별로 나눠서 저장 (message를 구분하는 용도)
- Partition: topic의 실제 저장 공간 단위
- que 역할: Producer에서 들어온 데이터는 partition에 쌓이게 되고 Consumer에서 가장 오래된 데이터부터 가져감
- 단, 데이터가 partiton에서 사라지지 않고 그대로 보관됨
- (message가 저장되는 최대 시간과 크기를 지정할 수 있음)
- partition 여러 개 생성 가능 (=병렬처리 가능)
- 다중 partition의 경우 기본 저장 방법: 라운드 로빈
- 단, partition은 늘릴 수 있지만 줄일 수는 없음
- Offset: 메세지를 어디까지 넣었는지, 읽었는지 저장하는 값 (위치)
- que 역할: Producer에서 들어온 데이터는 partition에 쌓이게 되고 Consumer에서 가장 오래된 데이터부터 가져감
- Partitioner: Producer가 데이터를 보내면 partitioner를 통해 topic의 partition으로 데이터가 전송됨, partitioner는 데이터를 어떤 partition에 넣을지 결정하는 역할을 함
- message key(hash)를 통해서 위치를 결정할 수 있음
- 하나의 컨슈머는 하나의 파티션만 연결 (Consumer 1: Partition1), 하나의 컨슈머 기준으로 파티션의 순서 보장
- Lag: 모니터링 지표 중 하나
- Consumer가 마지막으로 읽은 offset과 Producer가 마지막으로 넣은 offset의 Gap (여러 개 존재 가능)
Broker, Replication, ISR
- Broker: 카프카가 설치되어있는 서버 단위 (3개 이상을 권장)
- replication(핵심!): 서버의 이슈에 대비하여 데이터가 유실되는 것을 방지하고 복구하기 위해 복제본을 다른 broker에 저장해 둠 (=고가용성)
- 최대 broker 개수만큼 지정할 수 있음
- replication이 1인 경우, broker 중 1대에 partition의 정보가 저장됨
- replication이 2인 경우, partition 정보가 원본 1개, 복제본 1개가 각각 2대의 broker에 저장됨
- ISR(In Sync Replica): **** 원본(leader)과 복제본(follower)을 합쳐서 부르는 용어
- Producer의 ack 동작: partition에 새로운 데이터를 저장할 때 리더 데이터의 업데이트와 팔로워 데이터의 복제가 정상적으로 되었는지 확인하는 방법 (option: 0, 1, all)
Zookeeper
: 분산처리 관리 시스템
- Kafka 관련 정보를 저장하는 역할
- Kafka의 Broker를 관리(유지보수, 조정)할 수 있음
- Apache Kafka에서 Zookeeper가 단계적으로 제거되는 중…
Consumer, Producer
여기서 자세히 다루지 않음. 더 궁금하신 분들은 아래의 두 동영상을 추천합니다!
장점
- High throughput message capacity
- Scalability & Fault tolerant : Broker, Partition, Consumer 등 구성요소를 쉽게 추가할 수 있음
- Undeleted log
설치, 실행하기
- Zookeeper (port: 2181, 2888, 3888)
- Kafka (port: 9092)
- broker id: 각 서버 별로 다른 숫자로 설정하기
- zookeeper의 connect 설정하기
- (java version) https://www.youtube.com/watch?v=Qr0HVvtMFhg
- (python version) https://www.youtube.com/watch?v=VHngQ-moXIE
활용 예시
- https://techblog.gccompany.co.kr/apache-kafka를-사용하여-eda-적용하기-bf263c79efd0
- https://engineering.linkedin.com/blog/2019/apache-kafka-trillion-messages
- https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-1/
반응형
'Data Engineering' 카테고리의 다른 글
Docker Compose 튜토리얼 (0) | 2023.07.01 |
---|---|
빅데이터 기술 | Airflow로 데이터 파이프라인 생성하기 (ETL) (0) | 2022.12.19 |
빅데이터 기술 | Spark로 분산처리하기 (0) | 2022.12.19 |
Git | Git on the command line (in mac) (0) | 2019.12.17 |