Kafka 구성 알아보기 2
Topics
특별한 카테고리의 메시지 스트림을 topic이라 불른다. topic들로 데이터는 저장된다.
topic들은 파티션 안으로 분할된다. 각 topic은 kafka 하나의 작은 파티션으로 보관한다. 이러한 파티션은 불변형의 정렬된 시퀀스 형태로 메시지를 포함하고 있다. 파티션은 동일한 사이즈의 파일조각으로 구현되어져 있다.
Partition
topic들은 아마도 많은 파티션을 가지고 있다, 그래서 이것은 데이터의 크기를 임의로 다룰 수 있다.
Partition offset
각 메시지들은 “offset”이라는 유일한 시퀀스 id로 분활되어 집니다.
Replicas of partition
복제는 파티션의 백업일 뿐이다. 복제는 절대 데이터를 읽거나 쓰지 않는다. 이것은 데이터의 유실을 방지하는 것이다.
Brokers
브로커는 데이터를 퍼블리쉬 하고 보관하기 위한 단순 응답 시스템이다. 각 브로커들은 아마도 topic 마다 0개 또는 많은 파티션을 가지고 있다. 추정하건데, 만약 Topic의 N개의 파티션과 N개의 브로커가 있을 때, 각 브로커는 1개의 파티션을 가질 것이다.
추정하건데, 만약 1개의 Topic에 대해 N개의 파티션과 N개보다 많은 브로커가 있을 때(N+M), 첫번째 N 브로커는 1개의 파티션을 가질 것이고 다음번 M 브로커는 어떤 특별한 topic의 파티션도 가질 수 없을 것이다.
추정하건데, 만약 1개의 Topic에 N개의 파티션과 N개보다 적은 브로커(N-M)이 있을 때 각 브로커는 1개 또는 그 이상의 파티션을 공유할 것입니다. 이런 시나리오는 브로커들에게 동등하지 않는 부하 분산을 하는 것을 추천하지 않습니다.
Kafka cluster
1개 이상의 브로커를 가진 카프카를 Kafka cluster라 부릅니다. 카프카 클러스터는 정지(downtime)없이 확장할 수 있습니다. 이런 클러스터는 메시지 데이터의 복제본과 영속하는 것을 관리하기 유용합니다.
Producer
생산자는 1개 또는 그이상의 kafka topic으로 메시지를 발행합니다.
생산자는 kafka 브로커로 데이터를 보냅니다. 매번 생성자가 브로커에게 메시지를 발행할 때, 브로커는 마지막 segment file에 단순하게 더합니다. 실제로, 메시지는 파티션에 더해질 것입니다. 생산자는 선택된 파티션에게 메시지를 보낼 수 있습니다.
Consumer
소비자는 브로커로부터 데이터를 읽습니다. 소비자들은 1개 이상의 topic을 구독할 수 있으며, 브로커로 부터 데이터를 가져와서 소비할 수 있습니다.
Leader
“Leader”는 주어진 파티션의 모든 읽고 쓰기를 책임지는 노드입니다. 모든 파티션은 1개의 리더 역활을 하는 서버를 가지고 있습니다.
Follower
리더의 지시를 따르는 노드를 Follower라고 합니다. 만약 리더가 실패하면(장애가 발생하면?), follower중 하나가 자동적으로 새로운 리더가 됩니다. 1개의 follower는 정상적인 소비자로 역할을 합니다. 메시지를 가져오거나 그들 자신의 데이터 스토어로 갱신합니다.
 Broker
카프카 클러스터는 일반적으로 부하 분산을 위해 다중 브로커로 존재합니다. 카프카 브로커는 stateless 합니다, 그래서 클러스터 상태를 유지하기 위해서 zookeeper를 사용합니다. 1개의 카프카 브로커 인스턴스는 초당 수십만의 읽기, 쓰기를 처리할 수 있으며, 각 브로커는 TB의 메시지를 성능의 영향 없이 처리할 수 있습니다.
Zookeepr
주키퍼는 카프카 브로커를 관리하거나 조정하는데 사용됩니다. 주키퍼의 주된 서비스는 카프카 시스템에서 어떤 새로운 브로커가 존재하는 것을 소비자와 생산자에게 알려주는 것입니다. 주키퍼로 부터 브로커의 실패나 존재에 관하여 알림을 받을 때 마다, 생산자와 소비자는 어떤 브로커에서 작업을 가져와서 시작할지 조정합니다.
Producer
생산자들은 데이터를 브로커한테 넣습니다. 새로운 브로커가 지가될 때, 모든 생산자는 이것들을 찾게 되고 자동적으로 새로운 브로커에게 메시지를 보냅니다. 카프카 생산자는 브로커로부터 답신을 기다리지 않으며, 브로커가 처리할 수 있을 만큼 빠르게 메시지를 보냅니다.
Consumer
카프카 브로커들은 stateless 합니다. 이는 소비자가 파티션 offset을 사용하여 소비 된 메시지 수를 유지해야 함을 의미합니다. 소비자가 특정 메시지 오프셋을 확인하면 소비자가 모든 이전 메시지를 소비했음을 의미합니다. 소비자는 브로커에 비동기 끌어 오기 요청을 보내 소비 할 준비가 된 바이트 버퍼를 갖게합니다. 소비자는 단순히 오프셋 값을 제공하여 파티션의 어떤 지점으로 되감거나 건너 뛸 수 있습니다. 소비자 오프셋 값은 ZooKeeper에 의해 통지됩니다.