[카프카 핵심 가이드] 카프카 기본 개념설명
데이터 파이프라인을 잘 구축하는 것이 왜 중요할까?
데이터 파이프라인 구축이 중요한 이유는 데이터를 이동시키는데 더 적은 노력을 들일수록 핵심 비즈니스에 집중할 수 있기 때문이다.
카프카에서 데이터의 기본 단위는 메시지이며, 바이트의 배열로 이루어져있다. 메시지를 배치 단위로 저장하고 배치는 메시지들의 집합이다. 배치는 메시지를 쓸 때마다 네크워크 통신으로 발생하는 오버헤드를 줄이기 위한 것으로 지연량과 처리량 사이에 트레이드오프를 발생시킨다. 아파치 에이브로로 메시지 본체와 스키마를 분리한다. 스키마가 변경되더라도 코드 수정은 필요없다.
토픽과 파티션
메시지는 토픽 단위로 분류되며 토픽은 여러개의 파티션을 갖는다. 하나의파티션에서는 순서가 보장되지만 여러개의 파티션이 토픽 안의 전체 메시지에 대해서는 순서를 보장하지 않는다. 파티션은 카프카가 데이터 중복과 확장성을 제공하는 방법이기도 하다. 각 파티션이 서로 다른 서버에 저장될 수 있기에 하나의 토픽이 여러 개의 서버로 수평적으로 확장할 수 있고 파티션 복제도 가능하여 서로 다른 서버가 동일한 파티션의 복제본을 저장하고 있다. 분산 플랫폼인 이유이기도 하다.
프로듀서와 컨슈머
프로듀셔는 발행자, 작성자라고 불린다. 메시지 키와 키값의 해시를 특정 파티션으로 대응시켜주는 것은 파티셔너를 통해 구현된다. 커스튬 파티셔너도 가능하다. 컨슈머는 구독자, 독자라고 불린다. 컨슈머 그룹의 일원으로 작동한다. 이를 통해 대량의 메시지를 읽기 위해 컨슈머를 수평확장할 수 있다. 또한, 컨슈머 중 하나에 장애가 발생하더라도 그룹 안의 다른 컨슈머가 재할당받아 데이터를 읽어올 수 있다.
브로커와 클러스터
카프카 서버를 브로커라고 부르며 여러개의 브로커를 띄울 수 있다. 브로커는 클러스터의 일부이다. 하나의 클러스터 안에 여러 개의 브로커가 포함될 수 있으며 하나의 브로커가 클러스터의 역할을 하게 된다. 클러스터 역할이란 파티션을 브로커에 할당해주거나 장애가 발생한 브로커를 모니터링하는 등의 관리 기능을 담당한다. 브로커는 리더와 팔로워로 구분되며 복제 기능은 리더 브로커에 장애 발생 시 팔로워가 리더 역할을 이어받을 수 있게 하는 것이다. 프로듀서는 리더 브로커에 메시즈를 발행해야하고 컨슈머는 팔로워나 리더 중 하나로 데이터를 읽어올 수 있다.
다중 클러스터
미러메이커 툴을 사용해서 클러스터끼리의 데이터 복제도 가능하다. 기본적으로는 클러스터 내에서만 데이터 복제가 가능하다.