아파치 카프카
개발 공부를 하며 필수로 MQ, MB 정도는 하나 공부해야 겠다는 생각을 꾸준히 해왔다.
공부할만한 실력이 되는게 베이스가 될 시기와, 실제로 사용해야 될 시기가 딱 맞아 떨어져 바로 공부하기로 마음 먹었다.
카프카란?
- 카프카 내부에 데이터가 저장되는 파티션 동작은 FIFO 방식의 큐 자료구조와 유사하다.
큐에 데이터를 보내는 것이 ‘프로듀셔' 이고 데이터를 가져가는 것이 ‘컨슈머'. - 카프카를 통해 전달할 수 있는 데이터 포맷은 거의 제한이 없다. 직렬화, 역직렬화를 통해 ByteArray 로 통신하므로 자바에서 선언한 모든 객체를 지원한다. (카프카 클라이언트에서는 기본적으로 ByteArray, ByteBuffer, Double, Long, String 타입에 대응한 직렬화, 역직렬화 클래스가 제공된다)
기본적으로 제공되는 Class 제외하고 추가로 필요하다면 커스텀 직렬화/역직렬화 클래스(Serializer, Deserializer) 를 상속받아 개발하여 사용할 수 있다. - 상용 환경에서 카프카는 최소 3대 이상의 서버(브로커)에서 분산 운영하여 프로듀서를 통해 전송받은 데이터를 파일 시스템에 안전하게 기록한다.
최소 3대 이상의 서버로 구성된 클러스터 중 일부 서버에 장애가 발생하더라도 데이터를 지속적으로 복제하므로 안전하게 운영할 수 있다. - 데이터를 묶음 단위로 처리하는 배치 전송을 통해 낮은 지연과 높은 데이터 처리량을 가지고 있다.
카프카 특징
- 높은 처리량
- 카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.
- 많은 양의 데이터를 송수신할 때 맺어지는 네트워크를 최소화 하기 위함
- 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고 데이터를 병렬처리 할 수 있다.
- 파티션 개수만큼 컨슈머 개수를 늘려서 동일 시간당 데이터 처리량을 늘릴 수 있다.
- 카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.
- 확장성
- 카프카 클러스터의 브로커를 무중단이면서도 쉽게 scale-in, scale-out 할 수 있다.
- 영속성
- 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않은 데이터의 특성을 뜻한다.
- 카프카는 데이터를 파일 시스템에 저장하여 영속성이 가능하고, 파일에 저장하는 특성 때문에 속도가 느려질 수 있는 문제를 해결하기 위하여 파일 I/O 성능 향상을 위해 page cahce 영역을 메모리에 따로 생성하여 사용한다.
- 고가용성
- 클러스터로 이루어진 카프카는 데이터의 replication 을 통해 고가용성의 특징을 가진다.
- 프로듀서로 전송받은 데이터를 1대의 브로커에만 저장하지 않고 다른 브로커에도 저장한다.
- on-premise 환경의 서버 랙 또는 public cloud 의 리전 단위 장애에도 데이터를 안전하게 복제할 수 있는 브로커 옵션들이 준비되어 있다.
- 클러스터로 이루어진 카프카는 데이터의 replication 을 통해 고가용성의 특징을 가진다.
카프카 클러스터를 3대 이상의 브로커들로 구성해야 하는 이유
- 1대 구성 : 구성할 경우 해당 브로커에 장애는 서비스 장애로 이어진다.
- 2대 구성 : 1개의 브로커가 죽을 시 다른 브로커가 살아 있으므로 서비스 장애는 발생하지 않는다. 하지만 브로커 간의 데이터가 복제되는 시간 차이로 인해 데이터를 유실할 수 있다.
반응형
'📨 Apache Kafka' 카테고리의 다른 글
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-6장 카프카 커넥트 (0) | 2023.04.20 |
---|---|
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-5장 카프카 스트림즈 (0) | 2023.04.13 |
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3.4 장 카프카 클라이언트 (0) | 2023.04.09 |
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-2, 3장 토픽과 파티션, 레코드 (0) | 2023.03.27 |
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-1장 카프카 브로커와 클러스터 주키퍼 (0) | 2023.03.27 |