-
[Kafka] Kafka Architecture📖 개발 공부/kafka 2023. 1. 14. 01:46
카프카란?
링크: https://ibm-cloud-architecture.github.io/refarch-eda/technology/kafka-overview/ - 스트리밍 데이터를 다루기 위한 미들웨어와 그 주변 생태계
- 분산형 스트리밍 플랫폼(A distributed streaming platform)으로써 분산환경에 특화되어 있는 특징이 있다.
- 메시지를 특정 수신자에게 직접적으로 보내는 것이 아닌, 메시지를 받기 원하는 곳에서 해당 토픽을 구독함으로써 메시지를 읽는다.
카프카의 구성
Broker(브로커)
- Kafka에서 데이터를 수신, 전달하는 서비스이자 실행되는 Kafka Application Server
- 카프카 애플리케이션이 설치되어 있는 서버 또는 노드다.
- 하나의 Server 당 하나의 데몬 프로세스로 동작한다.
- 보통 가용성을 위해 3 Node Broker로 구성한다.
Zookeeper(주키퍼) 자세히 보기
- 분산 코디네이션 시스템, Broker와 1:1 로 구성 (마찬가지로 주로 3 Node Zookeeper 구성)
- Broker는 상태를 저장하지 않는다. -> Zookeeper를 사용해 클러스터 상태 유지한다. (메타정보 저장)
- Broker 내 Partition에서의 Leader(Master) 브로커를 선출한다.
- Broker의 존재/실패 관련한 정보를 Producer/Consumer에게 전달한다.
Topic(토픽)
- 프로듀서와 컨슈머들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임으로 사용한다.
- 카프카에 저장되는 메시지는 topic으로 분류되고, topic은 여러개의 patition으로 나눠질수 있다.
Partition(파티션)
https://ibm-cloud-architecture.github.io/refarch-eda/technology/kafka-overview/ - 토픽을 구성하는 데이터 저장소로서 수평 확장이 가능한 단위(토픽을 분할)
partition 안에는 message의 상대적 위치를 내타내는 offset이 있는데 이 offet 정보를 이용해 이전에 가져간 메시지의 위치 정보를 알 수 있고 동시에 들어오는 많은 데이터를 여러개의 파티션에 나누어 저장하기 때문에 병렬로 빠르게 처리할 수 있다.
→ 병렬처리가 가능하도록 토픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해 파티션 수를 늘릴 수 있다. - 무조건 파티션 수를 늘려야 하나?
- 파일 핸들러의 낭비
- 각 파티션은 브로커의 디렉토리와 매핑되고, 저장되는 데이터마다 2개의 파일(인덱스와 실제 데이터)가 있다.
- 카프카에서는 모든 디렉토리의 파일들에 대해 파일 핸들을 열게 되는데, 파티션 수가 많을 수록 파일 핸들 수가 많아져 리소스를 낭비하게 된다.
- 장애 복구 시간 증가
- 카프카는 높은 가용성을 위해 리플리케이션을 지원한다.
- 브로커에는 토픽이 있고, 토픽은 여러 개의 파티션으로 나뉘어 있다.
→ 각 파티션마다 레플리케이션이 동작하게 된다.
→ 브로커에는 여러 개의 파티션이 존재한다. - 브로커가 다운되면, 해당 브로커에 있는 리더가 있는 파티션은 일시적으로 사용할 수 없게 된다
- 카프카는 리더를 팔로워 중 하나로 이동시켜 클라이언트 요청을 처리할 수 있게 한다.
- (이와 같은 장애 처리는 컨트롤러로 지정된 브로커가 수행한다.)
- 파일 핸들러의 낭비
- 카프카에서 파티션 수를 줄이는 방법은 제공하지 않는다. → 토픽 삭제 방법 외에는 해결책이 없다.
- 적은 파티션으로 운영해보고, 병목 현상이 발생할 때 늘리자!
Offset(오프셋)
각 파티션마다 메시지가 저장되는 위치, 파티션 내에서 유일하고 순차적으로 증가하는 숫자(64비트) 형태로 되어있다.
- 파티션마다 유니크한 값을 가지며 카프카에서 이를 오프셋이라고 한다. 오프셋은 하나의 파티션 내에서만 유일한 숫자이다.
- 카프카에서는 이 오프셋을 이용해 메세지의 순서를 보장한다.
Producer(프로듀서)
메시지를 생산하여 브로커의 토픽 이름으로 보내는 서버 또는 애플리케이션
Consumer(컨슈머)
브로커의 토픽이름으로 저장된 메시지를 가져가는 서버 또는 애플리케이션
🔗 참고 링크
Apache Kafka 란 무엇인가요?
홈 Reference Center 관련 용어 Apache Kafka 란 무엇인가요? Apache Kafka는 빠르고 확장 가능한 작업을 위해 데이터 피드의 분산 스트리밍, 파이프 라이닝 및 재생을 위한 실시간 스트리밍 데이터를 처리하
www.tibco.com
카프카(Kafka)의 이해
대용량 게임로그 수집을 위해 Elastic Stack을 도입하게 되었는데, 중간에 버퍼역할(메시지큐)을 하는 Kafka에 대서 알아보려고 한다. 메시지큐? 메시지 지향 미들웨어(Message Oriented Middleware: MOM)은 비
team-platform.tistory.com
LINE에서 Kafka를 사용하는 방법 - 1편
참고. 이번 블로그는 LINE DEVELOPER DAY 2018에서 Yuto Kawamura 님이 발표한 ‘Multi-Tenancy Kafka cluster for LINE services with 250 billion...
engineering.linecorp.com
Kafka Overview - IBM Automation - Event-driven Solution - Sharing knowledge
Kafka Overview In this article we are summarizing what Apache Kafka is and grouping some references, notes and tips we gathered working with Kafka while producing the different assets for this Event Driven Architecture references. This content does not rep
ibm-cloud-architecture.github.io
반응형'📖 개발 공부 > kafka' 카테고리의 다른 글
[Kafka] Spring Kafka JSON Batch (0) 2023.03.26 [Kafka] Commit (0) 2023.03.26 [Kafka] reset offset (0) 2023.02.25 [Kafka] Rebalancing (리밸런싱) (0) 2023.01.31 [Kafka] Partition 딥다이브 (0) 2023.01.18