Toggle navigation
DevPj
Blog
Android
Java
Springboot
Docker
Kubernetes
Kafka
Nodejs
Os
Network
DesignPattern
DataStructure
Algorithm
Linux
FrontEnd
Database
Life
Portfolio
Donate
Blog
Android
Java
Springboot
Docker
Kubernetes
Kafka
Nodejs
Os
Network
DesignPattern
DataStructure
Algorithm
Linux
FrontEnd
Database
Life
Portfolio
Donate
Kafka
26 Mar 2022
Kafka 개요
카프카 사용이유
중앙화된 전송영역이 없어 end to end 연결이 복잡해진다.
데이터 파이프라인 관리가 어려워짐
연결 시스템마다 다른 방식으로 구현될 수 있다.
메시지 발행과 구독
메시지 발행 시스템에서는 데이터를 발행자 가 직접 구독자에게 보내지 않는다.
메시지는 발행자가 메시지를 구분해서 발행/구독 시스템에 전송하면 구독자가 특정 부류의 메시지를 구독하게 해준다. 이때 메시지를 저장하고 중계하는 역할을 브로커라고 한다.
Kafka 정의
Distributed commit log
Dittributed streaming platform
-> 데이터를 지속해서 저장하고 읽을 수 있으며 확장에 따른 성능저하를 방지하기위해 데이터가 분산 처리될 수 있다.
메시지와 배치
데이터의 기본 단위로서 메시지 사용
메시지를 바이트 배열의 데이터로 간주하므로 특정 형식이나 의미를 갖지 않는다.
카프카의 메시지 데이터는 topic로 분류된 partition에 수록되는데 이때 데이터를 수록할 파티션을 결정하기위해 일관된 해시 값으로 키를 생성한다.
카프카는 메시지가 생길때마다 보내는게 아닌 효율성을 위해 모아서 전송하는 형태의 배치로 파티션에 전송할 수 있다.
이 경우 latency와 throughput(처리량) 과 트레이드 오프 가 생길 수 있다.
배치의 크기 증가 -> 단위 시간당 처리되는 메시지 양 증가
배치의 크기 증가 -> 메시지의 전송 시간 증가
스키마
카프카는 메시지를 바이트 배열로 처리하지만 내용 이해를 위해 메시지의 구조를 스키마로 표현할 수 있다.
ex) Json, XML
Avro 사용
토픽과 파티션
카프카의 메시지는 토픽(topic)으로 분류하며 토픽은 DB의 테이블, 파일 시스템의 폴더와 유사
토픽은 여러개의 파티션으로 구성된다.
메시지는 파티션에 추가되는 형태로만 수록
맨 앞부터 끝까지 순서대로 읽힌다.
메시지의 처리 순서는 토픽이 아닌 파티션별로 유지 관리된다.
각 파티션은 서로 다른 서버에 분산(서로 다른 브로커에) 될 수 있다.
프로듀서와 컨슈머
Producer
새로운 메시지를 발행
메시지는 특정 토픽으로 생성되며 어떤 파티션에 수록되는지 보통 관여하지 않음
프로듀서가 특정 파티션에 메시지를 직접 쓰는 경우 메시지키와 파티셔너를 이용해 해시값을 생성하고 특정 파티션에 대응시켜 항상 같은 파티션에 수록되게 해준다.
Consumer
메시지를 읽는 주체
하나 이상의 토픽을 구독하여
메시지가 생성된 순서
대로 읽는다.
메시지의 오프셋을 유지하여 메시지의 읽는 위치를 알 수 있다.
오프셋은 지속적으로 증가하는 정수값
이며 메시지가 생성될때 카프카가 추가해준다.
파티션에 수록된 각 메시지는 고유한 오프셋을 갖는다.
주키퍼나 카프카에서는 각 파티션에서 마지막에 읽은 메시지의 오프셋을 저장
하고 있으므로 컨슈머가 메시지 읽기를 중단했다 다시 시작해도 언제든 다음부터 읽을 수 있다.
컨슈머는 컨슈머그룹의 멤버로 동작
한 토픽을 소비하기위해 같은 그룹의 여러 컨슈머가 함께 동작한다.
한 토픽의 각 파티션은 하나의 컨슈머만 소비할 수 있다.
한 컨슈머가 자신의 파티션 메시지를 읽는데 실패해도 같은 그룹의 다른 컨슈머가 파티션 소유권을 재조정 받고 실패한 컨슈머의 파티션 메시지를 대신 읽을 수 있다.
브로커와 클러스터
하나의 카프카 서버를 브로커라고 한다.
프로듀서로부터 메시지를 수신하고 오프셋을 지정한 후 해당 메시지를 디스크에 저장한다.
카프카의 브로커는 클러스터의 일부로 동작하도록 설계됨
여러개의 브로커가 하나의 클러스터에 포함 가능
여러개의 브로커중 1개는 클러스터 컨트롤러의 기능 수행
클로스터 컨트롤러는 각 브로커에게 담당 파티션 할당,브로커들의 정상 동작 유무 감시및 모니터링
각 파티션은 클러스터의 한 브로커가 소유, 그 브로커를 파티션 리더라고 한다.
같은 파티션이 여러 브로커에 지정 될 수도 있으며 이때 해당 파티션이 복제된다 이때 메시지는 중복저장 되지만 관련 브로커에 장애 발생시 다른 브로커가 소유권을 인계 받아 그 파티션을 처리할 수 있다.
ex) db의 master slave의 동작 원리와 유사하다.
각 파티션을 사용하는 모든 컨슈머와 프로듀서는 파티션 리더에 연결해야 한다.
다중 클러스터
데이터 타입 따라 구분및 처리
요구사항에 따라 분리 처리
다중 데이터 센터 처리
다중 클러스터를 지원하기 위해 미러 메이커를 사용한다.
미러 메이커또한 컨슈머와 프로듀서이며 미러메이커 끼리는 큐로 상호 연결된다.
카프카를 사용하는 이유
다중 프로듀서,컨슈머
다중 프로듀서,컨슈머가 상호 간섭없이 어떤 메시지 스트림도 읽을 수 있다.
디스크 기반 보존
메시지를 보존할 수 있어 컨슈머를 항상 실시간 실행시키지 않아도 된다.
처리가 느리거나 접속이 폭주해서 메시지 읽는데 실패해도 데이터가 유실될 위험이 적다.
확장성
브로커 1대부터 시작하여 규모에 따라 브로커를 수백대로 증가 시키고 대규모 클러스터로 묶어 사용할 수 있다.
동시에 여러 브로커에서 장애가 생겨도 복제 팩터를 더 큰 값으로 했다면 대응할 수 있다.
이용 사례
활동 추적
메시지 전송(메일, 푸시알림 등)
메트릭 로깅
커밋로그
스트림 프로세싱
Tags:
kafka
0
comments
Please enable JavaScript to view the
comments powered by Disqus.