Apache Kafka란?

  • 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 이벤트 스트리밍 플랫폼
  • Pub-Sub 모델의 메세지 큐
  • 분산된 환경에 특화되어 있음

 

먼저, 이벤트 스트림 플랫폼에 대하여 알아보자

구조는 아래와 같다.

- 이벤트:

  • 어떤 일이 일어났을 때 그 사건을 의미(레코드 혹은 메시지)
  • kafka에서 데이터를 읽거나 쓰는 기본 단위

하나의 이벤트 단위 안에 event key, event value, event time stamp가 존재하고 선택 옵션으로 메타 헤더 데이터가 존재

 

- 이벤트 스트림:

  • 연속적으로 생성되는 이벤트 흐름

- 이벤트 스트림 처리:

  • 연속적인 이벤트 스트림을 처리하거나 분석 하는것

- 이벤트 스트리밍:

  • 이벤트 스트림 처리 작업의 일부분으로 다른 시스템에서 쉽게 액세스하고 분석할 수 있도록 장소간에 이벤트 데이터를 효율적으로 이동하는 프로세스

 

Kafka에 대한 설명

 1. 구성 요소

 

 

2. 모델: Pub-Sub 모델

 

prducer: 데이터를 보내는 쪽

consumer: 데이터를 가져가는 쪽

중간에 메세징 서버를 두고, 데이터를 주고받는 형태인 Pub-Sub 모델을 사용

pub-sub 모델의 단점:

  1. 중간에 메세징 시스템이 있어 메세지 전달 속도가 느림
  2. 직접 통신을 하지 않기 때문에 데이터가 정확히 전달되었는지 확인 불가능

해결책:

  1. 메세지 교환 신뢰성 관리를 producer와 consumer쪽으로 넘김
  2. 부하가 많이 걸리는 교환기 기능을 consumer가 만들 수 있게 함
  3. kafka는 메세지를 파일시스템으로 저장하기 때문에 메세지를 많이 쌓아도 성능이 크게 감소하지 않음

 


3. Kafka 동작원리

 

카프카에 저장되는 메시지는 topic으로 분류되고, topic 여러 개의 partition으로 나뉘어 진다.
 offset:
 - partition에는 message 상대적 위치를 나타냄

 - offset 정보를 이용해 이전에 가져간 메시지의 위치 정보를 있고, 
   동시에 들어오는 많은 데이터를 여러 개의 파티션에 나누어 저장하여 병렬로 빠르게 처리



 

      Producer에서 생산한 메시지는 여러 개의 파티션에 저장
->
메시지를 처리하는 consumer 쪽에서도 여러 Consumer가 메시지를 처리하는 것이 훨씬 효율적

Consumer Group : 하나의 Topic을 처리하기 위한 여러 Consumer들을 지칭

Topic의 Partition은 Consumer Group과 1:n 매칭을 해야 한다.
    (자신이 읽고 있는 파티션에는 같은 그룹내 다른 Consumer가 읽을 없다.)


위의 그림은 partition개수와 consumer개수에 따른 동작하는 방식을 설명한다.





kafka에서 특정 broker에 문제가 발생한 경우


해결책:
해당 broker 역할을 다른 broker에서 즉각적으로 대신 수행할 있게 하기 위해 replication 기능이 존재

- 모든 데이터 생산과 처리는 leader topic에서 이루어진다.

- 만약 leader topic 문제가 발생할 , leader 동기화를 유지하던 follow topic leader topic 대체하여 

   데이터 생산과 처리 역할을 수행하게 된다.


결론:
이와 같은 방식에는 데이터 유실이 없다는 장점이 존재하지만, 복제를 하기 위한 시간과 

        네트워크 비용이 발생하기 때문에 데이터의 중요도에 따라 ack 옵션으로 세부사항을 설정하는 것이 좋다.



4. Kafka의 필요성

 

 

  Kafka 이전의 아키텍쳐

문제점:

  • 시스템간의 의존성이 복잡하여 만약 한 시스템에서 장애가 발생하더라도 여러 시스템에 영향이 가며 이는 장애를 복구하는데 있어서도 매우 큰 걸림돌이 된다.(point-to-point 메세지 전달 방식)
  • 새로운 시스템이나 DB를 도입하고 재구성하기 어렵다.
  • 각 애플리케이션은 고유의 포맷을 가지고 있어 데이터 변환 시스템이 필요하다.
  • 서버에 많은 이벤트가 들어온다면 대기 시간이 길어진다.

 

kafka 적용 후

 

  • 복잡해진 아키텍쳐 단순화
  • 애플리케이션간의 데이터 교환이 쉬워짐
  • 즉시 또는 현재 시간내에 처리할 수 있에 대기시간이 단축
  • 보편적인 데이터 파이프라인을 지속하기 위해서 이미 존재하는 시스템과 연결하는 Kafka Connect라는 프레임워크 제공

“but” kafka의 단점 또한 존재한다.

 

   단점:

  • Message tweaking issues : 카프카는 byte를 받고 보내기만 하는데, 메시지가 수정이 필요하다면 카프카의 퍼포먼스는 급격히 감소한다. 따라서 메시지가 바뀔필요가 없을때 카프카는 가장 잘 동작한다.
  • wild card topic selection을 지원하지 않는다. 즉, 한번에 하나의 topic만 선택이 가능하다.
  • Reduce Performance : producer가 데이터를 압축하고 consumer가 데이터를 decompress 하는 과정에서 성능 저하가 생길수 있다.

 

 

Conflent란?

설립: 2014년 11월 LinkedIn에서 kafka를 만들던 일부 엔지니어들이 kafka에 집중하기 위해 Confluent라는 새로운 회사 창립

 

목적: kafka를 엔터프라이즈 환경에 맞게 만드는 것을 목표로 하여 여러 컴포넌트를 추가로 제공

 

1. Schema Resitry

   - 표준 스키마를 사용하여 개발

   - 운영의 복잡성 감소

 

2. Control Centerd

  - 운영자: 멀티 클러스터 환경과 보안을 중앙 관리 및 통제

  - 개발자: 메시지, 토픽, 스키마를 확인 및 커넥터 관리, ksqlDB 쿼리 작성 가능

 

3. Self Balencing

  - 동적으로 브로커별 처리량 최적화

 

4. ksqlDB

  - SQL문을 통해 데이터 스트림 쿼리 작업의 용이성 높임

 

confluent의 성장 

 

confluent의 경쟁 솔루션

 


출처: 

https://leediz.tistory.com/2

https://www.tibco.com/ko/reference-center/what-is-event-stream-processing

https://jaegukim.github.io/posts/kafka-장단점/

https://www.confluent.io/press-release/confluent-experiences-rapid-growth-as-companies-adopt-event-streaming

https://blog.publiccomps.com/confluent

+ Recent posts