정리용 간단용어설명
[K] : Kafka, 카프카
(D) : DATA, 데이터
[P] : Producer, 프로듀서
[C] : Consumer, 컨슈머
Kafka는 링크드인의 장애를 막으려고 만들었다
Source APP : Target APP
1 : 1 로 대응되는 시스템관계에서 시스템이 확장되면 → N : M 까지 사이즈가 커짐
이때 장애가 발생한다면? 하나의 시스템에 연동된 모든 APP에 장애가 발생하는 상황이 되는거임
초기 Linkedin에서는 N개의 Source APP ⇒ M개의 Target APP 의 관계를 가지고 있었는데
중앙 시스템이 없다보니, 프로그램 관리가 너무 힘들엇음
Kafka는 내부 데이터 흐름 개선을 위해서 만들었다
메세지 큐 구조
카프카는 다음과 같은 구조를 가지고있다
[Producer] → (DATA) → [KAFKA QUEUE] → (DATA) → [Consumer]
프로듀서 : 큐에 데이터를 보내는 것
컨슈머 : 큐에서 데이터를 가져가는 것
프로듀서가 Kafka에 Data를 보낼때, 데이터가 FIFO 형식으로 적재된다
프로듀서가 데이터를보내면, 여러개의 파티션 중 1개에만 저장됨
컨슈머가 파티션에서 데이터를 가져가도, 파티션 내의 DATA는 없어지지 않는다
카프카의 특징 4가지
- 높은 처리량많은양의 데이터를 묶고, 이를 배치(묶음단위) 로 처리할수 있고
여러 파티션에 분배하고 데이터를 병렬처리할수도 있다여담으로, 하나의 프로듀서는 하나의 파티션에만 데이터를 보낼수 있고,
하나의 컨슈머는 여러개의 파티션에서 데이터를 받을수 있다 - 파티션 갯수만큼 컨슈머 갯수를 늘려서, 동일시간당 데이터처리량 늘리는것도 가능하다
- [Producer] → (DATA) → [QUEUE] → (DATA) → [Consumer] 에서
Producer, Consumer가 데이터를 보내고받을때, DATA를 모두 묶어서 전송한다.
많은양의 데이터를 송수신할때 생기는 네트워크비용은 무시할수 없다. - 확장성데이터의 양이 많아지면 브로커의 갯수를 늘려서 (스케일아웃, Scale OUT) 확장시킬수 있게 해놨고,
데이터의 양이 적어지면 브로커의 갯수를 줄여서 (스케일인, Scale IN) 규모를 축소시킬수 있게 해놨다 - 파이프라인을 구성할때 생각해야할것중 하나는 ‘데이터가 얼마나 들어오고, 이를 손실없이 처리하려면 어떻게 해야할까’ 이다. 카프카는 가변적인 환경에서도 안정적으로 확장가능하도록 설계되어있고
- 영속성일반적으로 DATA를 메모리에 저장하는 일반 메세징 플랫폼과 다르게, Kafka는 파일시스템에 저장한다.
운영체제 레벨에서 파일시스템을 활용하고, 특히 페이지캐시 영역을 메모리에 따로 생성해서 사용하는 방식을 사용한다. - 영속성 : 프로그램이 종료되더라도, 데이터는 사라지지 않는다.
- 고가용성이때, 카프카는 데이터의 복제(replication)을 하여, ‘한 브로커에 장애가 발생해도, 동일한 데이터(복제된 데이터)가 나머지 브로커에 저장되어있으므로, 저장된 데이터를 기준으로 지속적인 처리를 할수 있다. 라는게 가장 큰 카프카의 장점이다
- [P]는 DATA를 [B] 1개에 보낸다
- [B]는 (D)를 자체적으로 복제해서, 나머지 [B]도 모두 동일한 (D)를 가진다.
- 일반적으로 카프카의 서버는 3대 이상을 1개의 클러스터로 묶어서 사용한다.
이는 운영중인 서버1대가 맛탱이가가서 작동을 못해도, 나머지 2대의 서버로 작동시켜서 → 서버를 안전하게 작동시키게 하기 위함이다
빅데이터 아키텍쳐의 변천사
- 초기 빅데이터 플랫폼
- 구조 : 원천데이터 → 파생데이터 → 서빙데이터
- 특징 : 배치처리 못함, 실시간 못함
- 람다 아키텍쳐
- 구조 : 데이터 → 배치레이어 → 서빙레이어 / 데이터 → 스피드레이어 → 서빙레이어
- 특징 : 배치레이어에서 배치일괄처리, 스피드레이어에서 실시간처리, 서빙레이어에서 APP이 사용할수 있는 상태로 유지
- 한계 : 데이터가 배치레이어, 스피드레이어로 각각 들어가기 때문에 결국 동일한 데이터에 대해서 다른 처리를 한번씩해야함. 즉, 동일한 데이터를 2번 처리해야함
- 카파 아키텍쳐
- 구조 : 데이터 → 스피드레이어 → 서빙레이어
- 특징 : 배치레이어가없고 모두 스피드레이어로 보냄
- 활용 : STREAM DATA → BATCH로 사용
- 일정 수준모인 스트림데이터를 스냅샷으로 남기자 → 그럼 모든 데이터를 batch처리 할수 있겠다 → 배치데이터를 스트림으로 표현할때 Log로 바꾸자
- 배치 데이터에 대한 스냅샷을 찍어서 → 이를 로그로 만들고, 시간 순서대로 기록하게 해두자 (Timestamp사용)
배치데이터 : 한정된 데이터처리, 대규모 배치 데이터를 위한 분산처리 수행, 지연시간(김), 키 조인(복잡함)
스트림데이터 : 무한데이터처리, 지속적으로 들어오는 데이터를위한 분산처리 수행, 지연시간(분단위 이하), 키조인(단순)
'DATA Engineering > Kafka' 카테고리의 다른 글
섹션3. 카프카 클러스터 운영 (0) | 2022.07.20 |
---|---|
에러해결 kafka : Configured zookeeper. connect may be wrong. (0) | 2022.07.12 |
zero-copy 대신에 io_uring (1) | 2022.07.08 |
Zero-Copy는 왜 빠를까? (Kafka) (0) | 2022.07.08 |
섹션 2. 카프카 기본 개념 설명 (0) | 2022.06.04 |