Open source
Kafka 란? - kafka(1)
jogaknabi_1023
2024. 2. 22. 18:26
이전 프로젝트에서 MSA 서비스 구조를 사용하면서 Kafka를 처음 접하게 되었다. 그 과정에서 Kafka가 가진 비동기 처리 방식과 확장성에 대해 알게 되었는데 점차 실시간 데이터 프로세싱이 중요해지고 있는 현재, kafka를 확실히 이해하고 가는 것이 좋겠다는 생각이 들었다. youtube에서 관련 영상을 찾아 공부하던 중 '데브원영 DVWY' 님의 카프카 강의를 보게 되었는데 이해하기 쉽게 잘 가르쳐주셔서 이를 정리하며 공부를 진행해갔다. kafka 관련 내용은 kafka 이론부터 실습(SK planet 토그온 세미나)까지의 정보이다. 공부 중 개인적으로 좀 더 궁금했던 부분은 추가적으로 내가 찾아서 적은 부분들도 있다.
카프카의 신 데브원영님 감사합니다!
Kafka
- 실시간 스트리밍 데이터를 처리하기 위한 분산 이벤트 스트리밍 플랫폼
- 데이터의 중앙 집중화를 위한 시스템
- 대규모 데이터 수집, 처리, 저장, 통합에 사용
- 대용량 데이터 처리에 특화 되어 있음.
Before Kafka
과거에는 데이터를 전송하는 소스 애플리케이션, 데이터를 받는 타켓 애플리케이션의 단방향 통신으로 각각의 데이터 파이프라인이 분리되어 있는 구조였다. 하지만 소스 애플리케이션과 타겟 애플리케이션이 점차 증가하면서 단점들이 생겨났다.
단점
- 시스템 복잡도의 증가데이터 전송 라인들이 많아져 배포와 장애에 대응하기 어렵다.
- 중앙화된 데이터 전송 영역이 없어, 데이터의 흐름을 파악하기 어렵고, 시스템 관리가 복잡하다.
- 데이터 일관성 유지의 어려움
- 데이터가 여러 시스템과 데이터베이스에 분산되어 있는 경우, 한 시스템에서 변경된 데이터가 다른 시스템에 즉시 반영되지 않아 데이터의 일관성을 유지하기 어렵다.
- 각 애플리케이션과 데이터 시스템 간의 별도의 파이프라인이 존재하고 파이프라인마다 데이터 포맷과 처리 방식이 달라 데이터 파이프라인 관리가 어렵다.
- 데이터 실시간 처리의 어려움
전통적인 메시지 큐 시스템이나 데이터 베이스는 대부분 배치 처리 방식(특정 시간 범위 내에서 대량의 데이터를 일괄 처리하는 것)을 사용한다. 이는 데이터를 실시간으로 처리하기 어렵다는 것을 의미한다.
- 확장성 제한
데이터 양이 증가하면서 시스템을 확장해야 하는 상황에서 대부분의 전통적인 메시지 큐 시스템은 한정된 리소스 내에서 작동하므로, 대량의 데이터를 처리하는데 제한이 있다.
After Kafka
- 모든 이벤트/데이터 흐름을 중앙에서 관리할 수 있게 되었다.
- 새로운 서비스/시스템이 추가되어도 카프카가 제공하는 표준 포맷으로 연결하면 되기 때문에 확장성과 신뢰성이 증가한다.
- 개발자는 각 서비스간의 연결이 아닌 서비스들의 비즈니스 로직에 집중할 수 있다
Kafka 장점
- 데이터 흐름에 있어서 카프카는 fault tolerant 고가용성의 특징을 가짐으로써 서버가 이슈가 생기거나 갑작스럽게 렉이 걸린 상황에서도 데이터 손실 없이 복구 가능
- 낮은 지연, 높은 처리량
- 소스 애플리케이션과 타겟 애플리케이션의 커플링을 느슨하게 함.
Kafka 구조
-> Source Application 에서 전송할 수 있는 데이터 포맷은 거의 제한이 없음. json, tsv etc…
-> kafka는 각종 데이터들을 topic에 저장함 = 큐 역할
Kafka 특징
- High throughput message capacity (높은 처리량의 메시지 용량)
짧은 시간 내에 엄청난 양의 데이터를 컨슈머까지 전달할 수 있다는 것. 파티션을 통한 분산처리가 가능하기 때문에 데이터 양이 많아지면 많아질수록 컨슈머 개수를 늘려서 병렬처리가 가능하고, 이를 통해 데이터 처리를 더욱 빠르게 할 수 있다. - Scalability and Fault tolerant (확장성과 내결함성)
이미 사용 중인 카프카 브로커가 있다고 하더라도 신규 브로커 서버를 추가해서 수평 확장이 가능하다. 또한 브로커 몇 대가 죽더라도 이미 replica로 복제된 데이터는 안전하게 보관되어 있으므로 복구하여 처리할 수 있다. - Undeleted Log
카프카 토픽에 들어간 데이터는 컨슈머가 데이터를 가지고 가더라도 데이터가 사라지지 않는다. 카프카에서는 컨슈머 그룹 아이디만 다르다면 동일한 데이터도 각각 다른 형태로 처리할 수 있다.
Kafka의 미래
현재 이미 데이터 처리량이 많은 대기업에서 활발히 사용 되고 있다. 또한 실시간 데이터 처리와 데이터 파이프라인으로서 기업에 필요한 존재로 부각되었다.
- 아파치 카프카 생태계의 꾸준한 발전
- 카프카 스트림, 커넥터, avro, rest proxy 등 카프카에 적합한 여러 요소의 지속적으로 발전으로 꾸준히 확장 중
- 카프카와의 연동을 정식으로 지원하는 fluentd, telegraf 등 여러 서드파티들로 레거시 아키텍처에서도 쉽게 카프카와 연동 가능
- 실시간 데이터 프로세싱에서 더욱 중요해진 카프카의 역할