일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Benchmarks
- minreplica
- hammerDB
- Software maestro
- Database
- slow query
- propogation
- Helm
- SW 마에스트로
- Leaderboard
- Kubernetes
- Strimzi
- eks
- SW Maestro
- blue-green
- MSSQL
- 동등성
- Salting
- yml
- 0 replica
- traceId
- spring boot
- keda
- 스프링부트
- Debezium
- zset
- logback
- Grafana
- Kafka
- docket
- Today
- Total
김태오
Kafka 소개 본문
일단 kafka 설치이다.
brew install kafka
zookeeper 등 kafka 에 필요한 dependency 들이 모두 설치된다.
우선 pub/sub 이란 무엇인지 알아보자.
pub/sub 은 publish/subscribe 의 약자인데, 소프트웨어 아키텍쳐에서 사용하는 메시징 파라다임이다. 메시지란 어떠한 이벤트, 커맨드, 데이터 프로세싱 등에 대해서 publish 하는 쪽에서 subscribe 하는 쪽으로 넘기는 데이터 라 보면 된다. 적절한 비유일지 모르겠지만, ReactJS 에서 사용하는 useEffect 를 예시로 들어보자.
function ExampleComponent() {
const [count, setCount] = useState(0);
// useEffect hook to update the document title
useEffect(() => {
// Update the document title using the browser API
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
그냥 간단한 예시이다. count 변수의 변경이 생길 때 페이지의 변경이 일어난다. 이것을 pub/sub와 메시지 개념 비유하여 이해해보자.
이 비유에서는 React Component 자체가 subscriber 이다. useEffect hook 은 state 변화에 "subscribe"한다 볼 수 있다. state가 변화할 때마다, 즉 count 변수가 변경될 때마다, "message"를 처리한다 생각할 수 있다.
아래에 버튼이 클릭되면, setCount 함수가 count를 변경하며 message를 "publish"한다 볼 수 있다.
이렇듯 publish 된 message 를 어떠한 로직에 따라 subscribe 한 쪽이 처리하는 과정이 pub/sub pattern 이다.
다음으로 message queue 의 개념인데, pub/sub 의 개념과 거의 유사하지만, message 를 수신하는 방식에 차이가 있다.
message queue에서는 consumer 가 메시지를 처리하는데, 이 메시지는 하나의 producer 에서 하나의 consumer로 전송된다. 즉 메시지는 queue 에 담겨 있다가, 어떤 consumer가 메시지를 처리할 준비가 되면 단 하나의 consumer가 메시지를 한번 처리한다. RabbitMQ, ZeroMQ, Amazon SQS, IBM MQ 등이 있다.
pub/sub 에서는 subscriber가 어떤 식으로 존재하는지 producer가 알지 못하는 상태에서 message가 토픽으로 publish 되는데, 모든 subscriber는 이 message를 가지고 간다.
Apache Kafka, Google Pub/Sub, MQTT 등이 있다.
결론적으로, message queue는 순서가 중요한, one-to-one message consuming 에 적합하며, pub/sub 은 확장성과 real-time message consuming 이 중요한 환경에 적합하다.
pub/sub 에서 message 들이 전부 subscriber로 퍼져간다는 것이 비효율적으로 느껴질 수 있다. 그러나 이는 subscriber 가 누구인지 알 필요 없이 message 를 producing 하는 것과 방대한 subscriber coupling, processing 을 할 수 있다는 장점에 의해 상쇄된다.
다음은 Kafka 의 객체들이다.
Topic : 폴더라고 생각하면 되는데, 특정 목적으로 생성된 data 의 집합이다.
Partition(leader) : topic 의 하위 폴더인데, 분산과 scalability 를 위해 나누어 처리되는 단위이다. read 와 write 작업은 모두 leader 에서 발생한다.
Replica(follower) : leader 의 복제본인데, pull 방식으로 leader 에서 복제한다. 약간 slave DB 의 느낌이 나는 것 같다.
Producer : data 를 publish 하는 주체이다.
Consumer : data 를 subscribe 하는 주체이다.
Offset : consumer 가 data 를 어디까지 읽어갔는지 알 수 있는 책갈피 같은 역할이다.
'kafka' 카테고리의 다른 글
Strimzi를 사용하여 Kafka, Debezium을 쿠버네티스에 띄우기 (4) | 2024.07.24 |
---|---|
Kafka 간단한 메시지 교환 (1) | 2023.11.27 |