2024. 10. 1. 09:00ㆍ대규모스트림처리
2024/10/01
카프카 개발자 제이 크렙스는 대학시절
프란츠 카프카의 작품을 좋아했다고 합니다.
그래서 오픈소스 프로젝트 이름을 카프카라고 정했죠.
이름과 기능 사이에 별 관계가 없지만
유래를 알고 있으면 좋을 것 같습니다.
※ Kafka에 대해 알아보자.
▶ Kafka란?
Kafka는 분산 스트리밍 플랫폼으로, 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용된다. Kafka는 메시지 큐와 유사하지만, 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점을 둔다.
● Kafka의 역할
○ 실시간 데이터 처리: 대용량 데이터를 실시간으로 처리하고 분석한다.
○ 데이터 통합: 다양한 소스에서 데이터를 수집하고 이를 통합하여 분석한다.
○ 내결함성: 데이터 손실 없이 안정적으로 데이터를 저장하고 전송한다.
● Kafka의 장단점
💡 Kafka의 장점
① 신뢰성(Reliability)
▪ 데이터 복제: 데이터를 여러 브로커에 복제하여 저장하므로, 단일 브로커 장애 시에도 데이터 손실을 방지할 수 있다.
▪ 확인 메커니즘: 데이터가 소비자에게 성공적으로 전달되었는지 확인하는 기능을 제공한다.
② 유연성(Flexibility)
▪ 다양한 소비자 패턴: 여러 소비자가 동시에 데이터를 구독할 수 있다.
▪ 프로토콜 지원: 기본적으로 Kafka의 프로토콜을 사용하지만, 다양한 클라이언트를 통해 다른 언어에서도 사용할 수 있다.
③ 확장성(Scalability)
▪ 분산 시스템: 클러스터링을 통해 여러 노드에서 데이터를 분산 처리할 수 있다.
▪ 수평 확장: 브로커와 파티션을 추가하여 쉽게 확장할 수 있다.
④ 성능(Performance)
▪ 높은 처리량: 대용량 데이터를 실시간으로 빠르게 처리할 수 있다.
▪ 저지연: 데이터 전송의 지연을 최소화하여 실시간 처리가 가능하다.
⑤ 관리 및 모니터링(Manageability and Monitoring)
▪ 관리 도구: 다양한 관리 도구를 통해 클러스터를 모니터링하고 관리할 수 있다.
▪ s플러그인 시스템: 다양한 플러그인을 통해 기능을 확장할 수 있다.
💡 Kafka의 단점
① 설정 및 운영 복잡성(Setup and Operational Complexity)
▪ 복잡한 설정: 초기 설정이 다소 복잡할 수 있으며, 클러스터링 및 분산 환경에서는 더 많은 설정이 필요하다.
▪ 운영 관리: 대규모 환경에서 운영하고 관리하는 데 추가적인 노력이 필요할 수 있다.
② 성능 문제(Performance Issues)
▪ 브로커 오버헤드: 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있다.
▪ 대규모 메시지 처리: 매우 대규모의 메시지를 처리할 때 성능 저하가 발생할 수 있으며, 이러한 경우 적절한 클러스터링 및 최적화가 필요하다.
③ 운영 비용(Operational Costs)
▪ 리소스 소비: 메모리와 CPU 자원을 많이 소비할 수 있어, 충분한 리소스를 제공해야 원활하게 운영될 수 있다.
▪ 모니터링 및 유지보수: 지속적인 모니터링과 유지보수가 필요하며, 이를 위해 추가적인 인력과 비용이 발생할 수 있다.
④ 러닝 커브(Learning Curve)
▪ 학습 필요성: 개념과 설정을 이해하는 데 시간이 걸릴 수 있으며 다소 난이도가 있다.
▶ Kafka의 기본 구성 요소
✅ 메세지(Message):
메시지는 Kafka를 통해 전달되는 데이터 단위다.
○ 예를 들어, 로그 데이터나 이벤트 데이터가 메시지가 될 수 있다.
○ 메시지는 키(key), 값(value), 타임스탬프(timestamp), 그리고 몇 가지 메타데이터로 구성된다.
✅ 프로듀서(Producer):
메시지를 생성하고 Kafka에 보내는 역할을 한다.
○ 예를 들어, 웹 애플리케이션이 로그 데이터를 Kafka에 보내는 경우 프로듀서가 된다.
○ 프로듀서는 특정 토픽(topic)에 메시지를 보낸다.
✅ 토픽(Topic):
메시지를 저장하는 장소다. 메시지는 토픽에 저장되었다가 소비자에게 전달된다.
○ 토픽은 여러 파티션(partition)으로 나누어질 수 있으며, 파티션은 메시지를 순서대로 저장한다.
○ 파티션을 통해 병렬 처리가 가능하다.
○ 예: “user-activity”라는 토픽에 사용자의 활동 로그를 저장할 수 있다.
✅ 파티션(Partition):
파티션은 토픽을 물리적으로 나눈 단위로, 각 파티션은 독립적으로 메시지를 저장하고 관리한다.
○ 각 파티션은 메시지를 순서대로 저장하며, 파티션 내의 메시지는 고유한 오프셋(offset)으로 식별된다.
○ 파티션을 통해 데이터를 병렬로 처리할 수 있으며, 클러스터 내의 여러 브로커에 분산시켜 저장할 수 있다.
✅ 키(Key):
키는 메시지를 특정 파티션에 할당하는 데 사용되는 값이다.
○ 동일한 키를 가진 메시지는 항상 동일한 파티션에 저장된다.
○ 예를 들어, 특정 사용자 ID를 키로 사용하여 해당 사용자의 모든 이벤트가 동일한 파티션에 저장되도록 할 수 있다.
✅ 컨슈머(Consumer):
토픽에서 메시지를 가져와 처리하는 역할을 한다.
○ 컨슈머는 특정 컨슈머 그룹(consumer group)에 속하며, 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리한다.
○ 기본적으로 컨슈머는 스티키 파티셔닝(Sticky Partitioning)을 사용한다.
○ 이는 특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 이는 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상시킨다.
✅ 브로커(Broker):
Kafka 클러스터의 각 서버를 의미하며, 메시지를 저장하고 전송하는 역할을 한다.
○ 하나의 Kafka 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽 파티션을 관리한다.
✅ 주키퍼(Zookeeper):
Kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스다.
○ 주키퍼는 브로커의 메타데이터를 저장하고, 브로커 간의 상호작용을 조정한다.
▶ Kafka와 RabbitMQ의 차이점
● 설계 철학
○ RabbitMQ: 전통적인 메시지 브로커로, 메시지의 안정적 전달과 큐잉에 중점을 둔다.
○ Kafka: 분산 스트리밍 플랫폼으로, 대규모 실시간 데이터 스트림의 저장과 분석에 중점을 둔다.
● 메세지 모델
○ RabbitMQ: 큐(queue)를 중심으로 메시지를 전달한다. 메시지는 큐에 저장되고, 큐에서 하나 이상의 컨슈머에게 전달된다.
○ Kafka: 토픽(topic)을 중심으로 메시지를 저장한다. 메시지는 토픽의 파티션에 저장되고, 컨슈머는 이 파티션에서 메시지를 읽는다.
● 메세지 지속성
○ RabbitMQ: 메시지를 메모리나 디스크에 저장할 수 있으며, 일반적으로 단기 저장을 목표로 한다.
○ Kafka: 메시지를 디스크에 저장하며, 장기 저장을 목표로 한다. 데이터 로그는 설정된 기간 동안 보존한다.
● 사용
○ RabbitMQ: 작업 큐, 요청/응답 패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합하다.
○ Kafka: 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합하다.
'대규모스트림처리' 카테고리의 다른 글
RabbitMQ란? (0) | 2024.09.30 |
---|---|
대규모 시스템이란?(3) (3) | 2024.09.29 |
대규모 시스템이란?(2) (2) | 2024.09.26 |
대규모 시스템이란?(1) (5) | 2024.09.25 |