kafka_basic

윤일권·2023년 12월 10일
0

Kafka

목록 보기
1/1

프로젝트를 진행하던 중 메시지 기능구현에서 kafka를 활용한 구현을 하기 위해 학습을 해보았습니다.
이전 메세키큐는 RabbitMQ만 사용해본 경험이 있기에 처음 접해보는 kafka에 대해 정리해보았습니다.

kafka

  • 카프카 이전
    카프카 이전 소스 애플리케이션과 타겟 애플리케이션에 대한 단방향 통신이 주로 이뤄졌지만
    이후 기술발전으로 데이터 전송라인이 많아져서 복잡해졌다.
    데이터 전송라인이 많아지면 배포와 장애에 대한 대응이 어려워진다.
    또한 프로토콜 파편화가 심해지고, 변경사항에 대한 유지보수가 매우 어려워졌다..
  • 카프카 이후
    • 빅데이터 파이프라인에서 카프카의 역할
      • 데이터 레이크 : 빅데이터가 모이는 저장 공간.
        • 필터링되거나 패키지화되지 않은 날 것의 데이터가 저장
        • 데이터 과학자나 데이터 분석가가 데이터 레이크에 모인 데이터를 토대로 인사이트를 찾는다.
      • 데이터를 데이터 레이크에 모으기
        • 데이터를 추출하고 변경, 적재하는 과정을 묶은 데이터 파이프라인을 구축.
    • 아파치 카프카가 데이터 파이프라인으로 적합한 이유
      • 높은 처리량 : 대용량 실시간 로그데이터 처리에 적합, 동일 시간당 데이터 처리량 증가
      • 확장성 : 들어오는 데이터 개수가 가변적인 환경에서도 안정적으로 확장 가능
        • 데이터 적을 때 : scale in
        • 데이터 많을 때 : scale out
        • scale in/out은 무중단 운영을 지원.
      • 영속성
        • 전송받은 데이터를 파일 시스템에 저장해 영속성 보장.
      • 고가용성
        • 3개 이상의 서버 중 일부에 장애가 발생해도 무중단으로 안전하고 지속적으로 데이터 처리
        • 카프카를 안전하게 운영하기 위해 최소 3대 이상의 브로커로 클러스터를 구성

kafak 구조

  • 프로듀서 : 메세지를 카프카에 넣는 역할
  • 컨슈머 : 메세지를 카프카에서 읽어오는 역할
  • 카프카 클러스터 : 데이터를 이동하는데 필요한 핵심 역할
  • 주키퍼 클러스터 : 카프카 클러스터를 관리하는 역할
  • 주키퍼 : Kafka를 운용하기 위한 Coordination service (최신 카프카 버전에서는 주키퍼를 제거하였다.)

Topic , Partition, Recode

Topic

  • 메세지를 구분하는 단위
  • 데이터가 저장되는 곳
  • 파일 시스템의 폴더와 유사
  • 한 개의 topic은 한 개 이상의 partition으로 구성

Partition

  • topic이 복사(replicated)되어 나뉘어지는 단위
  • 메세지를 저장하는 물리적인 파일
  • 파티션은 큐와 비슷한 구조를 가짐
  • 먼저 들어간 레코드는 컨슈머가 먼저 가져가는 구조 (FIFO)
  • 토픽의 레코드는 다양한 목적을 가진 여러 컨슈머 그룹들이 토픽의 데이터를 여러번 가져갈 수 있음

Recode

  • 파티션에 프로듀서가 보낸 데이터들이 들어가 저장되는 데이터

Partition & Offset & Message

  • Partition은 추가만 가능한 파일 (Append-only)
  • Offset은 각 Message 저장 위치
  • Producer가 저장한 Message Partition의 맨 뒤에 추가
  • Consumer는 Offset기준으로 Message 순서대로 읽음
  • Message는 삭제되지 않음 -> 설정에 따라 일정 시간 뒤에 삭제

Producer & Partition

  • Broker에 data를 write하는 역할
  • RoundRobin, key로 partition 선택
  • 메세지 전송 시 key 지정
  • 같은 key를 갖는 메세지는 같은 partition에 저장
  • 같은 key에 대해서 순서 유지

Consumer & Partition

  • Broker에서 data를 read하는 역할
  • Consumer는 Consumer group에 속함
  • 한 개 Partition은 Consumer group의 한 개 Consumer만 연결 가능
  • Consumer group에 속한 다른 Consumer들은 한 Partition을 공유할 수 없음
  • 한 Consumer group 기준으로 Partition의 메세지는 순서대로 처리

참고 자료
https://www.youtube.com/watch?v=Qr0HVvtMFhg&list=PL3Re5Ri5rZmkY46j6WcJXQYRlDRZSUQ1j&index=10

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글