대외활동/카엔프 SW 아카데미

카프카 기초

Debin 2023. 3. 29.
반응형

카프카란?

  • 아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼으로, 대용량의 실시간 데이터 스트림을 처리하기 위해 설계되었다.
  • 카프카는 대량의 데이터를 안정적이고 빠르게 처리할 수 있으며, 대규모 분산 시스템에서 확장성과 내결함성을 보장한다.
  • 소스애플리케이션과 타겟 애플리케이션의 결합도를 낮추기 위해 등장했다.

카프카 토픽

  • 카프카에서 데이터가 들어가는 공간을 토픽이라고 부른다.
  • 토픽은 여러 개를 생성할 수 있다. 목적에 따라 이름을 명확하게 적어야 유지보수가 편리하다.
  • 데이터베이스 테이블과 파일 시스템의 파일과 유사하다.
  • 카프카 프로듀서가 토픽에 데이터를 넣고, 카프카 컨슈머가 데이터를 가져간다.
  • 하나의 토픽은 여러 개의 파티션으로 구성된다.

파티션

  • 파티션은 0번부터 시작한다.
  • 파티션은 큐와 같이 선입선출이다. 즉, 토픽에 컨슈머가 붙으면 데이터를 가장 오래된 순서대로 가져온다.
  • 데이터가 파티션에 들어오지 않으면 컨슈머는 데이터가 들어올 때 까지 기다린다. pub-sub 방식인 것 같다.
  • 컨슈머가 파티션에서 데이터를 가져가도 파티션 내부의 데이터는 삭제되지 않는다.
  • 이 파티션의 남은 데이터는 새로운 컨슈머가 붙었을 때 0번부터 다시 가져갈 수 있다.
    여기에는 조건이 있는데 컨슈머 그룹이 달라야 하고 auto.offset.reset = earliest 설정을 주어야한다.
  • 이 파티션의 데이터를 엘라스틱 서치에 저장하기도 하고 하둡에 저장할 수도 있다.

파티션이 2개인 경우

  • 프로듀서가 데이터를 보낼 때 키를 지정할 수 있다.
  • 키가 null이고, 기본 파티셔너를 사용한다면 라운드 로빈으로 할당한다.
  • 키가 있고, 기본 파티셔너를 사용한다면 키의 해시 값을 구하고, 특정 파티션에 할당한다.
  • 참고로 파티션을 늘리는 것은 아주 조심해야 한다고 한다. 파티션은 다시 줄일 수 없기 때문이다.
  • 파티션을 늘리면 컨슈머의 개수를 늘려서 데이터 처리를 분산시킬 수 있다.
  • 파티션의 데이터가 삭제되는 타이밍은 옵션에 따라 다르다.

카프카 프로듀서

  • 데이터를 카프카에 보내는 역할을 한다.
  • 즉 데이터를 카프카 토픽에 생성하는 것이다.
  • 대량의 데이터를 실시간으로 적재할 때 프로듀서를 사용할 수 있다.

프로듀서의 역할

프로듀서는 총 3가지의 역할을 가지고 있다.

 

  1. Topic에 해당하는 메시지를 생성한다.
  2. 특정 Topic으로 데이터를 Publish한다.
  3. 카프카 브로커로 데이터를 전송할 때 전송 성공여부를 알 수 있고, 실패한다면 재시도한다.

카프카 브로커

  • 카프카 브로커는 카프카가 설치되어 있는 서버 단위를 말한다.
  • 보통 3개 이상의 브로커로 구성해 사용하는 것을 권장한다.

