일반적인 구조
점선은 구독을 의미하고, 실선은 요청 및 응답을 의미합니다.
Producer
특정 Topic의 특정 파티션으로 메시지를 발행하는(생산하는) 생산체. 기본적으론 response를 받지 않는 단방향 통신입니다.
Broker
발행된 메시지를 저장하고 관리하는 시스템, 리더와 팔로워로 구성되며 일관성 유지 및 부하 분산 역할을 함.
Topic
특정 카테고리를 또는 피드를 의미하며, Consumer가 데이터를 읽는 출처(키 역할)
-
Partition
Topic을 구성하는 하위 단위. Topic은 하나 이상의 파티션으로 나뉘어져 있고, 이를 통해 메시지를 병렬로 처리할 수 있게 된다.
Partition을 늘린다는건 해당 topic에 대해서 메세지의 출구를 늘린다는 의미이다. key 처리를 안할 경우 순서를 보장할 수 없다.(같은 Partition에 대해서만 순서가 보장됨)
-
Partition에서의 순서 보장
Kafka에서는 하나의 토픽이 여러 파티션으로 나뉘어 저장된다. 이 파티션들은 클러스터 내의 서로 다른 브로커들에 분산되어 저장될 수 있다.
예를 들어, ‘Topic 1’이라는 토픽이 있을 때, 이 토픽의 ‘Partition 1’은 ‘Broker 1’에, ‘Partition 2’는 ‘Broker 2’에 저장될 수 있다.
그래서 순서 보장을 위해 Producer에서 메시지를 생성 시 key를 설정하면 항상 동일 파티션으로 배정되기 때문에 순서를 보장할 수 있다.
Consumer
특정 Topic을 구독하여 파티션에서 메시지를 가져와 애플리케이션 동작에 맞는 로직을 수행하는 주체. 하나 이상의 토픽을 구독할 수 있다.
Zookeeper
코디네이션 서비스 시스템으로 클러스터의 상태를 관리하고, 리더를 채택하고, 클러스터(원래 용도는 분산 시스템)간 데이터 락을 관리하여 불일치 방지. 최근 Kafka에서는 Zookeeper를 대체하는 KRaft 모드를 도입하여, 클러스터 관리를 보다 단순화하고 있습니다.