Kafka/Kafka

[Kafka] 카프카 기본 개념 - 브로커, 토픽, 파티션

seungh0 2022. 1. 9. 02:06
반응형

카프카 브로커


브로커란?

  • 카프카 클라이언트와 데이터를 주고받기 위해 사용되는 주체로, 데이터를 분산 저장하여 장애가 발생하더라고 안전하게 사용할 수 있도록 도와주는 애플리케이션.
  • 브로커 서버를 여러대로 구성하여, 클러스터로 묶어서 운영할 수 있다.
  • 카프카 클러스터로 묶인 브로커들은 프로듀서가 보낸 데이터를 안전하게 분산 저장하고 복제하는 역할을 수행한다.

데이터 저장, 전송

  • 프로듀서로부터 데이터를 전달받으면 카프카 브로커는 프로듀셔가 요청한 토픽의 파티션에 데이터를 저장하고 컨슈머가 데이터를 요청하면 파티션에 저장된 데이터를 전달한다.
  • 프로듀서로부터 전달받은 데이터는 파일 시스템에 저장된다.
    • 카프카는 메모리나 데이터베이스에 저장하지 않으며 따로 캐시 메모리를 구현하여 사용하지도 않는다.
    • 일반적으로 파일 시스템은 지속적으로 입출력할 경우 메모리에 올려서 사용하는 것보다 처리 속도가 현저히 느린데, 카프카는 페이지 캐시를 사용해서 디스크 I/O 속도를 높여 이러한 문제를 해결했다.
      (페이지 캐시란, OS에서 파일 I/O의 성능 향상을 위해 만들어 놓은 메모리 영역)

데이터 복제, 동기화

  • 데이터 복제는 카프카를 장애 허용 시스템으로 동작하도록 하는 원동력으로 매우 중요한 개념.
  • 클러스터로 묶인 브로커 중 일부에 장애가 발생하더라도 데이터를 유실하지 않고 안전하게 사용할 수 있도록 복제를 한다.
  • 카프카의 데이터 복제는 파티션 단위로 이뤄지는데, 토픽을 생성할 때 Replicaton factor옵션으로 복제 수를 설정할 수 있다. (Replication factor를 지정하지 않을 경우, 브로커에 설정된 옵션 값을 따라간다)
  • 복제 수는 1 (복제 수행 X) ~ 브로커의 수만큼 설정 가능.
    • 복제 수는 데이터가 일부 유실되어도 무관하고 데이터 처리 속도가 중요하다면 1 또는 2로 설정하고 데이터 유실이 일어나면 안 되는 데이터의 경우 복제 개수를 3으로 설정하여 최대 2개의 브로커에서 동시에 장애가 발생하더라도 데이터를 안정적으로 유지할 수 있도록 한다.

복제된 파티션은 리더와 팔로우로 구성된다.

  • 리더: 프로듀서 또는 컨슈머와 직접 통신하는 파티션
  • 팔로우: 나머지 복제 데이터를 가지고 있는 파티션

복제 동작 방식

  • 팔로우들은 리더 파티션의 오프셋을 확인하여 현재 자신이 가지고 있는 오프셋과 차이가 나는 경우, 리더 파티션으로부터 데이터를 가져와서 자신의 파티션에 저장한다.

장애 발생시 동작 방식

  • 3개의 브로커로 이루어진 카프카 클러스터 중 한 개의 브로커가 다운되면, 해당 브로커에 있는 리더 파티션은 사용할 수 없기 때문에 팔로우 파티션 중 하나가 리더 파티션 지위를 넘겨받는다. (이를 통해 데이터가 유실되지 않고 컨슈머나 프로듀서와 데이터를 주고받도록 동작할 수 있다.)

컨트롤러

  • 클러스터의 다수 브로커 중 한 대가 컨트롤러의 역할을 한다.
  • 컨트롤러는 다른 브로커들의 상태를 체크하고, 브로커가 클러스터에서 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 재분배한다.
  • 만약 컨트롤러 역할을 하는 브로커에 장애가 발생하면 다른 브로커가 컨트롤러 역할을 한다.

데이터 삭제

  • 카프카는 다른 메시징 플랫폼과 다르게 컨슈머가 데이터를 가져가더라도 토픽의 데이터는 삭제되지 않는다.
  • 또한 컨슈머나 프로듀서가 데이터 삭제를 요청할 수도 없다. (오직 브로커만이 데이터를 삭제할 수 있음)
  • 데이터 삭제는 파일 단위로 이루어지는데, 이 단위를 Log Segment라고 한다.
    • 세그먼트는 데이터가 쌓이는 동안 파일 시스템으로 열려있으며, 세그먼트 파일이 닫히게 되는 기본 값은 1GB 용량에 도달하는 경우 닫힌다. (설정에 따라 수정 가능)
    • 닫힌 세그먼트는 log.retention.bytes 또는 log.retention.ms 옵션에 설정값이 넘으면 삭제된다.
    • 닫힌 세그먼트 파일을 체크하는 간격은 카프카 브로커의 옵션에 설정된 log.retention.check.interval.ms에 따른다.

