← 목록으로

kafka가 멀까

topics 400-인프라 & 아키텍처 404 마이크로서비스(MSA)
types 이론 학습
tags #kafka #msa #event-driven
references www.youtube.com/watch

대규모 실시간 데이터를 처리하는 오픈소스 분산형 이벤트 스트리밍 플랫폼

핵심 특성: 분산(Distributed), 유연(Resilient), 장애에 강함(Fault Tolerant)

특징

  • 높은 처리량
    • 컨슈머/프로듀서가 브로커와 통신할 때 데이터를 묶어서(배치) 전송
    • 파티션 개수만큼 컨슈머를 늘려서 병렬 처리량을 늘릴 수 있음
    • 높은 퍼포먼스 ( 10ms 미만의 지연 )– real time
  • 확장성
    • 데이터 양이 많아지거나 줄어짐에 따라 무중단 스케일인/아웃 가능(수평 확장)
    • 100 개의 Broker 까지 확장
       - 1초에 100만개의 메세지
       - 무중단 확장 가능
  • 영속성
    • 파일 시스템에 데이터를 저장
    • 브로커에 이슈가 발생하여 종료되더라도 데이터 재사용 가능
  • 고가용성
    • 일부 브로커에 이슈가 생기더라도 데이터를 지속해서 처리 가능
    • 온 프레미스/퍼블릭 클라우드에 적합한 브로커 옵션 선택 가능
       - 수평 확장 가능
       - 100 개의 Broker 까지 확장
       - 1초에 100만개의 메세지
       - 무중단 확장 가능
  • 높은 퍼포먼스 ( 10ms 미만의 지연 )– real time

주요 용어

kafka-1758597611508.png
포함 관계 : 브로커 ⊃ 토픽 ⊃ 파티션

토픽

  • 메시지를 분류하고 저장하는 기본 단위
  • 특정 데이터 스트림, 즉 메시지를 구분 하는 통로
    • 단톡방개념(요청들을 묶어서 분류하는 단위같은 느뀜..)
  • 토픽으로 구분하여 원하는 메시지를 찾는 방식
    • pub,sub 이 토픽단위로 되는듯
  • 이름으로 구분됨
    • if 회사 공용, 토픽의 오너십(ownership)을 가진 팀의 이름을 토픽 이름에 추가
    • 개발환경 / 애플리케이션 / 데이터 타입 유추을 고려해서 지음

파티션

  • 토픽당 데이터를 분산 처리하는 단위
  • 메시지는 파티션에 순서대로 저장(파티션 내에선 순서가 보장된다는 것)
    • 각각의 파티션은 0부터 1, 2, … 의 Index를 가짐
    • 이 인덱스를 offset이라캄(파티션 내에서만 의미잇음)
    • FIFO
  • 파티션 내 데이터는 변경불가
  • Key 를 주지 않으면 어느 파티션에 데이터가 들어갈지 모름

브로커

  • Kafka 클러스터를 구성하는 핵심 서버 단위(노드)
    • 서버하나하나를 브로커라고 부른다는 뜻
  • 각 브로커는 토픽과 파티션을 가짐
  • 3개로 시작해서 100개까지 늘릴수 있음

주키퍼

  • 브로커 관리함
    • 브로커와 주키퍼는 DB와 DBMS관계와 같은듯
  • 주키퍼 클러스터는 홀수로 동작
    • 왜? 중요한 결정할때 과반수를 따름
      • 중요한결정 aka 리더선출, 데이터쓰기 등
  • 리더선출
    • 노드의 리더를 선출함, 나머지는 Follower
    • 노드에서 Leader 는 write, Follower 는 read 작업을 함
    • 파티션의 리더선출도 도와줌
      • 파티션의리더만 읽고쓰기가능
      • 나머진 ISR(In Sync Replica)역할
        •  리더의 데이터를 체크하여 복제하고, 리더가 장애시 리더 역할함
  • 분산락(유노? 프로세스 데이터접근할때 햇던 그거임)
    • 다아 일관성이랑 무결성을 유지하기위한~
  • 서비스 디스커버리
    • 서비스가 어디서 실행 중인지 중앙에서 관리
    • 상태관리를한다는거임
      • 상태가 변경되면 알림을 줌
        • like ( 토픽 생성, 브로커 die, 브로커 up, 토픽 삭제 )
  • 주요 설정
    • Topic Replication factor
      • 토픽을 몇개 복제해놓을건데를 정하는
      • 리소스량은 증가 <-> 안정성도 증가

프로듀서

  • 말그대로 메세지를 만들어 토픽으로 보내는 것들
    • 애플리케이션, 서버등
  • 주요 설정
    • key : 설정해 메세지를 특정 파티션에 보낼 수 있음
      • 약간순서 보장필요할때 이거쓰면될듯?
      • 키옵션 ㄴㄴ일땐 라운드로빈방식으로 균등하게
    • ack : 메세지 저장 확인 응답관련설정
      • 0 : 응답기다리지 않음 > 빠르지만 안정성구림
      • 1 : 프로듀서는 리더의 응답만 체크 > 적당함
      • all / -1 : 모든 파티션의 응답 확인

컨슈머

  • 메세지를 쓰는 것들
  •  Kafka는 Consumer Group 단위로 데이터를 처리
    • Consumer Group 은 당연히 컨슈머를 묶은거
      • Message Lagging이 높을 경우, 컨슈머를 증가시킴

CDC (Change Data Capture)

데이터베이스의 변경 사항(삽입, 수정, 삭제)을 실시간으로 감지해서 다른 시스템으로 전달하는 기술

어디에 쓸까?

  • 실시간 스트리밍 데이터 파이프라인을 구축하는 데 사용
  • MSA에서 이벤트 중심 메시징 시스템의 구현을 위해 사용
  • 실시간 로그 수집에사용
  • 실시간 스트리밍서비스에서 사용
  • Spark, Storm, Flink, Hadoop 등 많은 빅데이터 기술과 통합하여 사용

주요 명령어

 

kafka-topics --bootstrap-server http://localhost:9092 --topic example --describe

kafka-topics --bootstrap-server http://localhost:9092 --list --exclude-internal

kafka-topics --bootstrap-server http://localhost:9092 --topic aivle --create --partitions 1 --replication-factor 1