본문 바로가기

Cloud/MSA

MSA 교육 정리(4)

[1]

* Kafka 스케일링: scale in / scale out(축소/확장) 
-> 아님! 헷갈리지 말기, scale up / scale down(스펙 올리고 / 내리고)

Kafka Partition vs. Consumers
- Kafka Topic 생성시, default partition은 1개로 생성된다.

- kafka에서 하나의 Partition은 반드시 하나의 Consumer가 매칭되어 메시지를 소비한다.

- Partiton 수보다 동일한 Group id를 가진 Consumer 수가 많다면
일부 Consumer들은 partition에 binding되지 못해 message를 Polling 하지 못하는 현상이 일어난다.

Kafka 수동 커밋

- Kafka default 커밋모드는 autoCommit 이다.

- Kafka 커밋모드가 auto(default) 일 때 Partition이 증가해 Rebalancing이 발생하면 
커밋되지 않은 Message들은 자칫 컨슈머가 다시 Subscribe하여 중복처리할 수도 있다.

- autoCommit 설정을 false로 변경하여 수동커밋 모드로 변경 할 수 있다.

bindings:
  event-in:
consumer:
  autoCommitOffset: false 
  
[2] 

Kafka Retry

- Consumer가 message를 처리하던 중 오류가 발생하면 해당 Message를 다시 Polling하여 처리해야 한다.
이를 Retry라고 하며, 간단하게 Kafka 설정으로 동작할 수 있다.

bindings:
  event-in:
group: product
destination: kafkatest
contentType: application/json
consumer:
  max-attempts: 5 // 최대 5번 retry 수행
  back-off-initial-interval: 1000 // 백오프 초기간격이 1초
  back-off-max-interval: 1000 // 최대 1초 간격
  back-off-multiplier: 1.0
  defaultRetryable: false  

Kafka Dead Letter Queue(DLQ)

- Kafka에서 retry를 통해서도 처리하지 못하는 message를 Posion pill이라고 한다.
- Kafka에서 Posion pill은 별도의 메시지 저장소인 DLQ로 보내지게 된다.
- DLQ는 또 하나의 topic이며 Consumer에서 정상적으로 처리되지 못한 message들이 쌓여있다.
  DLQ를 설정하기 위해서 아래와 같이 Product의 application.yml를 변경한다.

bindings:
  event-in:
consumer:
  enableDlq: true
  dlqName: dlq-kafkatest
  dlqPartitions: 1
  
* Kafka Connect

Producer, Consumer를 사용해서 데이터 파이프라인 생성
카프카 동기화 지원 
Connect와 Source Connector를 사용해 Kafka Broker로 데이터를 보내고, 
Connect와 Sink Connector를 사용해 Kafka에 담긴 데이터를 타겟 DB에 저장한다.
(DB1->Connect->DB2 동기화)  CDC(Change Data Capture)

Source Connector와  Sink Connector는 두개의 타입이 있음
1. Query-Based(jdbc) CDC -> 삭제시 뭐가 삭제된지 모름!!!
2. Log-Based CDC

728x90
반응형