본문 바로가기
참고

[MQ] KafKa

by 상국이 2021. 6. 10.
728x90

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

728x90

'참고' 카테고리의 다른 글

쿠키 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

댓글