Distribution

topic의 partition들은 Kafka 클러스터를 구성하는 서버들에 분산 저장이 된다.
partition들은 내고장성을 위해 여러 서버에 복제되며 복제되는 서버의 수를 설정
할 수 있다.


각 partition은 1대의 leader 서버와 0대 이상의 follower 서버들로 구성된다.

(즉, leader 서버 1대로도 Kafka 사용이 가능하다.)

leader는 읽기 쓰기가 모두 가능하고 follower들은 leader의 데이터를 복제한다.


만일 leader가 고장나면 follower 중 한 대를 leader로 선출한다.
이런 구조로 클러스터 내에서의 부하가 적절히 분산된다.


지난 포스팅 (Apache kafka 시작하기)에서의 기억을 더듬어보면
일단 클러스터 내의 복제 서버는 총 5대로 설정되어있다. zookeeper의
server.0 ~ server.4 설정과 Kafka server.properties에서의
zookeeper.connect 설정에 맥미니 5대의 host name이 설정된 것을
확인 할 수 있다.


그리고 이 상태에서 다음과 같이 토픽을 생성할 때 처음에 오류가 발생을 했었다.

SECONDARY-NAMENODE:bin mazdah$ ./kafka-topics.sh --create --zookeeper SECONDARY-NAMENODE.local:2181 --replication-factor 5 --partition 20 --topic test 


원인은 SECONDARY-NAMENODE.local은 leader가 아니었고 그렇기 때문에
복제만 가능하고 write가 불가능했던 것이다. 
결국 leader인 NAMENODE.local을 이용하여 topic 생성에 성공했다.


그리고 이렇게 생성된 topic은 5대의 서버의 로그 디렉토리 
(server.propertiesd에 log.dirs로 설정된 위치 - 나의 경우 /tmp/kafka-logs)에
다음과 같이 뭔가 생성된 것을 확인할 수 있었다.



Producer

Producer는 선택한 topic으로 데이터를 발행한다.
Producer는 메시지를 발행할 topic을 선택하는 책임을 지는데
전통적인 round-robin 방식을 이용하여 균등하게 발행을 하거나
아니면 메시지의 어떤 키를 이용하여 특정 partition에는 특정 키를 가진
메시지만을 보낼 수 있다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요