Kafka 개요 및 설정
in Technical posts
Apache Kafka의 주요 개념을 정리했습니다.
데이터 흐름
Source Application ➝ Kafka ➝ Target Application Producer Queue 역할 (Topics) Consumer
- Producer: json, tsv, avro 등의 데이터를 전송
- Consumer: 데이터를 소비
- Producer와 Consumer는 라이브러리로 구현
주요 개념 및 용어
Fault-Tolerant (고가용성)
- 랙이 내려가더라도 데이터 손실 없이 복구 가능
- 낮은 지연, 높은 처리량 (low latency, high throughput)
Topic
- 데이터가 들어가는 공간
- 일반적인 AMQP와 다름
- 테이블이나 폴더와 비슷한 개념
- 하나의 토픽은 여러 개의 파티션으로 구성될 수 있음
Broker, Replication, ISR
- Replication (복제): Kafka의 가용성을 보장
- Broker: Kafka가 설치된 서버 단위, 보통 3개 이상의 서버로 구성
- ISR (In-Sync Replica): 복제된 데이터의 일관성을 유지
Acknowledgment (ack)
- ack=0: 속도는 빠르지만 데이터 손실 여부를 알 수 없음
- ack=1: 복제 여부를 알 수 없음
- ack=all: 데이터 유실은 없지만 속도가 느림
Partitioner
- 메시지 키 또는 메시지 값에 따라 파티션을 결정
- 기본값은
UniformStickyPartitioner
Consumer Lag
- Producer가 데이터를 빠르게 전송하고 Consumer가 느리게 처리할 때 발생
- 이 현상은 상황에 따라 좋을 수도, 나쁠 수도 있음
records-lag-max == 31
Burrow
- 오픈소스 Kafka consumer lag 모니터링 툴
메시지 브로커 플랫폼
- 메시지 브로커: 이벤트 브로커 역할 불가능
- 이벤트 브로커: 메시지 브로커 역할 가능
- 단일 진실 공급원: 장애 발생 시 해당 시점으로 복구 가능
- 스트림 데이터 처리: 많은 양의 데이터를 효과적으로 처리
- MSA에서 중요한 역할:
- 메시지 브로커 예: RedisQ, RabbitMQ
- 이벤트 브로커 예: Kafka, AWS Kinesis
Kafka 설치 및 실습
1개 노드에 Homebrew로 설치
- Kafka는 3개 이상의 브로커로 구성된 클러스터에서 성능을 발휘
- AWS EC2 서버 3대를 발급받고 Kafka 설치
- console producer, console consumer 실습
주키퍼 (Zookeeper)
- Kafka 관련 정보 저장 역할