
Apache Kafka란?
- 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 이벤트 스트리밍 플랫폼
- Pub-Sub 모델의 메세지 큐
- 분산된 환경에 특화되어 있음
먼저, 이벤트 스트림 플랫폼에 대하여 알아보자
구조는 아래와 같다.

- 이벤트:
- 어떤 일이 일어났을 때 그 사건을 의미(레코드 혹은 메시지)
- kafka에서 데이터를 읽거나 쓰는 기본 단위
하나의 이벤트 단위 안에 event key, event value, event time stamp가 존재하고 선택 옵션으로 메타 헤더 데이터가 존재
- 이벤트 스트림:
- 연속적으로 생성되는 이벤트 흐름
- 이벤트 스트림 처리:
- 연속적인 이벤트 스트림을 처리하거나 분석 하는것
- 이벤트 스트리밍:
- 이벤트 스트림 처리 작업의 일부분으로 다른 시스템에서 쉽게 액세스하고 분석할 수 있도록 장소간에 이벤트 데이터를 효율적으로 이동하는 프로세스
Kafka에 대한 설명
1. 구성 요소

2. 모델: Pub-Sub 모델

prducer: 데이터를 보내는 쪽
consumer: 데이터를 가져가는 쪽
중간에 메세징 서버를 두고, 데이터를 주고받는 형태인 Pub-Sub 모델을 사용
pub-sub 모델의 단점:
- 중간에 메세징 시스템이 있어 메세지 전달 속도가 느림
- 직접 통신을 하지 않기 때문에 데이터가 정확히 전달되었는지 확인 불가능
해결책:
- 메세지 교환 신뢰성 관리를 producer와 consumer쪽으로 넘김
- 부하가 많이 걸리는 교환기 기능을 consumer가 만들 수 있게 함
- 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://www.tibco.com/ko/reference-center/what-is-event-stream-processing




