Kafka?
카프카?(Kafka)
Kafka는 LinkedIn에서 개발한 분산 스트리밍 플랫폼, 오픈 소스 메시지 브로커
메시징, 메트릭 수집, 로그 수집, 스트림 처리 등 다양한 용도로 사용 가능
+메세지 큐(메시지, 요청을 저장하고 있다가 필요할 때 보내준다)
+서버와 서버가 통신할때 카프카를 통해 연결 복잡도를 줄여준다.(단순화한다.)
-특징
빠르다 : 수 천 개의 데이터 소스로 부터 초당 수백 메가바이트의 데이터를 입력받아도 안정적으로 처리 가능
확장가능 : 메시지를 파티션으로 분리하여 분산 저장, 처리할 수 있어 클러스터로 구성하여 확장 가능
안정적이다 : 클러스터에 파티션 복제하여 장애 내구성을 가짐
-구조
발행/구독(Pub/Sub) 모델
Kafka는 발행-구독(Pub/Sub) 모델을 기반으로 동작
발행-구독 모델은 발행자(Producer)가 메시지를 특정 수신자에게 직접 보내는 방식이 아니라
주제(topic)에 맞게 브로커에게 전달하면 구독자(Consumer)가 브로커에 요청해서 가져가는 방식
발행자는 메시지를 topic으로 카테고리화
구독자는 topic에 맞는 메시지를 브로커에게 요청
발행자와 구독자는 서로 알지 못함
-용어
Topic, Partiton
Producer, Consumer, Broker
Zookeeper
*Zookeeper?(주키퍼) = 프로그램의 클러스터링(=군집화)
카프카는 주키퍼가 없으면 동작하지 않는다.)
Consumer Group
Replication
-Topic-Partition
Topic
메시지는 topic으로 분류
topic은 발행자가 스트림을 발행하는 단위
스트림의 발행과 구독은 topic단위로 처리
Partition
하나의 topic은 여러 개의 파티션으로 저장할 수 있음
1개의 토픽은 여러 개의 파티션으로 저장되고, 하나의 파티션은 여러 개의 로그로 기록
1:N = Topic:Partition, 1:N = Partition:Log
하나의 토픽을 여러 파티션으로 나누면 메세지 분산 처리로 처리량을 높일 수 있고, 분산 저장을 통해 오류가 발생할 때 데이터를 복구할 수 있음
파티션의 크기는 운영 중에 동적으로 줄일 수 없기 때문에 파티션 개수를 설정할 때 주의해야 함
-Producer, Consumer
발행자(Producer)
메세지를 생산하는 주체
메세지를 만들고 브로커(Broker)에게 토픽(Topic)으로 분류된 메시지를 전달
메시지는 배치 형태로 전달
발행자는 구독자의 존재를 알지 못함
구독자(Consumer)
소비자로 메세지를 소비하는 주체
발행자의 존재를 알지 못함
원하는 토픽을 구독하여 스스로 조절해 가면서 소비할 수 있음
원하는 토픽의 각 파티션에 존재하는 오프셋의 위치를 기억하고 관리하여 데이터의 중복을 관리
오프셋 관리를 통해 발행자, 구독자에 장애가 발생해도 마지막으로 읽었던 위치에서부터 다시 구독 가능
fail-over에 대한 신뢰가 존재
브로커(Kafka Cluster)
클러스터로 구성된 메시지 큐
메시지는 클러스터에 파티션 단위로 나누어 관리/복제됨
파일 시스템에 메시지를 저장하므로 유실이 없고 복구 가능
하드디스크의 순차적 읽기 기능을 이용하여 속도를 유지
구독자가 메시지를 가져가도 바로 삭제하지 않음
기본 설정은 7일간 저장하고 삭제