기본 콘텐츠로 건너뛰기
[ROAD TO DATA ENGINEER] Kafka Basic Concepts
Topic
- 특정한 data stream
- database의 테이블과 비슷한 개념
- 원하는 만큼 생성가능
- 이름으로 구분됨(identified by name)
- Topic들은 partition으로 나누어짐
- 각각의 파티션은 정렬되어있음
- partition 내에 있는 메시지들은 offset이라 불리는 incremental한 아이디를 가진다. ( partition 0, partition 1, ... )
- Offset은 오직 specific partition에서 의미가 있음.
- partition 내에서만 순서가 존재함(partition 간에는 순서가 보장되지 않음)
- Data가 제한된시간 (기본 1주)내에 존재함
- 데이터가 partition에 써지면, 바꿀수없음(immutability)
Brokers
- Kafka cluster는 broker(servers)들로 구성되어있다.
- broker들은 id로 구분
- 각각의 브로커는 특정 topic partition들을 가지고 있음
- 아무 브로커에게 연결되면 (called a bootstrap broker), 전체 클러스터에 연결됨
- Topic-A는 3개의 파티션, Topic-B는 2개의 파티션을 가지고 있음.
Topic replication factor
- broker가 down되어도 다른 broker가 계속 데이터를 서빙할수있음.
- 위 경우는 replication factor가 2인경우이다.
- 특정 한 partition에는 하나의 broker만이 leader가 될수 있다.
- 그 leader만 data를 주고 받을 수 있다.
- 다른 broker들은 leader의 데이터를 동기화한다.
- 이때 다른 broker들을 ISR(In-Sync-Replica)라고 부른다.
Producers
- ack=0: Producer는 ack를 기다리지 않는다.(data 손실가능)
- ack=1: Producer는 leader에대한 ack를 기다린다.(limited 데이터 손실)
- ack=all : Leader + replicas의 ack를 기다린다(data 손실 없음)
- Message Keys : key를 세팅해놓으면 특정 키에 해당하는 데이터들은 같은 partition에 저장된다
- key를 따로 세팅해두지 않으면 round robin 으로 broker 101, 102, 103 차례대로 데이터가 저장된다. (즉, 임의의 partition에 저장된다.)
Consumers
- Consumer들은 topic에 있는 데이터들을 읽는다.
- 어느 broker를 읽어야하는지 알고있다
- 또한 broker가 down됬을시 어떻게 대처할지도 알고있음.
- Data는 partition내에서만 순서대로 읽어진다.
Consumer Group
- 보통 하나의 application 단위를 Consumer Group이라고 한다
- Consumer Group에 있는 Consumer들은 서로 다른 partition들을 읽어들인다.
- partition 수보다 Consumer의 수가 더많으면, 몇몇 Consumer는 비활성화된다.
Consumer Offsets
- Kafka는 Consumer group이 읽은 offset을 저장한다.
- offset은 Kafka topic에 __consumer_offsets라는 이름을 저장된다.
- consumer가 데이터를 처리하고 나면 offset을 kafka에 commit 한다.
- consumer가 down되면 읽었던 부분부터 다시 읽어들일 수 있게 하기 위함이다.
Delivery Semantics for consumers
- Consumer들은 언제 offset을 커밋할지 선택할수있다.
- At most once
- message가 수신되자 마자 커밋
- processing이 잘못되면 message가 유실됨(다시 읽을 수 없음)
- At least Once (보통 선호됨)
- 데이터가 처리되고나서 커밋
- 처리가 잘못되면, 다시 읽음
- 같은 메시지를 여러번 처리할수 있기 때문에, processing이 idempotent하도록 해야함
- Exactly Once
Kafka Broker Discovery
- Kafka broker들은 bootstrap server라고 불리는데, 오직 하나의 broker에만 연결되면 된다는 의미이다. 하나의 broker에 연결되면 전체 클러스터에 연결된다.
- 개별 broker는 모든 broker들에 대한 정보와 topic, partition들에 대한 정보를 가지고 있다.
Zookeeper
- broker들을 관리함
- partition들에 대한 leader 선출을 수행하는데 도움을 줌
- new topic, broker dies, broker comes up, delete topics 등과 같은 정보들을 Kafka에게 알려줌
- Kafka는 Zookeeper없이는 작동할수 없음.
- Zookeeper는 홀수개의 서버로 동작함.
- Zookeeper에는 leader와 follower가 있는데, leader는 write를 담당하고 follower들은 read를 담당함.
- consumer offset은 Kafka topic에 저장되고 Zookeeper에는 더이상 저장되어있지 않음.
댓글
댓글 쓰기