일반적인 구조
점선은 구독을 의미하고, 실선은 요청 및 응답을 의미합니다.
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 모드를 도입하여, 클러스터 관리를 보다 단순화하고 있습니다.
댓글 (0)