목차
- kafka란?
- kafka가 데이터 파이프라인으로 적합한 이유
- kafka의 중앙 집중화
- 정리
1. KafKa란?
카프카 공식 홈페이지에서는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼이라 소개하고 있습니다. 이벤트 스트리밍은 데이터베이스, 웹, 웹 백엔드 서버와 같은 이벤트 소스에서 거의 실시간으로 발생하는 데이터를 연속적으로 처리 및 수집, 분석 하는 방식입니다.
kafka는 링크드인 백엔드 아키텍처에서 파편화된 데이터 파이프라인 때문에 서비스를 안정적으로 운영하는 데에 어려움을 겪어 링크드인 자체에서 만든 시스템입니다. 여기서 말하는 데이터 파이프라인은 end to end 방식의 데이터 수집 및 적재 방식을 개선하고 안정성을 추구하며, 유연하면서도 확장이 가능하게 자동화하는 것을 의미합니다.
2. Kafka가 데이터 파이프라인으로 적합한 이유
- 높은 처리량
- producer -> broker, broker -> consumer로 데이터를 보낼 때 데이터를 묶어서 보내기 때문에 동일한 network 비용으로 더 많은 데이터를 전송이 가능하며 topic에 여러 partition을 분배하고 partition 개수만큼 consumer 개수를 늘려서 동일 시간당 데이터 처리를 늘릴 수 있습니다. (데이터 병렬 처리 가능)
- 확장성
- 데이터가 적을 때는 kafka cluster의 broke를 최소한의 개수로 운영하다가 데이터가 많아지면 broker 개수를 늘려 sacle-out을 할 수 있으며 반대로 데이터가 적어지면 broker 개수를 줄이는 sacle-in이 가능합니다.
- 영속성
- 다른 메세징 플랫폼과 다르게 데이터를 disk에 저장해서 데이터의 영속성을 보장합니다.
- kafka는 broker에 메세지가 실리면 송신 완료라는 사상을 가지고 있으면 memory -> disk로 데이터의 flush는 os에게 맡기기 때문에 disk에 저장함에도 불구하고 높은 처리량을 제공합니다. 또한 memory의 page cache 영역을 사용해서 한 번 읽은 데이터에 대해서는 접근을 더 빨리할 수 있습니다.
- 고가용성
- cluster로 이루어진 kafka는 producer로 전송받은 데이터는 한 대의 broker에만 저장하는 것이 아니라 또 다른 broker에도 저장(데이터의 replication(복제)) 할 수 있기 때문에 3개 이상의 서버들로 운영되는 kafka cluster는 일부 서버가 장애가 발생하더라도 무중단으로 안전하고 지속적으로 데이터 처리가 가능합니다.
3. Kafka의 중앙 집중화
Kafka는 데이터의 처리를 한곳에 모아서 할 수 있도록 중앙 집중화되었습니다.
Kafka가 등장하기 전에는 대부분의 아키텍처는 데이터를 생성하는 소스 애플리케이션과 데이터를 적재하는 타깃 애플리케이션이 직접 연결되는 구조였습니다. 이런 구조는 한 애플리케이션의 장애가 연결된 애플리케이션에 직접적인 영향을 주고 데이터 파이프라인이 복잡해진다는 단점이 있었습니다.
kafka는 broker를 둠으로써 위와 같은 N * M의 구성의 단점을 보완했습니다.
또한 producer와 consumer 개수의 증감이 서로에게 영향을 주지 않으므로 변경에 유연한(scale-out, scale-in) 구조가 되었습니다.
4. 정리
이번 포스트에서는 kafka가 무엇이고 왜 등장했는지 간략하게 알아보았습니다.
다음 포스트에서는 kafka 설치와 간략한 실습을 해보도록 하겠습니다. 앞으로 kafka의 대한 공부를 꾸준히 할 생각입니다.