기본 용어

Topic
- 메세지를 전달할 때 사용되는 명칭
- topic을 생성하고 해당 topic으로 전달
- 데이터를 전송 /저장/ 수신하는 논리적인 단위
- 저장된 데이터는 절대 변경 불가 (log형식)
Kafka Cluster
- topic별로 메시지를 분류하고 분산 저장
- consumer가 순서대로 가져가도록 offset을 관리
producer
consumer
broker
zookeeper
- 서버 관리용
- broker, topic 관리 및 모니터링
Topic

partition

- Producer는 하나의 topic의 메세지를 여러개의 partition으로 분산하여 저장
- partition은 또 여러개로 지정가능
- partition이 많으면 데이터를 병렬로 쓰고 읽어올수 있음
- 가져가는 쪽에서의 순서는 보장하지 않음
segment

- topic : strimzi_carary
- parition : 0
- index : offset기준 index, 시간 기준 index 두개 모두 지원함
offset이란?

- producer만 offset을 증가시킬 수 있음.
- 각 consumer는 자신이 마지막으로 읽은 위치를 저장함
offset lag
- producer offset - consumer offset
- lag이 커질수록 consumer의 문제 가능성이 높음
- lead : 현재 consumer offset - 0
Replication

- leader, follower가 존재함.
- follower의 갯수를 지정할 수 있음.
- 유실 방지를 위해서 만든 것
ISR
- In Sync Replica
- 복제본이 Sync가 되어있나
- 원본 partition이 정상적으로 복제가 완료된 partition들을 뜻함
- ISR 상태의 partition들만 leader로 선출 가능
- OSR : Out of Sync Replicas
- OSR은 ISR의 반대 개념으로 메시지가 복제되지 못하는 상태를 뜻함
- 이를 모니터링 하는 것도 필요 ( 복제가 되고 있는지 아닌지)
Broker
- Zookeeper가 있어야 존재할 수 있음.
- kafka Cluster을 중심으로 메시지를 분산 처리
- 데이터는 broker 서버가 있는 하드 디스크의 저장하기 때문에 하드 디스크 성능이 좋으면 전체 좋아짐
- 데이터 유실 방지를 위해 존재함
- 가용성을 위해 Broker는 최소 3개에서 4개 이상을 권장하지만, replication 개수에 따라 조정
- kafka broker를 bootstrap server라고 함
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic kv_topic
- controller broker : kafka Cluster에 속한 broker 상태 관리 및 topic의 상태 관리
- zookeeper cluster가 하는걸 active controller이 함.
Zookeeper
관리사항
- active controller만 각각의 broker 정보를 zookeeper에게 받음
- zookeeper 내에는 브로커에 대한 모든 정보들이 존재함. =
- topic, 상태, broker, partition 등등 모든 것을 관리하게 됨.
- producer, consumer 의 관리

가용성 확보
- zookeeper 서버 장애 발생시 시스템의 가용성 및 일관성 유지를 위해
- Quorum : 정족수 이며 과반수.
- 즉 , 정족수 때문에 홀수로 띄우고 보통 3대룰 띄움
Producer
데이터 구조

- value : 메세지
- header : 어떤 broker, 어떤 partition으로 보낼지, topic, partitions 등등
- topic은 꼭 사용자가 지정해줘야함.
- 나머진 모두 optional 하게 지정하게 지정해줌
- key : 넣어도 되고 아니여도됨
- key를 지정하지 않으면 라운드 로빈 방식으로 저장됨
- 그렇게 되면 순서를 유지하지 못하게 됨.
- 특정 키가 특정 파티션에 맵핑되도록 함. (순서보장)
- 하지만, 너무 한쪽 partition에 몰리게 하면 안됨. (데이터 불균형 = 데이타 스큐)
Serializer , Deserializer

- 네트워크를 통해 전송하기 위한 byte array 변환 , 재변환
Consumer
- 대량의 데이터를 빠르게 수신하는 프로그램

- 똑같은 데이터를 여러 곳에서 가지고 올 수 있음.
- partition하나당 consumer 하나씩이 가장 이상적인 방법
- 여러개의 컨슈머가 하나의 topic을 바라보면 이들은 모두 Group으로 묶임
- consumer offset : 내부적으로 topic을 만들고, offset을 기록하는 방식 -> 데이터 유실 방지

- 순서가 보장되지 않음