Reference
Kafka Overview
Kafka 주요 특징
1.
Kafka는 Pub-Sub Model을 지원하는 분산 메세지 큐이다
2.
여러대의 서버로 Scale-out할 수 있는 클러스터를 구성한다
3.
Topic을 중심으로 Publisher = Producer Subscriber = Consumer(Group) 로 데이터 관리 및 처리
4.
하나의 Topic은 복수개의 Partition으로 확장 가능하다
Kafka가 해결하는 문제
1.
RabbitMQ 같은 single message queue가 가지는 scale과 속도의 문제를 해결할 수 있다
2.
Cluster 구성으로 Fault Tolerance, High Availability를 자체적으로 해결한다
3.
Topic, Partition, Offset, Producer (ack), Consumer group (commit) 개념으로 대용량 분산 메세지 처리에서의 메세지 저장과 처리의 신뢰를 관리할 수 있는 메커니즘 구현
4.
대용량 데이터를 다루면서도 빠른 데이터 처리가 가능하다
이벤트 스트리밍 플랫폼
kafka의 지향점
이벤트 스트리밍 플랫폼은
•
여러 이벤트 소스에서 발생하는 이벤트를 안정적으로 처리할 수 있는 시스템
•
초당 테라바이트 이상의 이벤트를 처리하기 위해 높은 안정성 및 확장성 지향
•
producer API, consumer API, Kafka-Streams, Kafka-Connector 라이브러리 등을 통해 탄력적으로 스트리밍 데이터를 처리할 수 있도록 → 이벤트 스트리밍 플랫폼 지향
Kafka 구성 요소
Kafka는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버와 클라이언트로 구성된 분산 시스템이다
Kafka Server
•
Kafka는 하나 이상의 서버로 구성된 클러스터
•
서버 중 일부는 브로커라고 하는 스토리지 계층을 형성
•
그외 다른 서버는 Kafka Connect를 통해 스트리밍 → Kafka와 다른 시스템 (RDBMS, Other Kafka cluster)과 통합
Kafka Client
•
네트워크 또는 시스템 문제에도 고가용성을 보장하면서 이벤트 스트리밍을 병렬적으로 처리
•
Java, Scala, Go, Python, C, C++ Client Library 제공
Kafka 주요 개념
이벤트
발생한 일에 대한 기록
•
이벤트 = 레코드 = 메시지
•
kafka는 이벤트 형태로 데이터를 쓰고 읽는다
•
키 + 값 + 타임스탬프 (+ 선택적 메타데이터 헤더)
이벤트 키: 양망고
이벤트 값: 1,000,000,000원 입금
이벤트 타임스탬프: 2023년 7월 31일 8시 46분
Plain Text
복사
프로듀서(Producer)와 컨슈머(Consumer)
•
Producer와 Consumer 모두 Kafka Client
•
서로는 완전히 분리 → 확장성 달성의 핵심 이유
•
Producer
◦
이벤트 발행
•
Consumer
◦
이벤트 구독, 읽고 처리
토픽(Topic)
Analogy
Topic = 폴더, Event = 폴더 안의 파일
•
논리적 구분
•
이벤트가 저장되는 공간
•
관련 이벤트를 그룹화하고 영구적으로 저장
•
하나의 토픽에 여러 개의 프로듀서, 컨슈머 가능
•
기존의 Message Queue와 달리 이벤트는 소비 수 삭제되지 않음
◦
여러번 소비될 수 있음
◦
토픽별로 유지 기간을 설정할 수 있음 (보통 3~7일)
•
토픽 이름 자체가 고유한 식별자
파티션(Partition)
•
물리적 구분 (하나의 Queue 논리적 Topic)
•
토픽 생성 시 파티션의 개수를 지정할 수 있다
오프셋(Offset)
•
파티션의 레코드가 갖는 고유한 순서 정보 (식별자)
•
변경 불가능 하며 Kafka 관리 하에 계속 증가
•
offset 크기에 따른 순서는 각각의 partition 내에서만 보장
◦
전체 파티션을 대상으로는 순서 보장이 안 됨
◦
Timestamp 비교하는 건 어떨까? → Timestamp도 서버에서 찍는 거라서 서버마다 다를 수 있다
◦
운영체제 레벨에서 시간 동기화 가능 → 그래도 nanosecond까지 같은 시간에 발생한다면?
Kafka 브로커(Broker)
•
카프카 클러스터는 하나 이상의 브로커 서버로 구성 (정수 번호로 식별)
•
브로커는 여러 토픽을 갖는 컨데이너
•
클러스터 각각의 브로커는 전체의 일부 데이터만 갖지만, 각각이 다른 모든 브로커와 해당 브로커가 가진 파티션 및 토픽에 대해 알고있다
Kafka 클라이언트 API
•
Producer API: 하나 이상의 토픽에 이벤트를 발행하는 프로듀서 클라이언트 → data write하는 가장 낮은 수준의 API
•
Consumer API: 하나 이상의 토픽을 구독, 가져온 이벤트 스트림을 처리하는 컨슈머 클라이언트 → Kafka로부터 data read하는 가장 낮은 수준의 API
•
Streams API
◦
kafka에 대한 입출력을 stream으로 처리하는 추상화된 고수준 API
◦
내부적으로 Producer API, Consumer API 이용해서 구현
◦
ex) SQL(join), Cache, State (순서 ..)
•
Connector API
◦
기존 데이터 시스템 또는 애플리케이션과 kafka 사이의 데이터 이동의 쉽게 하도록 제공하는 고수준 API
◦
Connector 목적은 Consumer/Producer 클라이언트를 만들지 않고도 외부 시스템과 데이터 스트리밍을 할 수 있게