아파치 카프카 구성요소 및 핵심 기능 6가지에 대해 설명합니다. 구성요소로는 주키퍼, 클러스터, 브로커, 컨슈머, 토픽, 파티션, 세그먼트, 레코드 등이 있습니다.
아래는 카프카 공식 사이트입니다.
카프카 옵션 설정이 궁금하신 분은 아래 링크를 참고바랍니다.
목차
Toggle아파치 카프카 구성요소
- 주키퍼(ZooKeeper) : 아파치 프로젝트 어플리케이션 이름. 카프카의 메타데이터 관리 및 브로커의 정상상태 점검을 담당합니다.
- 카프카 또는 카프카 클러스터 : 여러 대의 브로커를 구성한 클러스터를 의미합니다.
- 브로커 : 카프카 애플리케이션이 설치된 서버 또는 노드를 말합니다.
- 프로듀서 : 카프카로 메시지를 보내는 역할을 하는 클라이언트입니다.
- 컨슈머 : 카프카에서 베시지를 꺼내가는 역할을 하는 클라이언트입니다.
- 토픽 : 카프카는 메시지 피드들을 토픽으로 구분하고, 각 토픽의 이름은 카프카 내에서 고유합니다.
- 파티션 : 병령 처리 및 고성능을 얻기 위해 하나의 토픽을 여러 개로 나눈 것을 말합니다.
- 세그먼트 : 프로듀서가 전송한 실제 메시지가 브로커의 로컬 디스크에 저장되는 파일을 말합니다.
- 메시지 또는 레코드 : 프로듀서가 브로커로 전송하거나 컨슈머가 읽어가는 데이터 조각을 말합니다.
리플리케이션
- replication-factor : 카프카 내 각 브로커에 동일 메세지를 몇 개 유지하겠다는 설정임. 3으로 설정하면 세 개의 브로커에 하나씩 존재함. 그래서 브로커가 종료되더라도 메세지는 그대로 유지하고 있습니다.
- 테스트 or 개발 환경 : 1로 설정합니다.
- 운영 환경(로그성 메시지로서 약간의 유실 허용) : 리플리케이션 팩터 수를 2로 설정합니다.
- 운영 환경(유실 허용하지 않음) : 리플리케이션 팩터 수를 3으로 설정합니다.
파티션
- 토픽 처리 성능을 높이기 위해 하나의 토픽에 대해 파티션을 여러 개 두어 병렬로 처리하게 만든 것입니다.
- 분산 처리 가능합니다.
- 파티션마다 컨슈머를 연결할 수 있습니다.
- 초기 파티션 수는 늘릴 수 있지만 중간에 줄일 수는 없습니다.
- 컨슈머의 LAG( = 프로듀서가 보낸 메시지 수(카프카에서 남아 있는 메시지 수) – 컨슈머가 가져간 메시지 수)를 통해 지연 여부를 확인할 수 있습니다.
- 아래는 적절한 파티션 수 산정 툴입니다. 하지만 참고용으로만 활용합니다.
Sizing Calculator for Apache Kafka and Confluent Platform
세그먼트
- 프로듀서는 카프카의 sample01 토픽으로 메시지를 전송합니다.
- sample01 토픽은 파티션이 하나일 경우, 프로듀서로부터 받은 메시지를 파티션0의 세그먼트 로그 파일에 저장합니다.
- 브로커의 세그먼트 로그 파일에 저장된 메시지는 컨슈머가 읽어갈 수 있습니다.
카프카의 핵심 개념
- 높은 처리량, 빠른 응답 속도, 안정성의 이점이 있습니다.
1. 분산 시스템
- 확장이 용이하게 가능한 분산시스템을 구축을 지원합니다.
2. 페이지 캐시
- 페이지 캐시는 직접 디스크에 읽고 쓰는 대신 물리 메모리 중 애플리케이션이 사용하지 일부 잔여 메모리를 활용합니다.
- 디스크 I/O에 대한 접근이 줄어들어 성능을 높일 수 있습니다.
3. 배치 전송 처리
- 데이타를 개별로 보내는 것보다 묶음으로 보내면 전체적으로 전송 속도 증가와 오버헤드 감소 효과가 있습니다.
4. 압축 전송
- 전송 데이타 압축을 통해 전송 속도를 높일 수 있습니다.
5. 토픽, 파티션, 오프셋
- 토픽은 병렬처리를 위해 여러 개의 파티션으로 전달될 수 있습니다.
- 오프셋(offset) : 파티션의 메시지가 저장되는 위치입니다.
6. 고가용성 보장
- 토픽 자체가 아닌 토픽의 파티션을 복제합니다.
- 리더/팔로우 수로 지정합니다.
- 리플리케이션 팩터 수 : 2 설정 시 (리더 1, 팔로워 1), 3 설정 시 (리더 1, 팔로워 2), 4 설정 시 (리더 1, 팔로워 3)
- 리플리케이션 수 3을 추천합니다.
7. 주키퍼의 의존성
- 살아 있는 노두 수가 과반수 이상 유지될 경우 지속적인 서비스가 가능한 구조라 반드시 홀수로 구성해야 합니다.
- 지노드 znode : 카프카의 메타 정보가 주키퍼에 기록되며, 주키퍼는 이러한 지노드를 이용해 브로커의 노드 관리, 토픽 관리, 컨트롤러 관리 등 매우 중요한 역할을 하고 있습니다.
- 아파치 카프카 구성요소 간 의존성 문제가 있어 주키퍼는 사라질 것입니다.
이상 아파치 카프카 구성요소에 대해 알아봤습니다.
좀 더 자세한 설명을 원하시는 분은 여기 링크로 ‘실전 카프카 개발부터 운영까지’ 책을 사서 보시길 추천드립니다.
참고 : 실전 카프카 개발부터 운영까지
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”