Why Kafka?
- Multiple Producers/Consumers. 하나의 topic에 대하여 여러 Producers 가 message 를 전송하고 여러 Consumers 가 message 를 소비하는 구조로 주아앙 집중형 구조로 구성
- Disk-Based Retention
. 다른 message system과 틀리게 일정 기간동안 디스크에 message를 저장 -> 메시지의 손실을 방지 - Scalable
. kafka cluster를 통하여 확장이 매우 용이 하게 설계 - High Performance
. 분산처리 - 동일한 기능을 하는 여러대의 서버로 이뤄진 분산 시스템으로 구성되어, 단일 시스템보다 더 높은 성능을 얻으며, SPOF 극복
. 배치 처리 - 작은 i/o 에 대하여 묶어서 처리 하여 속도 향상에 도움
. 페이지 캐시 - 파일시스템에 쓰기전에 페이지캐시를 통하여 높은 속도 보장(실제로 하드웨어 권고 사항에 sata disk를 사용해도 무방하다고 함)
Kafka component
- broker : kafka application 이 설치 되어 있는 노드
- topic : message를 구분 하기 위해서 사용 하는 이름
- procuder : message를 브로커의 topic으로 전송하는 서버나 application
- consumer : broker의 topic 에서 저장된 message를 가져오는 서버나 application
Kafka partition
- producer 가 message 를 전송 할 때 1개의 topic으로 partitioning 이 안되어 있나면 1개의 message를 낼 때 1초가 걸린다면 3개의 message를 보낼때 3초가 소요 된다.
- partitioning 된다면 동일한 작업에 대하여 partition 갯수에 비례 하여 처리 속도가 향상 된다.
- partition 은 topic을 생성할때 --partitions 옵션을 통하여 구성 할 수 있다.
- partition 을 3개로 생성 하여 아래와 같이 3개의 partition이 생성 된 걸을 확인 할 수 있다.
- 만약 운영중 partition 을 더 추가해야 할 경우가 있을 수 있다. 그럴경우 --alter 옵션을 통하여 변경 가능 하다.
- partition을 추가 할 경우 message순서에 영향이 있을 수 있다는 경고 와 함께 partition이 추가 되는 것을 확인 할 수 있다.
( partition 을 무조건 증가 했다고 전체 처리 성능이 증가 하는 것은 아니며, 그만큼 consumer가 추가 되어야 한다 . 또한 추가만 가능 하며, 줄일 수는 없다.)
- partition은 장점과 함께 단점이 있으니 처음부터 많은 partitioning 을 하는 것 보다, 적은 수의 partition을 생성하고 추가 하는 방식으로 가는 것이 좋으며, kafka 에서는 broker당 2,000 개의 최대 partion을 권고 하고 있다.
- 너무 많은 partion 은 장애시간만 증가 시키는 단점이 있음
Kafka replication
- 고가용성을 위하여 topic에 대한 replication(복제) 기능을 제공 하고 있으며 아래와 같이 --replication-factor 라는 옵션을 통하여 replication 갯수를 지정 하여 topic을 생성 할 수 있다.
- 아래 repl 이라는 topic을 1 개의 partition으로 2개의 replication으로 생성 했는데 , Leader와 replicas를 확인 해야 한다.
- kafka cluster 는 replication을 할 경우 broker들 간에 leader를 우선 선출 한다. 이때 선출된 leader는 모든 Read/Write 가 발생한다.
- Leader는 follower라는 replication 대상으로 message를 replication 하는 방식으로 고가용성을 보장 할 수 있도록 한다.
- 만약 Leader가 장애 발생된다면. 아래 처럼 다른 follower가 Leader로 승격 한다.(장애 복구시 원래 Leader가 다시 Leader로 승격 되지 않으며, Leader 장애시에만 승격된다.
- 그렇다면 Leader와 Follower선출과 데이터의 무결성을 어떻게 처리 할까 ? kafka 에서는 ISR( In Sync Replic) 이라는 개념으로 통하여 이를 해결 하였다.
- ISR은 replication group 이라고 할 수 있는데, replication factor 3으로 설정 되어 있을 경우 아래 처럼 특정 broker가 leader 나머지 broker가 follewer가 된다.
- 여기서 message가 leader로 전송이 지속적으로 되는 상태에서 , follewer는 지속 적으로 변경사항을 요청한다. 그리고 Leader 가 변경 사항을 전달하는 Pull방식으로replication이 된다.
- 만약 , follewer에서 Leader로 일정 기간 동안 변경사항을 요청 하지 않을 경우 , 해당 follower에 대하여 Leader는 ISR로 유지 하지 않는다.
- 그렇게 되어 ISR에서 해당 broker에서 방출 된다.
반응형
'System > Kafka' 카테고리의 다른 글
kafka manager (0) | 2018.07.08 |
---|---|
zookeeper-kafka cluster install (0) | 2018.07.07 |
Kafka Default install test (0) | 2017.09.30 |