Replication

  • 레플리케이션(Replication)은 파티션의 복제를 뜻한다.
  • 레플리케이션이 1이면 파티션이 1개만 존재한다는 뜻이고, 레플리케이션이 2라면 파티션은 원본 1개와 복제본 1개로 총 2개가 존재하는 것이다. 마찬가지로 레플리케이션이 3이면 원본 1개와 복제본 3개가 존재하는 것이다.
  • 브로커에 따라 레플리케이션 개수가 제한된다. 브로커가 3대라면 레플리케이션은 4개가 될 수 없다.
  • 원본 파티션은 리더 파티션, 나머지 복제본 파티션은 팔로워 파티션이라고 부른다.
  • 리더 파티션, 팔로워 파티션을 합쳐서 ISR, In Sync Replica라고 볼 수 있다.
  • 레플리케이션은 파티션의 고가용성을 위해 사용된다.
  • 브로커 1개가 고장나면 해당 파티션은 복구할 수 없다. 그러나 레플리케이션을 사용해 브로커가 3대라면 브로커 1개가 죽더라도 팔로워 파티션이 존재하므로 복제본으로 복구가 가능하다. 그럼 나머지 1개가 리더 파티션의 역할을 수행하게 된다.
  • 레플리케이션 개수가 많아지면 브로커의 리소스 사용량도 늘어나므로 적절한 레플리케이션 개수를 설정해야 한다.
  • 3개 이상의 브로커를 사용하면 레플리케이션을 3으로 설정하는 것을 추천한다고 한다.

리더 파티션(Leader partition)과 팔로워 파티션(Follower partition)

  • 프로듀서가 토픽의 파티션에 데이터를 전달한다.
  • 이때 데이터를 전달 받는 주체가 리더 파티션이다.
  • 프로듀서에는 ack라는 상태 옵션이 있다.
  • ack는 0, 1, all 옵션 3개중 1개를 골라서 사용할 수 있다.
  • 0일 경우 리더 파티션에 데이터를 전송하고 데이터를 정상적으로 받았는지 응답 값을 받지 않는다. 나머지 파티션에 데이터가 복제되었는지 알 수 없다.
  • 1일 경우 리더 파티션에 데이터를 전송하고 데이터를 정상적으로 받았는지 응답 값을 받는다. 다만 나머지 파티션에 복제되었는지 알 수 없다.
  • all일 경우 데이터를 정상적으로 받았는지 응답 값을 받고, 팔로워 파티션에 복제되었는지 응답 값을 받는다.
    이 옵션을 사용하면 데이터 유실은 없다. 그러다 속도는 느리다.

카프카 컨슈머

  • 카프카에서는 컨슈머가 데이터를 가져가더라도 파티션의 데이터가 사라지지 않는다.

카프카 컨슈머 역할

  • 컨슈머의 역할은 크게 3가지다.
  • 첫 번째는 토픽의 파티션 내부에 있는 데이터를 가져오는 것이다. 이렇게 데이터를 가져오는 것을 폴링이라고 한다.
    메시지를 가져와서 특정 데이터베이스에 저장하거나 또 다른 파이프라인에 전달할 수 있다.
  • 두 번째는 오프셋 위치를 커밋할 수 있다. 오프셋이란 파티션에 있는 데이터의 번호를 뜻한다.
  • 세 번째는 컨슈머가 여러개일 경우 병렬 처리를 할 수 있다.

주키퍼

  • 카프카 주키퍼(Zookeeper)는 Apache 카프카(Kafka)에서 중앙 집중식 서비스로 사용되며, 클러스터 내의 브로커(Broker)를 관리하고 메시지 전달에 대한 메타데이터를 저장하는 역할을 한다.
  • 또한, 카프카 클러스터 내의 리더(Leader)와 팔로워(Follower)를 관리하여 분산 시스템의 일관성과 가용성을 보장한다.
  • 그러나 주키퍼는 단계적으로 deprecated 될 예정이라고 한다. Kraft로 대체될 예정이라고 한다.

참고자료

ChatGPT

아파치 카프카 애플리케이션 프로그래밍 with Java

https://www.youtube.com/playlist?list=PL3Re5Ri5rZmkY46j6WcJXQYRlDRZSUQ1j 

 

📝강의 - 아파치 카프카

빅데이터에서 가장 많이 쓰이는 아파치 카프카에 대한 강의입니다. [아파치 카프카 애플리케이션 프로그래밍 with 자바] 책 구매하러가기 👉http://www.yes24.com/Product/Goods/99122569

www.youtube.com

 

반응형

댓글