Kafka란?

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