Apache Kafka 교육

4 minute read

아파치 카프카 교육

강사 - 최원영 (카카오 데이터 엔지니어)

커리큘럼 - 2박 3일간 진행된 교육 내용

로컬 카프카 설치 및 카프카 CLI 실습  
프로듀서 애플리케이션 개발실습  
컨슈머 애플리케이션 개발 실습  

카프카 스트림즈 개념  
카프카 스트림즈 애플리케이션 실습  
카프카 커넥트 개념   
카프카 커넥트 운영  
오픈소스 몽고디비 카프카 싱크 커넥터 개발 실습  

멱등성 프로듀서 트랙잭션 카프카 설명 및 실습  
컨슈머 랙 개념 설명 버로우 소개  
스프링 카프카 기본개념 설명 및 실습  
웹페이지 이벤트 적재 파이프라인 실습  
커리큘럼 복습   

카프카 요약(중요)

카프카 기본 개념

  • 카프카: 클러스터를 포함한 이벤트 스트림 프로세싱 아키텍처
  • 브로커: 카프카 클러스터의 서버 중 하나. 데이터를 저장하고 전달하는 역할.
  • 토픽: 카프카 클러스터에서 데이터를 구분하는 단위, 토픽은 최소 1개 이상의 파티션을 가지고있음.
  • 파티션 : 토픽에서 데이터를 논리적으로 구분하는 단위
  • 레코드 : 메시지를 담는 가장 작은 크기.
  • 오프셋 : 프로듀서가 보낸 데이터가 브로커에 저장되었을 때 받는 고유한 번호.
  • 타임스탬프 : 레코드가 프로듀서에서 생성되었을 때 시간(또는 브로커에 적재된 시간).
  • 헤더: 레코드의 특징을 담는 키/값 저장소.
  • 메시지 키 : 데이터를 구분하는 값. 파티셔너는 메시지 키를 토대로 파티션을 지정.
  • 메시지 값: 실질적으로 처리하고자 하는 데이터.
  • ISR : 동기화가 완료된 리더, 팔로워 파티션 묶음.

카프카 프로듀서

  • 카프카 프로듀서 : 카프카 브로커로 데이터를 전달하는 역할을 하는 애플리케이션
  • 파티셔너 : 메시지 키를 토대로 파티션을 지정하는 class, 커스텀 클래스틀 사용하여 로직 변경가능.
  • 어큐물레이터 : 레코드 전송시 배치로 묶는 역할.
  • acks 레코드를 카프카 클러스터로 전송시 전달 신뢰성을 지정.
  • min.insync.replicas : acks =all 일 경우 최소 적재 보장 파티션 개수
  • enable.idempotence: 멱등성 프로듀서로 동작하기 위해 설정하는 옵션.
  • transactional.id : 트랜잭션 프로듀서로 동작하기 위해 설정하는 옵션.

카프카 컨슈머

  • 카프카 컨슈머 : 카프카 클러스터에 저장된 레코드를 받아와서 처리하는 애플리케이션
  • 컨슈머 그룹 : 동일한 역할을 하는 컨슈머들의 묶음
  • 컨슈머 랙 : 파티션에서 가장 최근의 레코드 오프셋과 컨슈머 오프셋간의 차이
  • 커밋 : 컨슈머가 레코드처리가 완료되었을 경우 카프카 클러스터에 마지막으로 읽은 레코드의 오프셋 번호를 저장하는 작업.
  • 리밸런싱 : 컨슈머 그룹에서 컨슈머 개수의 변화 또는 파티션 개수의 변화로 인해 할당이 변경되는 작업.
  • auto.offset.reset : 컨슈머 그룹이 없을 경우 처음 읽을 오프셋의 위치를 지정하는 옵션.
  • isolation.level : 트랜잭션이 완료된 레코드를 읽을 것인지 판단하는 옵션.

카프카 스트림즈

  • 카프카 스트림즈 : 상태/비상태 기반 스트림 데이터 처리를 수행하는 애플리케이션
  • 태스크 : 스트림즈 애플리케이션 내부에서 생성되어 로직을 수행하는 최소 단위
  • 프로세서 : 데이터를 가져오거나, 처리하거나, 내보내는 노드
  • 스트림 : 프로세서로 부터 처리된 데이터를 다른 프로세스로 전달되는 레코드
  • 스트림DSL : 추상화되어 스트림 프로세싱에 필요한 메서드들을 정의한 메서드들의 모음
  • 프로세서API : 스트림즈DSL에서 구현할 수 없는 로직을 구현할 때 사용하는 API.
  • KStream : 레코드의 흐름, 컨슈머의 poll()과 유사.
  • KTable : 특정 파티션의 메시지 키를 기준으로 가장 최근의 레코드들의 묶음.
  • GlobalKTable : 모든 파티션의 메시지 키를 기준으로 가장 최근의 레코드들의 묶음.
  • 코파티셔닝: 동일한 파티션 개수, 동일한 파티셔닝 전략을 통해 레코드가 저장된 서로 다른 2개의 토픽

