Kafka
- zookeeper
- kafka cluster
- brocker
- topic
- partition
- topic
- brocker
- kafka cluster
- producer
- consumer group
- consumer
zookeeper
위와 같은 역할을 하는 요소들이 있다. 각각의 역할을 보자.
카프카 = kafka cluster 이고 카프카를 여러개 띄웠을 때 관리하는 역할이 zookeeper이다.
Broker
kafka cluster는 여러개의 브로커를 가질 수 있고 브로커는 topic 으로 메세지를 구분한다.
한 개의 topic은 한 개 이상의 파티션으로 구성돼있고 파티션은 기본적으로 추가만 가능한 공간이다.
파티션에 저장된 메세지의 저장 위치를 오프셋 이라고 한다.
컨슈머가 파티션을 소비해도 메세지는 삭제되지 않는다.
topic의 특정 파티션에 저장하려면 키를 이용하면 된다.
키를 이용하지 않으면 해당 topic의 파티션들에 라운드 로빈으로 저장된다.
Consumer
consumer는 consumer group에 속해있고
한 개 파티션은 consumer group의 한 개 consumer에만 연결 가능하다.
예를 보자면 consumer group에 컨슈머1, 컨슈머2 가 있을 때 컨슈머1,2를 파티션1 에 연결할 수 없다. 다른 그룹의 컨슈머는 파티션1에 연결할 수 있다.
그래서 하나의 consumer group 기준으로 파티션 메시지는 순서대로 처리되는 것을 보장할 수 있다.
Producer
Serializer를 통해 byte 배열로 변환하고 Partitioner을 통해 어느 파티션으로 보낼지 결정을 한다.
그 다음 변환된 byte 배열을 배치로 묶어서 버퍼에 저장한다.
그 후 배치를 전송한다. Sender 라 하고 Serializer / Partitioner 과는 별도의 쓰레드에서 동작한다.
즉 Serializer > Partitioner > 배치 버퍼 > Sender 일련의 과정이 아니라
'Serializer > Partitioner > 배치 버퍼' 대로 동작하고
'Sender' 대로 동작한다.
Replication
카프카는 장애에 대처하는 방법으로 리플리카(복제) 가 있다.
복제수 만큼 파티션의 복제본이 다른 브로커에 생긴다. 그렇게 생겨난 파티션들 중에서 하나는 리더가 되고 나머지는 팔로워가 된다. 프로듀서와 컨슈머는 리더를 통해서만 메세지를 처리하고 나머지 팔로워들은 리더에 추가된 메세지를 읽어와서 복제한다.
리더가 속한 브로커 장애시 다른 팔로워가 리더가 된다.
확장성
카프카는 수평적 확장에 용이하다. 1개 장비의 용량 한계가 다다르면 브로커와 파티션을 추가하면 되고 컨슈머가 느리다면 컨슈머를 추가하면 된다.
참고 자료
https://www.youtube.com/watch?v=0Ssx7jJJADI&t=275s
카프카(kafka) - VSCode에서 Java Producer/Consumer 생성 with Gradle
들어가며.. Docker 환경, 카프카 클러스터 구축 및 토픽생성, 메시지 전송 Docker hub에 등록된 카프카 이미지(bitnami)를 사용하여 카프카 클러스터를 구축하고, 카프카에서 제공하는 쉘스크립트를 사
youngwonhan-family.tistory.com
'back-end > kafka' 카테고리의 다른 글
| kafka-spring Producer key에 따른 partition 배정 (0) | 2023.09.03 |
|---|---|
| docker bitnami/kafka 주키퍼없이(KRaft) (0) | 2023.09.02 |
| spring kafka - @KafkaListener Annotation (0) | 2023.09.02 |