Apache Kafka 1
💿 카프카의 탄생
아키텍쳐가 거대해지고 소스 애플리케이션과 타깃 App의 개수가 점점 많아지면서 서로를 연결하는 파이프라인의 개수가 많아 졌다. 그러ㅕ면서 소스코드 및 버전 관리에서 이슈가 생겼다 그리고 타깃 App에 장애가 상길 경우 그 영향이 소스 App에 그대로 전달되었다.
즉 파편화된 데이터 파이프라인은 치명적이었다. 링크드인 데이터 팀은 신규 시스템을 만들어 데이터 파이프라인의 복잡도를 낮추기로 했고 그렇게 개발된 카프카를 통해 여러 Web, App, Sensor등에서 취합한 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있게 되었다.
즉 카프카는 기업의 대용량 데이터를 수집하고 이를 사용자들이 실시간 스트림으로 소비할 수 있게 만들어 주는 일종의 중추 신경으로 동작한다.
💿 특징
- 중앙에 카프카를 배치함으로서 소스 과 타깃 App 사이의 의존도를 최소화하여 커플링을 완화
- 즉 한 쪽의 이슈가 다른 한 쪽의 App에 영향(의존도)를 최소화
- 카프카를 통해 전달할 수 있는 데이터 포맷은 사실상 제한이 없음
- ByteArray로 통신하기 때문에 선언 가능한 모든 객체를 지원
- 즉 기본적으로 ByteArray, ByteBuffer 등의 타입에 대한 직렬화 역직렬화 클래스가 제공
💿 역할
- 서비스에서 발생하는 데이터를 데이터 레이크로 모음
- 파편화되고 복잡도가 올라갈 때 데이터를 추출, 변경, 적재하는 과정을 묶은 데이터 파이프라인을 구축
- 즉 데이터 파이프라인을 안정적이고 확장성 높게 운영하기 위한 방법
높은 처리량
카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.
- 네트워크 통신 횟수를 최소한으로 줄임(배치 처리)
- 대용량 실시간 로그데이터를 처리
- 여러 파티션에 분배하고 이를 병렬 처리할 수 있음
- 동일 시간당 데이터 처리량을 늘리는 것
확장성
가번적인 환경에서 안정적으로 확장 가능
- 브로커 개수를 자연스럽게(무중단 운영) 늘리거나 줄임(Scale-Out, Scale-In)
영속성
다른 메시징 플랫폼과 다르게 전송받은 데이터를 메모리에 저장하지 않고 파일 시스템에 저장
- 페이지 캐시 영역을 메모리에 따로 생성하여 사용(파일 시스템의 속도 개선)
고가용성
클러스터로 이루어진 카프카는 데이터의 복제(replication)를 통해 고가용성 특징을 가짐
- 서버를 직접 운영하는 온프레미스(on-premise) 환경의 서버 랙 또는 퍼블릭 클라우드(public cloud)의 리전 단위 장애에도 데이터를 안전하게 복제할 수 있는 브로커 옵션들이 있음
💿 데이터 레이크 아키텍쳐
레거시 아키텍쳐
- 데이터를 배치로 모으는 구조는 유연하지 못했으며 실시간으로 생성되는 데이터들에 대한 인사이트 서비스 App에 빠르게 전달하지 못한다는 단점이 있음
- 원천 데이터로부터 파생된 데이터의 히스토리를 파악하기가 어렵고 계속되는 데이터의 가공으로 인해 데이터가 파편화 되면서 데이터 거버넌스를 지키기가 어려워짐
람다 아키텍쳐
실시간 데이터 ETL 작업 영역을 정의한 아키텍쳐
- 레이어 구조
- 배치 레이어: 배치 데이터를 모아서 특정 시간, 타이밍 마다 일괄 처리
- 서빙 레이어: 가공된 데이터를 데이터 사용자, 서비스 애플리케이션이 사용할 수 있도록 데이터가 저장된 공간
- 스피드 레이어: 서비스에서 생성되는 원천 데이터를 실시간으로 분석
- 분석된 데이터는 직접 사용할 수 있지만 필요하면 서빙 레이어로 데이터를 보내서 저장하고 사용 가능
- 람다 아키텍처에서 카프카는 스피드 레이어에 위치한다.
- 카프카 스트림즈와 같은 스트림 프로세싱 도구는 분석을 위한 다양한 기능을 제공
- 하지만 레이어가 2개로 나뉘면서 분석 처리하는 로직이 2벌로 각각의 레이어에 따로 존재
- 배치 데이터와 실시간 데이터를 융합하여 처리할 때는 다소 유연하지 못한 파이프라인을 생성
카파 아키텍쳐
람다와 유사하지만 배치 레이어를 제거하고 모든 데이터를 스피드 레이어에 넣어서 처리
- 로직의 파편화, 디버깅, 배포, 운영 분리에 대한 이슈를 제거하여 더 효율 적임
- 서비스에서 생성되는 모든 종류의 데이터를 스트림 처리해야함 ___
💿 용어 정리
데이터 파이프라인: 엔드 투 엔드 방식의 데이터 수집 및 적재를 개선하고 안정성을 추구하며, 유연하면서도 확장 가능하게 자동화 한 것
데이터 레이크: 필터링이나 패키지화되지 않은 데이터가 저장되는 곳
영속성: 프로그램이 종료되더라도 사라지지 않은 데이터의 특성
데이터 ETL: 기업이 전 세계 모든 곳의 수많은 팀에서 관리하는 구조화된 데이터와 구조화되지 않은 데이터를 비롯한 전체 데이터를 가져와 비즈니스 목적에 실질적으로 유용한 상태로 변환하는 엔드 투 엔드 프로세스를 의미합니다.
배치 데이터: 초, 분, 시간, 일 등으로 한정된 기간 단위 데이터. 일괄 처리한다는 것이 특징(신입생 목록, 제품 목록)
스트림 데이터: 시작 데이터와 끝데이터가 명확히 정해지지 않은 데이터.(클릭 로그, 주식 정보, 센서 데이터)