이번 글에서는 Kafka에 대해서 알아보려고 합니다.
Kafka
카프카를 정의 보자면
대규모 메시지 처리와 스트리밍 데이터를 처리하기 위해 설계된 오픈소스 분산 스트리밍 플랫폼이다.
카프카를 왜 사용해야 하는가?
- 높은 처리량 : Kafka는 높은 처리량을 위해 설계되었다.
Kafka는 보내고 받을 때 데이터를 묶어서 보내기 때문에 네트워크 통신 횟수를 최소한으로 줄여 같은 시간에 많은 데이터를 전송할 수 있다.
또한 동일 목적의 데이터를 병렬 처리할 수 있기 때문에 - 확장성 : 클러스터 확장이 용이하여 가변적인 환경에서 확장이 가능 (scale-out, scale-in)
- 실시간 처리 : 실시간 데이터 피드를 처리하고 전달할 수 있다.
- 내구성 및 신뢰성 : Kafka는 데이터를 파일 시스템에 저장한다. 페이지 캐시 메모리 영역을 사용하여 성능 및 안정성을 보장하고
Kafka는 3개 이상의 서버들로 운영되고 전송받은 데이터를 1대에 저장하는 것이 아닌 다른 브로커들에게도 저장해 내구성을 높인다.
크게 이러한 이유들 때문에 카프카를 사용하게 된다.
그래서 이벤트 드리븐 아키택처와 스트림 데이터 파이프라인으로 많이 쓰이고 데이터 레이크와 같은 시스템과 함께 사용될 때 큰 장점을 발휘한다.
하지만 카프카를 사용할 때 복잡성이라던지 트랜잭션 관리 같은 여러 고려해야 할 사항도 있기 때문에 목적에 맞게 잘 사용하는 것이 중요하다.
카프카 구성
카프카는 크게 3개로 구성되어 있다. 브로커, 클라이언트, 주키퍼로 크게 볼 수 있고
여기서는 간단하게만 알아보도록 하자.
브로커
카프카 클라이언트(프로듀서, 컨슈머)와 데이터를 주고받기 위해 사용되는 서버입니다.
데이터를 분산해서 저장하고 이는 장애 발생 시 안전하게 사용할 수 있도록 도와줍니다.
그리고 브로커들이 모인 묶음을 클러스터라고 합니다. 보통은 안전을 위해 3대 이상 가용하지만 1대도 가능합니다.
클라이언트
데이터를 저장하고 전송하는 애플리케이션입니다.
데이터를 저장하는 것을 Consumer 데이터를 전송하는 것을 Producer라고 부릅니다.
이 순서를 보면 Producer - Broker - Consumer 순으로 카프카는 데이터를 전송하고 저장합니다.
주키퍼
카프카의 메타데이터와 클러스터의 상태 정보를 관리하는 데 사용됩니다.
카프카 클러스터에 속한 브로커은 주키퍼와 연결되어야 하며 모든 브로커는 동일한 주키퍼 클러스터의 경로로 설정되어야 합니다.
이렇게 함으로써 모든 브로커가 같은 메타데이터와 클러스터 상태정보를 공유하게 됩니다.
하나의 주키퍼 클러스터는 여러 카프카 클러스터와 연결될 수 있습니다.
하지만 나중에 카프카에서 주키퍼 없이 메타데이터와 클러스터 상태정보를 관리할 수 있도록 하는 것이 추진 중에 있습니다.
여기까지 간단하게 카프카에 대해서 알아보았습니다.
대규모 서비스에서 카프카의 중요도는 이루어 말할 수 없습니다.
이번 기회에 저도 카프카에 대해서 조금 더 알아보는 시간을 가지려고 합니다.
감사합니다.
출처 : 아파치 카프카 애플리케이션 프로그래밍 with 자바
아파치 카프카 애플리케이션 프로그래밍 with 자바 | 최원영 - 교보문고
아파치 카프카 애플리케이션 프로그래밍 with 자바 |
product.kyobobook.co.kr
'Kafka' 카테고리의 다른 글
Kafka Consumer(카프카 컨슈머) (0) | 2023.12.08 |
---|---|
Kafka Producer(카프카 프로듀서) (0) | 2023.11.17 |