Kafka란?
Kafka는 Distributed Event Streaming Platform(분산 이벤트 스트리밍 플랫폼)이다.
Publish-Subscribe 모델의 Message Queue이며, 분산에 특화되어 있다.
기본 구조
1.1 Event
- Event는 Producer와 Consumer가 데이터를 주고 받는 단위이다.
1.2 Topic
- Event가 쓰이는 곳이다.
- Topic은 파일시스템의 폴더 또는 디렉토리와 유사하며, 이벤트는 폴더안의 파일과 유사하다.
- Topic의 개수는 제한이 없고, 이름으로 구분된다.
- Topic이 다시 특정한 개수의 partitions이 된다. 개수의 명시가 필요하다
1.3 Partition
- Topic이 나눠지는 단위이다.
- Partition에 한 번 쓰여진 데이터는 변경이 불가능 하다.
- Topic을 구성하는 Partition은 정렬되어 있지만, 키 값이 제공되지 않으면 랜덤하게 할당한다.
- 하나의 파티션에 순차적으로 처리하는 것보다 병렬 처리하여 시간을 절약하기 위해 Partition을 나눈다.
1.4 Broker
- Kafka 서버를 가르키며 특정한 Topic의 Partition을 보유한다.
- 3개 이상의 Broker를 가지는 것이 장애 허용 관점에서 좋다.
1.5 Producer
- Producer는 Kafka에 Event를 게시하는 클라이언트 어플리케이션이다.
1.6 Consumer
- Consumer은 Topic을 구독하고 얻어낸 이벤트를 처리하는 클라이언트 어플리케이션이다.
1.7 Zookeeper
- Kafka Cluster 상태를 관리한다.
- Broker를 모니터링하고, Topic과 Partition을 관리한다.
- Kafka는 Zookeeper없이 실행할 수 없다.
Broker의 디스크 순차 저장 및 처리
- Event를 메모리에 저장하는 기존 메시징 시스템과는 달리 Event를 파일 시스템에 저장한다.
- 파일 시스템에 Event를 저장하기 때문에 별도의 설정을 하지 않아도 데이터의 영속성(durability)이 보장된다.
- 디스크가 순차적으로 저장되어 있으므로 디스크 I/O가 줄어들어 속도가 빠르다
Pub-Sub모델을 활용한 멀티 Producer, Consumer
- Event를 보내는 역할(Producer)과 받는 역할(Consmer)이 완벽하게 분리되어 있다.
- 느슨한 결합을 통해 어느 한쪽 시스템에서 문제가 발생하더라도 서로 의존성이 없으므로 연쇄작용이 발생할 확률은 매우 낮다.
- 하나의 Topic에 여러 Producer 또는 Consumer들이 접근 가능한 구조로 되어 있다.
- 그렇기 때문에 하나의 Producer가 하나의 Topic에만 Event를 보내는 것이 아닌 하나 이상의 Topic으로 보내고, Consumer는 하나 이상의 Topic으로 부터 Event를 가져온다.
확장성
- 하나의 Kafka Cluster는 3대의 Broker로 시작해 수십대의 Broker로 확장 가능하다.
- 온라인 상태에서 무중단 확장이 가능하다.
먼저 Kafka의 구성 요소와 가장 큰 특징인 디스크 처리와 pub-sub 모델을 알아보았다.
다음 장에서 Topic에 대해 알아보자
참고
https://kafka.apache.org/documentation/#gettingStarted
https://www.tibco.com/ko/reference-center/what-is-apache-kafka
https://velog.io/@qlgks1/0%EC%9E%A5.-%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EB%9E%80
'개발 이야기 > Kafka' 카테고리의 다른 글
[Kafka] (2) Topic과 Partition (0) | 2022.03.23 |
---|