kafka ?
- 여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템
구성요소
- Broker
- Message
- Producer
- Consumer
- Topic
Broker ?
- 하나의 서버당 하나의 데몬 프로세스로 동작하여 메시지 수신/전달 요청을 받아들임
- 디스크의 총 용량에 따라 장기간 데이터를 보존할 수 있음
Partition?
- 토픽에 대한 대량의 메시지 입출력을 지원하기 위해, 브로커 상의 데이터를 읽고 쓰는 것의 단위
- 브로커 클러스터 안에 분산 배치되며 Producer로부터 메시지 수신, Consumer에게 배달 분산을 실시함으로 하나의 토픽에 대한 대규모 데이터 수신과 전달을 지원
* 메시지 처리속도, Consumer 개수, Consumer 내 스레드 수 등을 동시에 고려해야 함
Producer ?
- 브로커에 데이터를 송신하기 위해 구현된 애플리케이션
- 각종 로그 전송 및 미들웨어와 연동하여 동작
- 송신 방법
1. 토픽의 파티션에 메시지를 송신할 때 버퍼 기능처럼 프로듀서의 메모리를 이용하여 일정량을 축적 후 송신
2. 데이터 송신에 대해서 지정한 크기까지 메시지 축척
3. 지정한 대기시간에 도달하는 것 중 하나를 트리거로 전송
4. 토픽에 메시지 전송 시 파티셔닝 ( Key의 해시값을 사용한 통신, 라운드 로빈에 의한 송신)
5. callback을 통해 브로커로 메시지 송신 결과를 비동기 처리 할 수 있음
Consumer ?
- 브로커에서 메시지를 취득하도록 구현된 어플리케이션
* Retry Template 등을 통해 Consumer 장애시 재처리를 시도하도록 해야함
Consumer Group ?
- 하나 이상의 Consumer들로 이루어진 그룹
- ID로 구분
* 기대한 대로 분산하여 메시지를 수신하기 위해서는 파티션 수가 적어도 각 Consumer그룹에 속하는 Consumer보다 많아이 한다.
Offset ?
- 파티션에서 수신한 메시지에 부여한 일련번호로, 메시지 위치를 나타냄
- 오프셋 설정 값 종류
LEO(Log-End-Offset) : 파티션 데이터의 끝
Current Offset : Consumer가 어디까지 메시지를 읽었는가를 나타냄
Commit Offset : Consumer가 어디까지 커밋했는지를 나타냄
* Consumer가 메시지를 확인했음을 나타내는것
- 자동 오프셋 리셋
> Consumer가 시작할 때 Offset Commit 기록이 존재하지 않거나 기록되어 있어도 유효하지 않은 경우 사용하는 정책
* 유효하지 않은 경우 : 메시지가 retention이 지나 없는 경우
> latest : 파티션의 가장 새로운 오프셋으로 초기화 / 카프카 클러스터에 이미 존재하는 메시지는 처리 되지 않음
> earliest : 파티션에 존재하는 가장 오래된 오프셋으로 초기화 / 카프카 클러스터에 이미 존재하는 메시지 모두에 대해 처리
> none : 유효한 오프셋 커밋 정보가 없는 경우 예외를 반환 / seek() 등으로 명시적으로 오프셋을 지정해야 함
Offset Commit ?
- 다음 수신 및 처리해야 할 메시지의 오프셋 기록
- Consumer group 단위로 이루어짐
- 처리를 완료한 메시지 중에서 최대의 오프셋을 기록하는 형태
* 중간에 메시지가 처리되지 않을 경우 무한 루프가 돌 수 있음
Zookeeper
- 브로커에 있어 분산 처리를 위한 관리 도구
- 설정 관리, 이름 관리, 동기화를 위한 잠금 관리를 하는 구조로 자주 사용됨
- 분산 메시징의 메타 데이터를 관리하기 위한 구성 요소로 기능
RabbitMQ vs Kafka vs ActiveMQ ?
https://developing-countries.tistory.com/9
오픈 소스 Message Queue
RabbitMQ vs Kafka vs ActiveMQ ? - 비동기 통신을 제공하고, 보낸 사람과 받는 사람을 분리(공통) RabbitMQ 빠르고 쉽게 구성 할 수 있으며 직관적 AMQT 프로토콜을 구현해놓은 프로그램 신뢰성, 유연한 라
developing-countries.tistory.com
'참고' 카테고리의 다른 글
쿠키 vs 세션 ? (0) | 2021.07.06 |
---|---|
Redis Architecture OverView (0) | 2021.06.27 |
[AWS]ElastiCache (0) | 2021.06.27 |
비동기 통신 (0) | 2021.06.27 |
HTTP 응답 상태 코드 (0) | 2021.06.24 |
댓글