티스토리 뷰
참조:
위 참조 사이트의 내용을 간략하게 정리하였다.
구성
- Broker 는 Topic 기준으로 메세지를 관리.
- Producer 는 Topic의 메세지를 생성하고, Broker에 전달
- Consumer 는 Broker가 쌓아둔 Topic을 가져가서 처리하게 된다.
- Topic 은 업무 또는 메세지.
차이점(장점)
- 다수의 메세지를 batch 형태로 처리 가능. (TCP/IP 라운드트립 횟수를 줄인다.)
- TCP 기반의 프로토콜 사용.(오버헤드 감소)
- 분산 시스템으로 설계 (분산 및 복제가 다른 메시징 시스템에 비해 손쉽다)
- Transactions Per Second(TPS)가 우수하다.
- 파일시스템에 저장
- 데이터의 영속성이 보장
- 파일시스템에 저장하여 메세지(데이터)가 많아도 성능이 크게 저하가 안된다.
- 수명을 설정하여 Consumer에 의해 처리된 데이터도 일정 기간동안 보관할 수 있다. (consumer를 다시 처리할 수 있다.)
- Consumer가 Broker로부터 데이터를 Pull하는 구조.
Topic & Partition 분산 그리고 복제
- Topic은 각 파티션에 분배되어 저장된다.
- 파티션이 3개라면 하나의 Topic은 각 파티션마다 존재하므로 3개의 Topic이 생긴다. (failover 수행)
- Offset으로 메세지를 식별하고 각 파티션마다 동일한 Topic에 대한 Offset은 다르다.
- Producer는 사용자가 구현한 알고리즘에 의해 균등하게 Partition으로 데이터를 전달한다.
- Round-Robin, 키를 활용한 알고리즘...
- 각 Partition으로 데이터가 전달되면, 고가용성을 위해서 데이터를 복제하여 각 클러스터에 분산시킨다.
- 복제된(temp) 데이터는 follower라고 하고, 복제한(original) 데이터는 leader 이다.
- 모든 데이터의 읽기와 쓰기는 leader를 통해 진행되고, leader에서 에러가 발생하면 follower 중 하나가 leader가 된다.
Consumer와 Consumer Group
- Kafka에서는 발행-구독 모델으로 일반화 했다.
- Topic을 구독하는 모든 Consumer에게 메세지를 브로드캐스팅(1:N 전송)하는 방식.
- 같은 Consumer Group의 Consumer는 동일한 Partition을 바라보지 않는다.
- 하나의 Consumer에 의해 독점적으로 Partition이 Access되기 때문에 순서대로 처리된다.
- 알고리즘을 통해 순차적인 방법말고도 처리할 수 있다.
파일시스템을 활용하여 고성능 디자인
- 메모리(기존)가 아닌 파일시스템(Kafka)에 쌓아두고 관리한다.
- 일반적으로는 하드디스크가 느리나, 특정조건에서는 빠를 수도 있다.
- 하드의 순차적 읽기 성능은 메모리에 대한 랜덤 읽기 성능보다 뛰어나며, 메모리의 순차적 읽기 성능보다 7배 정도 느리다.(http://queue.acm.org/detail.cfm?id=1563874)
- Kafka 프로세스는 OS의 페이지 캐시에 모든 것을 위임한다. (재시작해도 따로 캐시를 워밍업할 필요가 없다. OS 페이지에 캐시 되어있으므로)
- 네트워크를 통해 Consumer에 전송할 때는 Zero-copy(python memoryview)기법을 사용하여 데이터 전송 성능을 향상 시켰다.
'BigData' 카테고리의 다른 글
MapReduce란? (0) | 2019.03.16 |
---|---|
ELKR (ElasticSearch + Logstash + Kibana + Redis) 를 이용한 로그분석 환경 구축하기 (0) | 2017.04.12 |
댓글
공지사항
최근에 올라온 글
링크
TAG
- TDD
- javascript
- Error
- 점프투파이썬
- serverless
- executor
- Maven
- spring
- Docker
- AI
- 모두의딥러닝
- python
- Gradle
- spark
- memory
- mysql
- Configuration
- API
- AWS
- 파이썬
- tensorflow
- mybatis
- web
- 머신러닝
- 텐서플로우
- 중앙정보처리학원
- ML
- BigData
- NIO
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함