컨슈머 오프셋 저장

  • 컨슈머 그룹은 토픽이 특정 파티션으로부터 데이터를 가져가서 처리하고 이 파티션의 어느 레코드까지 가져갔는지 확인하기 위해 오프셋을 커밋한다. (커밋한 오프셋은 __consumer_offsets 토픽에 저장한다)
  • 여기에 저장된 오프셋을 토대로 컨슈머 그룹은 다른 레코드를 가져가서 처리한다.

코디네이터

  • 클러스터의 다수 브로커 중 한 대는 코디네이터의 역할을 수행.
  • 코디네이터는 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭 되도록 분배하는 역할을 한다.
  • 컨슈머가 컨슈머 그룹에서 빠지면 매칭 되지 않은 파티션을 정상 동작하는 컨슈머로 할당하여 끊임없이 데이터가 처리되도록 도와주며, 이렇게 파티션을 컨슈머로 재할당하는 과정을 리밸런스라고 부른다.

주키퍼

  • 주키퍼는 카프카의 메타데이터를 관리하는 데 사용된다.

 


토픽과 파티션


토픽 & 파티션의 관계

  • 토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위.
  • 토픽은 1개 이상의 파티션을 소유.
  • 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장된다. (이 데이터를 레코드라고 부름)

파티션

  • 파티션은 카프카의 병렬 처리의 핵심으로써, 그룹으로 묶인 컨슈머들이 레코드를 병렬로 처리할 수 있도록 매칭 된다.
  • 컨슈머의 처리량이 한정된 상황에서 많은 레코드를 병렬로 처리하는 가장 좋은 방법 컨슈머의 개수를 늘려 스케일아웃하는 것이다. 컨슈머 개수를 늘림과 동시에 파티션 개수도 늘리면 처리량이 증가하는 효과를 볼 수 있다.
  • 파티션은 FIFO 구조와 같이 먼저 들어간 레코드는 컨슈머가 먼저 가져가게 된다.
  • 카프카에서는 컨슈머가 데이터를 가져가더라도 삭제하지 않는다.
    • 이러한 특징으로 토픽의 레코드는 다양한 목적을 가진 여러 컨슈머 그룹들이 토픽의 데이터를 여러 번 가져갈 수 있다.

파티션의 특징 (순서)

  • 컨슈머가 토픽의 데이터를 가져가면 토픽의 모든 파티션으로붙어 동일한 중요도로 데이터를 가져가는데, 토픽에 넣은 데이터의 순서와 컨슈머가 토픽에서 가져간 데이터의 순서가 달라질 수 있다.
  • 만약 토픽에 넣은 데이터의 순서를 보장하고 싶다면 가장 좋은 방법은 파티션 1개로 구성된 토픽을 만드는 것이다. (한 개의 파티션 내에서는 데이터의 순서를 보장하기 때문)


레코드

  • 레코드는 타임스탬프, 메시지 키, 메시지 값, 오프셋, 헤더로 구성되어 있다.
  • 브로커에 한번 적재된 레코드는 수정할 수 없고, 로그 리텐션 기간 또는 용량에 따라서만 삭제된다.

타임스탬프

  • 프로듀서에서 해당 레코드가 생성된 시점의 유닉스 타임이 설정.

메시지 키

  • 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용.
  • 메시지 키를 사용하면 프로듀서가 토픽에 레코드를 전송할 때 메시지 키의 해시값을 토대로 파티션을 지정하게 된다.
    • 동일한 메시지 키라면 동일 파티션에 들어가는 것
    • 어느 파티션에 지정될지는 알 수 없고, 파티션의 개수가 변경되면 메시지 키와 파티션 매칭이 달라지게 되므로 주의해야 한다.
  • 메시지 키를 사용하지 않으면, null로 설정되며, 프로듀서 기본 설정 파티셔너에 따라서 파티션에 분배되어 적재된다.

메시지 값

  • 실질적으로 처리할 데이터가 들어가 있으며, 메시지 키와 메시지 값은 직렬화되어 브로커로 전송 되기 때문에 컨슈머가 이용할 때는 직렬 화한 형태와 동일한 형태로 역직렬화를 수행해야 한다.

레코드의 오프셋

  • 0 이상의 숫자로 이루어진 값으로, 브로커에 저장될 때 이전에 전송된 레코드의 오프셋 + 1 값으로 생성된다.
  • 오프셋은 카프카 컨슈머가 데이터를 가져갈 때 사용되며, 오프셋을 사용하면 컨슈머 그룹으로 이루어진 카프카 컨슈머들이 파티션의 데이터를 어디까지 가져갔는지 명확히 지정할 수 있다.

헤더

  • 레코드의 메타데이터 저장소 용도로 사용된다.

 

참고


http://www.yes24.com/Product/Goods/99122569

반응형