14주차 수요일, 68일차 Today I Learned
스트리밍 처리 (3)
: Kafka 소개
✏️ 학습 내용
1. 소개
2008년 링크드인에서 내부 실시간 데이터 처리를 위해 개발한 소프트웨어 플랫폼으로, 스칼라와 자바로 작성되어 있다. 2011년 초에 오픈소스화하였으며, 포춘지 선정 100대 기업 중 80% 이상이 카프카를 사용하는 것으로 알려져있다.
즉, 실시간 데이터를 처리하기 위해 설계된 오픈 소스 기반의 분산 스트리밍 플랫폼으로, 실시간 데이터 처리를 위해 다수의 서버로 구상되어 있다.
- Scalability와 Fault Tolerance를 제공하는 Publish-Subscription 메시징 시스템이라고 볼 수 있음
- High Throughput과 Low Latency 지원 - 실시간 데이터 처리에 맞게 구현됨
- 분산 아키텍처를 따르기 때문에 Scale Out 이란 형태로 스케일 가능
- 토픽에 데이터 저장할 때, 정해진 보유기한 동안 메시지를 저장
Kafka는 스트림 처리를 실시간으로 가능하게 해준다. 그리고 높은 처리량을 지원하고, 내결함성이 쉽게 제공되고, 확장성 있으며, 풍푸한 생태계가 존재한다.
2. 아키텍처
1) 데이터 이벤트 스트림
Kafka가 다루는 핵심이 되는 데이터 스트럭쳐가 바로 Topic이다. 데이터 이벤트 스트림을 Topic이라 부른다. 프로듀셔가 토픽을만들고, 컨슈머가 토픽에서 데이터를 읽어들이는 구조로, 다수의 컨슈머가 같은 토픽을 기반으로 읽어들일 수 있다.
2) Massage (Event) 구조 : Key, Value, Timestamp
이벤트의 최대 크기는 1MB로 권장된다. Timestamp는 보통 데이터가 토픽에 추가된 시점이며, Key 자체도 복잡한 구조를 가질 수 있다. Header는 선택적 구성요소로 경량 메타 데이터 정보 (key-value pairs)를 적어줄 수 있다.
3) Topic과 Partition
하나의 토픽은 확장성을 위해 다수의 파티션으로 나뉘어 서로 다른 서버에 저장된다. 메세지가 어느 파티션에 속하는지 결정하는 방식에 키의 유무에 따라 달라진다.
4) Broker
브로커란 실제 데이터를 저장하는 서버로, 실제 토픽을 구성하는 파티션 정보들을 저장 및 관리한다. Kafka Broker를 Kafka Server 혹은 Kafka Node라고 부르기도 한다. 브로커와 토픽에 대한 정보 관리, 즉 카프카 메타 정보 관리는 초기에 Zookeeper에서 수행했으며, 요즘 추세는 KRaft이다.
3. 중요 개념
Producer : 각 프로듀서는 하나의 토픽을 만들어내고, 그 토픽은 결국 이벤트 큐인데, 스케일이 되려다보니 다수의 파티션으로 나눠서 저장된다.
Broker : 카프카 클러스터는 다수의 서버 (브로커)로 구현되어 있다. 각 브로커의 내부를 보면 다수의 파티션을 관리한다.
Controller : 브로커 중의 하나로 파티션과 복제본 관리를 맡는다.
Consumer : 컨슈머는 토픽을 소비한다.
Consumer Group : 백프레셔 이슈 발생 시에 데이터가 많이 쌓이게 되면 컨슈머 그룹을 만들어서 다수의 컨슈머가 동시에 소비하도록 한다.
Kafka Connect
Kafka 위에 만들어진 중앙집중 데이터 허브로, 이를 구성하는 서버만 있다면 코드없이 환경설정으로 데이터를 카프카 통해서 여러 곳으로 전송시킬 수 있다.
- Standalone mode : 개발과 테스트에서 사용
- Distributed mode : 실제 프로덕션에 사용
Kafka Schema Registry
Schema Registry는 Topic 메시지 데이터에 대한 스키마를 관리 및 검증하는 데 사용한다. 프로듀서와 컨슈머는 이를 사용하여 스키마 변경을 처리한다.
4. Kafka Python 프로그래밍
- 프로듀서 생성
- 컨슈머 객체 생성
💡 배운 점
- 카프카의 역사와 기본 소개에 대해 배웠다.
- 카프카 아키텍처와 중요한 개념들에 대해 배웠다.
- 카프카 설치 방법은 강의 자료에 나와있다. (단, 학습용이라 스케일러블하지 않다.)
- 카프카 파이썬 프로그래밍에 대해 배웠다.
☁️ 소감
Kafka는 실시간 데이터를 처리하기 위해 사용된다. 실제로 실습을 하기에 마땅한 소재는 떠오르지 않지만, 회사나 적합한 아이디어가 있다면 시도해서 실습을 해보고 싶다. 지금은 학습용을 기반으로 배우는 중이라서 다소 부족함이 느껴진다.
'Data Engineering > grepp 데브코스 : TIL' 카테고리의 다른 글
[TIL_2024.01.26] 스트리밍 처리 (5) : Spark Streaming (1) | 2024.02.26 |
---|---|
[TIL_2024.01.25] 스트리밍 처리 (4) : Kafka 기본 프로그래밍 (0) | 2024.02.26 |
[TIL_2024.01.23] 스트리밍 처리 (2) : Udemy 추천 엔진 발전 여정 (0) | 2024.02.26 |
[TIL_2024.01.22] 스트리밍 처리 (1) : 실시간 데이처 처리 (2) | 2024.02.26 |
[TIL_2024.01.19] 빅데이터 처리 시스템, Hadoop Spark (5) : SparkML, 클라우드 기반의 Spark 클러스터 (0) | 2024.02.15 |