Apache Kafka: 오픈 소스 분산 이벤트 스트리밍 플랫폼
- 이벤트 스트림을 지속적으로 발행(publish-write), 구독(subscribe-read)
- 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장(store). KafkaCluster(broker)
- 이벤트 스트림을 발생 시 또는 소급하여 처리(Process).
Kafka 특징
Kafka를 사용하는 이유
고성능
- 여러 개의 Producer 및 Consumer가 독립적으로 메시지 처리
- 디스크 기반의 이벤트 보존
- 지속해서 보존 가능
- Consumer가 장애로 Restart 되더라도 누적된 메시지 처리가능
- Broker 단순한 업무
- Broker 기능은 Consumer와 Partition이라는 Mapping만 진행
- 메시지 필터, 메시지 재전송과 같은 일은 Procducer, Consumer 위임
- 확장성(scale out) : Broker, Partition, Consumer 증가로 수평 확장이 쉽게 가능
고가용성
Kafka의 Topic은 Partition이라는 단위로 쪼개어져 클러스터의 각 서버들에 분산되어 저장
고가용성을 위하여 복제(replication) 설정을 할 경우 이 또한 partition 단위로 각 서버들에 분산되어 복제되고 장애가 발생하면 Partition 단위로 Fail Over가 수행된다.
- Replication : Topic내 Partition의 복제본. replication-factor를 통해 개수를 지정할 수 있다.
- 복제수(replication factor)만큼 파티션의 복제본이 각 브로커에 생김
- 토픽 생성시 복제수를 2로 하면 파티션이 2개가 각각의 브로커에 생김
- leader와 follower로 구성
- Procducer & Consumer는 리더를 통해서만 메시지 처리
- 팔로워는 리더가 속한 브로커에서 메시지를 복제함
- 리더가 속한 Broker가 장애나면 다른 팔로워가 리더가 되어서 처리
Kafka 구성 요소
Kafka 사용 객체 및 인프라
KafkaCluster: 카프카의 브로커들의 모임. Kafka는 확장성과 고가용성을 위하여 broker들이 클러스터로 구성
Broker: 각각의 카프카 서버, 동일 노드에 여러 브로커를 띄울 수 있다.
Zookeeper: 카프카 클러스터 정보 및 분산처리 관리 등 메타데이터 저장. 카프카를 띄우기 위해 반드시 실행되어야 함(곧 카프카 클러스터와 통합 예정)
Producer: 메시지(이벤트)를 발행하여 생산(Wirte) 하는 주체
Consumer: 메시지(이벤트)를 구독하여 소비(Read) 하는 주체
Kafka 용어 정리
카프카에 저장되는 메시지는 topic으로 분류, topic은 여러개의 patition으로 나눠짐
Topic: 메시지를 구분하는 단위
- 파일시스템의 폴더, 메일함과 유사함 ex) 주문용 토픽, 결제용 토픽 등
Partition: 메세지를 저장하는 물리적인 파일
- 한 개의 토픽은 한 개 이상의 파티션으로 구성됨
- 파티션은 메시지 추가만 가능한 파일(append-only)
offset: 파티션내 각 메시지의 저장된 상대적 위치