Apache Kafka란?

snowcat471·2022년 9월 17일
1

Apache Kafka란?

이 글은 데브원영님의 Kafka 강의를 듣고 정리 및 추가로 공부한 내용을 정리한 글입니다

Apache Kafka란 무엇인가?

실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼. 링크드인(LinkedIn)에서 개발하여 2011년 오픈소스로 공개.

Kafka 이전

  • 서비스간 데이터 전송하는 라인이 복잡해짐
  • 배포와 장애 대응이 어려워짐
  • 데이터 전송시 프로토콜 파편화가 심해져 유지보수가 어려워짐

Kafka 이후

Kafka의 특징

  • Pub/Sub 형태로 서비스간 결합도를 약하게 함
  • 전송하는 데이터의 포맷은 json, tsv, avro 등 여러 포맷 지원
  • 고가용성 및 확장성 제공
  • 디스크에 메세지를 저장하여 Consumer가 메세지를 읽어가도 일정 보관 주기동안은 디스크에 저장해둠
  • 높은 성능을 유지하기 위해 내부적으로 분산처리, 배치처리 등 다양한 기법 사용

Topic

Kafka에서 데이터가 들어가는 공간. 일반적인 AMQP와는 동작이 다름.

Topic에는 이름을 설정할 수 있어서, 목적에 따라 이름을 붙이면 유지보수가 용이

Partition

  • 하나의 Topic 내부는 여러개의 Partition으로 이루어져 있음
  • Partition의 번호는 0번부터 시작
  • Partition은 큐와 같이 끝에서부터 데이터가 쌓임
  • Consumer는 데이터를 오래된 순서부터 가져감
  • 새로운 Consumer가 붙었을때 데이터를 처음부터 가져감
    • 단, Consumer group이 다르고 auto.offset.reset=earliest로 설정되어 있는 경우

  • Partition이 2개 이상인 경우, 다음 데이터는 기본적으로 round-robin으로 partition이 지정
  • key를 지정해주고 기본 파티셔너를 지정해줄 경우, key의 해시값을 구하여 특정 partition에 할당
  • Partition의 수는 늘릴 수 있지만, 줄일 수는 없음
  • Partition내의 record는 옵션에 따라 삭제되는 시기가 다름
    • log.retention.time : 최대 record 보존 시간
    • log.retention.byte : 최대 record 보존 크기(byte)

Broker, Replication, ISR

Broker

  • Kafka가 설치되어 있는 서버 단위
  • 일반적으로 3개 이상의 broker로 구성하여 사용하는 것을 권장

Replication

  • replication의 수만큼 partition 존재
  • broker의 수보다 높을 수 없음
  • 원본 partition은 leader partition, 복제본은 follower partition이라고 부름

ISR (In Sync Replica)

  • leader partition과 follower partition을 합쳐 ISR이라고 부름
  • producer에는 ack라는 옵션이 존재
    • 0 : leader에 요청을 전송하고 응답값은 받지 않음. 따라서 요청이 제대로 전송되었는지 데이터가 follower에 제대로 복제되었는지 알 수 없음. 속도는 빠르지만 데이터 유실 가능성 존재.
    • 1 : leader에 요청을 전송하고, 정상적으로 받았는지 응답을 받음. 데이터가 follower에 복제가 되었는지는 알 수 없음.
    • all : leader에 데이터를 전송하고, follower에 데이터가 잘 복제가 되었는지에 대한 응답을 받음. 데이터 유실이 없지만 속도가 느려짐.

Partitioner

  • 데이터를 어떤 파티션에 넣을지 결정하는 역할
  • 기본파티셔너는 UniformStickyPartitioner

UniformStickyPartitioner

  • key가 있는 경우, 특정한 hash값을 만들고 hash값에 따라 파티션 결정
    • 동일한 key를 가진 record는 동일한 hash값이 생성되어 항상 동일한 partition에 들어가는 것을 보장
    • 동일한 key를 가지면 record를 순차적으로 처리할 수 있게됨
  • key가 없는 경우, round-robin으로 partition 결정
    • batch로 모을 수 있는 최대한의 record를 모아서 batch단위로 보냄

Partitioner Interface

  • 커스텀 파티셔너를 만들 수 있도록 kafka에서 interface 제공
  • 원하는 방식으로 어떤 partitioner로 보낼지 정할 수 있음

Consumer Lag

  • producer에서 생성한 데이터는 partition에 하나씩 들어가게 되는데, 각 데이터에는 offset이라는 숫자가 붙게 됨
  • producer가 생성한 마지막 offset과 consumer가 마지막으로 읽은 offset의 차이가 발생하는데 이를 consumer lag 이라고 함
  • partition이 여러개인 경우, lag도 여러개 존재하는데 이 때 가장 높은 lag을 records-lag-max 라고 부름

Kafka Burrow

  • Consumer lag을 모니터링 하기 위한 오픈소스
  • multi-kafka cluster 지원
  • sliding window를 통한 consumer의 status 확인
  • http API 제공
profile
back-end developer

0개의 댓글