티스토리 뷰
반응형
[카프카, 데이터 플랫폼의 최강자 - www.yes24.com/Product/Goods/59789254]
- 카프카 : 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼
- 빅데이터를 분석할 때 여러 스트리지와 분석 시스템에 데이터를 연결하기 위한 필수도구
1.1/ 카프카의 탄생 배경
- 카프카 도입 당시 링크드인의 서비스 유지에 필요했던 것들
- 메트릭 모니터링용 데이터 시스템 : 미터링(사용량, 응답 시간, 에러카운트 등) 저장할 시계열(Time Serie) 데이터 처리용 시스템
- 로그 모니터링용 데이터 시스템 : 로그 저장, 실시간/배치로 분석할 수 있도록 데이터를 저장
- 메인 데이터 시스템 : OLTP(OnLine Transaction Process) 쿼리 실행
- key-value storage : 실시간으로 처리해줘야하는 내용 저장
- 데이터 웨어하우스 : 데이터를 모아 제공 or 배치 분석
- 하둡 시스템 : 빅데이터 저장/처리, ETL(Extract, Transform, Load) 작업을 함
- end-to-end 연결 방식의 아키텍처의 문제점
- 실시간 트랜잭션(OLTP) 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없으니 복잡도가 증가한다
- 데이터 파이프라인 관리가 어렵다
- 카프카의 탄생
- 모든 시스템으로 데이터를 전송할 수 있고, 준 실시간 처리도 가능하며, 급속도로 성장하는 서비스를 위해 확장이 용이한 시스템을 직접 만들기로 함
- 목표
- 프로듀서와 컨슈머의 분리
- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용
- 높은 처리량을 위한 메시지 최적화
- 데이터가 증가함에 따라 스케일아웃이 가능한 시스템
- 카프카 적용
- 사내에서 발생하는 모든 이벤트/데이터의 흐름을 중앙에서 관리하는 카프카를 적용해 아키텍처가 깔끔해졌음
- 달라진 점
- 카프카가 전사 데이터 파이프라인으로 동작하기 때문에 모든 데이터 스토어와 여기서 발생하는 데이터이벤트가 카프카를 중심으로 연결되어 있음
- 새로운 데이터 스토어가 들어와도 서로 카프카가 제공하는 표준 포맷으로 연결되어 있어서 데이터를 주고받는 데 부담이 없음
- 신뢰성 높은 데이터 분석뿐만 아니라 실시간 분석도 할 수 있게 됨
- 카프카의 지향점
- 카프카를 메시지 전달의 중앙 플랫폼으로 두고 기업에서 필요한 모든 데이터 시스템 뿐만 아니라 마이크로서비스, SaaS 등의 서비스 등과 연결된 파이프라인을 만드는 것을 목표로 두고 개발되었음
1.2/ 카프카의 동작 방식과 원리
- 메시징시스템
- 메시지 : 데이터 단위
- 토픽 : 카프카의 메시지 저장소, 식별자
- 퍼블리셔(publisher)/프로듀서(producer) : 메시지를 토픽에 데이터를 저장
- 서브스크라이버(subscriber)/컨슈머(consumer) : 원하는 토픽에서 데이터를 가지고 감
- pub/sub 모델 : 중앙에 메시징 시스템 서버를 두고 메시지를 보내고(publish) 받는(subscrie) 형태의 통신
- 비동기 메시징 전송 방식
- 발신자의 메시지에는 수신자가 정해져 있지 않은 상태로 발행됨
- 구독을 신청한 수신자만이 정해진 메시지를 받을 수 있음
- 다이나믹한 네트워크 토폴로지와 높은 확장성을 확보할 수 있음
- pub/sub이 아닌 일반적인 통신
- 전송 속도가 빠르고 전송 결과를 신속하게 알 수 있음
- 특정 개체에 장애가 발생한 경우 메시지를 보내는 쪽에서 대기 처리 등을 개별적으로 해주지 않으면 장애가 발생할 수 있음
- 확장성이 좋지 않음
- pub/sub 모델
- 특징
- 프로듀서가 메시지를 컨슈머에게 직접 전달하는 게 아닌 중간의 메시징 시스템에 전달
- 메시지 데이터와 수신처 ID를 포함시켜서 전달
- 메시징 시스템의 교환기가 메시지의 시신처 ID 값을 확인한 다음 컨슈머들의 큐에 전달
- 컨슈머는 자신의 큐를 모니터링하고 있다가 큐에 메시지가 전달되면 이 값을 가져감
- 장점
- 개체가 하나 빠지거나 수신 불능 상태가 되어도 메시징 시스템만 살아있으면 메시지가 유실되지 않음
- 확장성이 용이
- 교환기(exchanger)의 룰에 의해서 데이터가 수신처의 큐에 정확하게 전달되므로 메시지 데이터 유실의 염려가 없음
- 단점
- 메시지가 정확하게 전달되었는지 확인하려면 코드가 좀 더 복잡해짐
- 메시지 전달 속도가 빠르지 않음
- 특징
- 기존 pub/sub 모델
- 간단한 이벤트(수 kb 정도의 크기)를 서로 전송하는 데 주로 사용됨
- 메시징 시스템 내부 교환기의 부하, 컨슈머들의 큐 관리, 메시지의 정합성, 전달 결과 관리하는 내부 프로세스가 다양하고 복잡해서
- 신뢰성에 중점을 맞췄기 때문에 속도와 용량은 중요하지 않았음
- 간단한 이벤트(수 kb 정도의 크기)를 서로 전송하는 데 주로 사용됨
- 카프카
- 메시지 교환 전달의 선뢰성 관리를 프로듀서와 컨슈머 쪽으로 넘김
- 부하가 많이 걸리는 교환기 기능 역시 컨슈머가 만들 수 있게 함
- 메시징 시스템 내에서의 작업량을 줄이고 메시징 전달 성능에 집중
=> 고성능 메시징 시스템을 만들어 냄
- 카프카의 메시지 전달 순서
- 프로듀서는 새로운 메시지를 카프카로 보냄
- 프로듀서가 보낸 메시지는 카프카에 컨슈머 큐(토픽)에 도착해 저장됨
- 컨슈머는 카프카 서버에 접속하여 새로운 메시지를 가져감
1.3/ 카프카의 특징
- 프로듀서와 컨슈머의 분리
- 메시지 전송 방식 중 메시지를 보내는 역할과 받는 역할이 완벽하게 분리된 pub/sub 방식 적용
- 각각의 서비스 서버들은 모니터링이나 분석 시스템의 상태 유무와 관계없이 카프카로 메시지를 보내는 역할 수행
- 모니터링이나 분석 시스템들도 서비스 서버들의 상태유무와 관계없이 카프카에 저장되어 있는 메시지만 가져오면 됨
- 서버 추가에 대한 부담도 줄일 수 있음
- 메시지 전송 방식 중 메시지를 보내는 역할과 받는 역할이 완벽하게 분리된 pub/sub 방식 적용
- 멀티 프로듀서, 멀티 컨슈머
- 카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있음
- 데이터 분석 및 처리 프로세스에서 하나의 데이터를 다양한 용도로 사용하는 요구들을 손쉽게 충족할 수 있음
- 중앙집중현 구조로 구성 가능
- 카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있음
- 디스크에 메시지 저장
- 카프카는 컨슈머가 메시지를 읽어 가더라도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장해둔다
- 컨슈머는 메시지 손실 없이 메시지를 가져갈 수 있음
- 멀티 컨슈머가 가능해짐
- 확장성
- 카프카는 확장이 매우 용이하도록 설계되어 있음
- 높은 성능
* 카프카 용어 정리
- 카프카(kafka) : 아파치 프로젝트 애플리케이션 이름, 클러스터 구성이 가능하며 카프카 클러스터라고 부름
- 브로커(broker) : 카프카 애플리케이션이 설치되어 있는 서버 또는 노드
- 토픽(topic) : 프로듀서와 컨슈머들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임으로 사용
- 파티션(partition) : 병렬처리가 가능하도록 토픽을 나눌 수 있고 많은 양의 메시지 처리를 위해 파티션 수를 늘려줄 수 있음
- 프로듀서(producer) : 메시지를 생산하여 브로커의 토픽 이름으로 보내는 서버 또는 애플리케이션 등
- 컨슈머(consumer) : 브로커의 토픽 이름으로 저장된 메시지를 가져가는 서버 또는 애플리케이션 등
1.4/ 카프카의 확장과 발전
- 서비스 기반 아케텍처(SOA, Service Oriented Architecture)
- 엔터프라이즈 서비스 버스(ESB, Enterprise Service Bus)
- 다양한 시스템과 연동하기 위한 멀티 프로토콜과 데이터 타입 지원
- 느슨한 결합을 위한 메시지 큐 지원
- 정기적으로 데이터를 가져오는 대신 이벤트 기반 통신 지향
- SOA는 업무를 서비스라는 단위로 쪼개고, 각 서비스 간의 연결은 ESB를 통해 연결한다는 철학 지향
- 엔터프라이즈 서비스 버스(ESB, Enterprise Service Bus)
- 기업에서 사용하고 있는 예시
- 링크드인
- 넷플릭스
- 패브릭
1.5/ 정리
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- IntelliJ
- linuxkit
- 자바스크립트
- gradle
- docker pull limit
- 도메인주도설계
- Spring
- 도커
- Kubernetes
- QuickTimePlayer
- 코틀린
- back merge
- ImagePullBackOff
- docker for mac
- JavaScript
- k8s
- 스프링부트
- clean code
- 쿠버네티스
- kotlin
- 클린코드
- 자바
- springboot
- ddd
- java
- gasmask
- kotlin In Action
- 스프링
- cacheable
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함