MQ

[kafkajs] kafka에 대한 간단한 소개

꼰딩 2023. 2. 26. 23:33

kafka 공식문서를 보고 부연설명을 붙인 글입니다.

(https://kafka.js.org/docs/introduction)

 

Cluster: Kafka가 여러개 돌아가는 단위

 

Broker: 단일 kafka 인스턴스 1개

 

Topic: 특정 주제에 대한 메세지를 담고 싶으면 Topic을 설정한다. 예를들어 'order' topic을 지정하여 주문 관련 메세지는 여기에 보낼 수 있다.

 

Partition: 메세지 처리 단위. cluster를 구성했을 때, 하나의 토픽에 대해 다른 broker에 복제된 파티션이 생긴다. 이렇게 복제된 파티션이 있으면, 데이터 병렬처리가 가능하다.

 

Producer: broker에 메세지를 보내는 주체

 

Consumer: broker에서 메세지를 받는 주체

 

Replica: 파티션을 복제하는 방법. replica는 서로 다른 브로커에 할당되고, 하나의 leader replica와 다수의 follower replica로 구성된다. leader replica는 데이터를 쓰고 처리하는 역할, follower는 leader의 데이터를 복제하여 백업 데이터를 가지고 있는다. 

 

Leader: replica의 leader이며, 문제가 생겨 정상적으로 작동이 안되면 follower replica 중에서 새로운 leader를 뽑는다.

 

Consumer group: consumer 그룹이다. 각 consumer는 다른 파티션의 메세지를 처리하기 때문에 병렬처리가 가능하다. consuemr group 끼리는 독립적이다.

 

Group Coordinator: consumer group의 rebalance를 처리하는 역할을 담당하는 broker 이다.

consumer group은 group id를 가지고 있으며, group coordinator는 해당 group id를 가지고 있는 각 consumer들을 재배치한다.

kafka broker 중 하나가 group cooridnator로 할당되며, 다른 broker와 독립적으로 작동한다. 모든 consumer는 group coordinator 와 연결을 유지한다.

 

Offset: 각 메세지가 가지고 있는 index와 비슷한 것이다. 정확히는 파티션에서 로그의 특정 지점이다. consumer 가 메세지를 잘 처리하고 해당 offset을 커밋하면(rabbitmq에서 ack과 비슷. kafka에게 메세지가 정상적으로 처리됐다고 알리는 것) 마지막으로 확인한 offset을 업데이트 하여 다음 메세지는 그 offset을 기준으로 다음것을 가져온다.

 

Rebalance: consumer group 내의 consumer들에 대핸 파티션 배치를 바꾸는 것이다. 새로운 consumer가 추가되거나, 기존의 consumer가 종료되는 경우, 혹은 파티션 수가 변경되는 경우에 발생한다. 리밸런스가 일어나면, 기존에 할당받은 파티션은 해제되고 새로운 파티션을 할당받는데 이 순간에도 consume은 가능하다.

 

Heartbeat: consumer가 broker에게 자신이 연결되어 있는지 알리는 keep-alive 메세지. 지정 시간 내에 heartbeat가 전송되지 않으면 broker는 해당 consumer를 해제하고, 그 파티션을 다른 consumer에게 rebalance한다.

 

producer가 메세지를 보낼 때, 직렬화(serializer)를 하는데, 데이터에 대한 손실을 방지하기 위해 필요한 작업이다.

대표적으로 JSON, AVRO, protobuf가 있다.

node.js로 직렬화를 하기 위해서 json은 JSON.stringify 라는 내장 메소드를 사용하면 된다.

뒤에 두개는 라이브러리를 설치해야한다.

'MQ' 카테고리의 다른 글

[kafkajs] consumer  (0) 2023.03.01
[kafkajs] producer 설정  (0) 2023.02.27
[kafkajs] docker를 이용한 kafka clustering 셋팅 방법  (0) 2023.02.26
kafka 글을 작성하기 전에  (0) 2023.02.26