kafka가 멀까
| topics | 400-인프라 & 아키텍처 404 마이크로서비스(MSA) |
| types | 이론 학습 |
| tags | #kafka #msa #event-driven |
| references | www.youtube.com/watch |
Apache Kafka
대규모 실시간 데이터를 처리하는 오픈소스 분산형 이벤트 스트리밍 플랫폼
핵심 특성: 분산(Distributed), 유연(Resilient), 장애에 강함(Fault Tolerant)
특징
- 높은 처리량
- 컨슈머/프로듀서가 브로커와 통신할 때 데이터를 묶어서(배치) 전송
- 파티션 개수만큼 컨슈머를 늘려서 병렬 처리량을 늘릴 수 있음
- 높은 퍼포먼스 ( 10ms 미만의 지연 )– real time
- 확장성
- 데이터 양이 많아지거나 줄어짐에 따라 무중단 스케일인/아웃 가능(수평 확장)
- 100 개의 Broker 까지 확장
- 1초에 100만개의 메세지
- 무중단 확장 가능
- 영속성
- 파일 시스템에 데이터를 저장
- 브로커에 이슈가 발생하여 종료되더라도 데이터 재사용 가능
- 고가용성
- 일부 브로커에 이슈가 생기더라도 데이터를 지속해서 처리 가능
- 온 프레미스/퍼블릭 클라우드에 적합한 브로커 옵션 선택 가능
- 수평 확장 가능
- 100 개의 Broker 까지 확장
- 1초에 100만개의 메세지
- 무중단 확장 가능
- 높은 퍼포먼스 ( 10ms 미만의 지연 )– real time
주요 용어
포함 관계 : 브로커 ⊃ 토픽 ⊃ 파티션
### 토픽
- 메시지를 분류하고 저장하는 기본 단위
- 특정 데이터 스트림, 즉 메시지를 구분 하는 통로
- 단톡방개념(요청들을 묶어서 분류하는 단위같은 느뀜..)
- 토픽으로 구분하여 원하는 메시지를 찾는 방식
- pub,sub 이 토픽단위로 되는듯
- 이름으로 구분됨
- if 회사 공용, 토픽의 오너십(ownership)을 가진 팀의 이름을 토픽 이름에 추가
- 개발환경 / 애플리케이션 / 데이터 타입 유추을 고려해서 지음
### 파티션
- 토픽당 데이터를 분산 처리하는 단위
- 메시지는 파티션에 순서대로 저장(파티션 내에선 순서가 보장된다는 것)
- 각각의 파티션은 0부터 1, 2, … 의 Index를 가짐
- 이 인덱스를 offset이라캄(파티션 내에서만 의미잇음)
- FIFO
- 파티션 내 데이터는 변경불가
- Key 를 주지 않으면 어느 파티션에 데이터가 들어갈지 모름
브로커
- Kafka 클러스터를 구성하는 핵심 서버 단위(노드)
- 서버하나하나를 브로커라고 부른다는 뜻
- 각 브로커는 토픽과 파티션을 가짐
- 3개로 시작해서 100개까지 늘릴수 있음
주키퍼
- 브로커 관리함
- 브로커와 주키퍼는 DB와 DBMS관계와 같은듯
- 주키퍼 클러스터는 홀수로 동작
- 왜? 중요한 결정할때 과반수를 따름
- 중요한결정 aka 리더선출, 데이터쓰기 등
- 왜? 중요한 결정할때 과반수를 따름
- 리더선출
- 노드의 리더를 선출함, 나머지는 Follower
- 노드에서 Leader 는 write, Follower 는 read 작업을 함
- 파티션의 리더선출도 도와줌
- 파티션의리더만 읽고쓰기가능
- 나머진 ISR(In Sync Replica)역할
- 리더의 데이터를 체크하여 복제하고, 리더가 장애시 리더 역할함
- 분산락(유노? 프로세스 데이터접근할때 햇던 그거임)
- 다아 일관성이랑 무결성을 유지하기위한~
- 서비스 디스커버리
- 서비스가 어디서 실행 중인지 중앙에서 관리
- 상태관리를한다는거임
- 상태가 변경되면 알림을 줌
- like ( 토픽 생성, 브로커 die, 브로커 up, 토픽 삭제 )
- 상태가 변경되면 알림을 줌
- 주요 설정
- Topic Replication factor
- 토픽을 몇개 복제해놓을건데를 정하는
- 리소스량은 증가 <-> 안정성도 증가
- Topic Replication factor
프로듀서
- 말그대로 메세지를 만들어 토픽으로 보내는 것들
- 애플리케이션, 서버등
- 주요 설정
- key : 설정해 메세지를 특정 파티션에 보낼 수 있음
- 약간순서 보장필요할때 이거쓰면될듯?
- 키옵션 ㄴㄴ일땐 라운드로빈방식으로 균등하게
- ack : 메세지 저장 확인 응답관련설정
- 0 : 응답기다리지 않음 > 빠르지만 안정성구림
- 1 : 프로듀서는 리더의 응답만 체크 > 적당함
- all / -1 : 모든 파티션의 응답 확인
- key : 설정해 메세지를 특정 파티션에 보낼 수 있음
컨슈머
- 메세지를 쓰는 것들
- Kafka는 Consumer Group 단위로 데이터를 처리
- Consumer Group 은 당연히 컨슈머를 묶은거
- Message Lagging이 높을 경우, 컨슈머를 증가시킴
- Consumer Group 은 당연히 컨슈머를 묶은거
CDC (Change Data Capture)
데이터베이스의 변경 사항(삽입, 수정, 삭제)을 실시간으로 감지해서 다른 시스템으로 전달하는 기술
어디에 쓸까?
- 실시간 스트리밍 데이터 파이프라인을 구축하는 데 사용
- MSA에서 이벤트 중심 메시징 시스템의 구현을 위해 사용
- 실시간 로그 수집에사용
- 실시간 스트리밍서비스에서 사용
- Spark, Storm, Flink, Hadoop 등 많은 빅데이터 기술과 통합하여 사용
주요 명령어
kafka-topics --bootstrap-server http://localhost:9092 --topic example --describe
kafka-topics --bootstrap-server http://localhost:9092 --list --exclude-internal
kafka-topics --bootstrap-server http://localhost:9092 --topic aivle --create --partitions 1 --replication-factor 1