카프카 커넥트

  • 카프카 커넥트 : 카프카 기반 데이터 파이프라인을 반복적으로 생성할 때 사용하는 애플리케이션.
  • 소스 커넥터 : 특정 파일 또는 소스 애플리케이션으로부터 토픽으로 데이터를 보내는 프로듀서,
  • 싱크 커넥터 : 토픽에서 특정 파일 또는 소스 애플리케이션으로 데이터를 보내는 컨슈머.
  • 오픈소스 커넥터 : 소스/싱크 커넥터를 사용할 수 있도록 jar형태로 배포하는 커넥터.
  • 태스크 : 커넥터에서 데이터를 처리하는 최소 로직단위.
  • 단일 모드 : 디버깅, 테스트용으로 적합한 프로세스 단위 커넥트
  • 분산 모드 : 상용환경 운영에 적합한 멀티프로세스 단위 커넥트

교육 후기

MSA 환경에서 사용되는 메시지 큐 방식으로 교육과정 중 주로 서비스에 대한 명확한 구조를 파악하고 설계에 대한 개념이 어느정도 수준에 도달했을 경우에 각 기능에 맞춰 구성할 수 있는 부분이 많았다. 주로 교육내용은 다양한 구조에서 메시지 큐 형태를 활용할 수 있는 형태로 내용이 진행되었으며

Deep한 내용도 물론있었지만 다양한 케이스별 실습의 내용으로 진행되어 다양한 환경에서 구성하는 방법에 대한 내용이 인상깊었다. 그리고 이러한 개념이 확립이되면 스프링 카프카실습을 통해 빠르고 쉽게 활용할 수 있음을 알게 되었다.
MSA 환경 및 메세지 큐 동작방식에서 확실히 데이터 전송 및 구성에 따라 용이하고 강력한 메세지 큐임을 알수 있게되었다. 
확실히 3일간의 교육으로는 부족한 것 같아 좀 더 공부를 해봐야할 것같다.

기타 내용

카프카 FIFO구조 큐 구조와 유사

(사용잘안함)스트림즈 - (사용잘안함)커넥트 소스 -> mysql aws s3 (사용잘안함)커넥트 싱크 -> jdbc, 엘라스틱서치

빅데이터 파이프라인에 적합한 카프카

여러 파티션에 분배하고 데이터를 병렬처리 할 수 있다. 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송 카프카의 스케일 아웃 스케일 인 무중단 운영 지원함.

카프카 4가지 특징

  • 고가용성, 높은 처리량, 확장성, 영속성
  • 카파 아키텍처

    스트리밍데이터레이크 람다 아키텍처

토픽 카프카(Kafka)는 데이터를 최종적으로 토픽(Topic)이라는 곳에 저장을 하며 데이터를 구분하기 위한 분류값 혹은 구분된 저장소라 이해하면 된다

파티션(Partition) 카프카의 저장소명을 토픽이라 한다면 파티션은 저장소 안에 분리되어진 공간이다.

토픽이름 작명은 신중해야한다. 변경안됨 무조건다시생성

레코드

  • 타임스태프: 브로커에 저장된 시간 필요에 따라변경할 수 있다.
  • 헤더: 레코드의 특징(스키마, 버전 등)을 나타내고 사용할 수 있는 키/값 저장소.
  • 메시지 키: 메시지 값의 종류를 나타내거나 순서를 보장하고 싶을 경우 사용. 지정하지 않으면 null.
  • 메시지 값: 실질적으로 처리하고자 하는 메시지가 담는 곳
  • 오프셋 : 브로커로 저장된 레코드는 저장된 파티션에서 고유한 번호를 가지는데 이것이 오프셋이다. 0 이상의 숫자로 이루어져 있으며 컨슈머가 토픽으로부터 레코드를 어디까지 가져갔는지 확인할때 사용

카프카 스트림즈 2021년 카카오 이프에서 최초상용적용 해봄 스트림즈 라이브러리를 통해 제공하는 다 한번의 데이터 처리 장애허용시스템 등의 특징들은 컨슈머와 프로듀서의 조합만으로는 완벽하게 구현하기는 어렵다.

스레드는 1개이상생성가능 스레드 안에 태스크 역시 1개이상 생성가능함.

파티션은 태스크와 1:1 구조임

스케일아웃이 자동으로 할당됨 장애시 유용한 기능제공함.

토폴로지

링형 트리형 성형 3가지가있음. 스트림즈는 트리형 토폴로지와 유사한구조임.

Comments