Kafka 3

Kafka Consumer DLT(Dead Letter Topic) 전략

분산 시스템과 메시지 큐를 다루는 과정에서 메시지 처리 실패는 흔한 일입니다. 이러한 실패를 효과적으로 관리하기 위해 Dead Letter Topic(DLT)과 재시도 전략이 필수적입니다. 해당 포스팅에서는 DLT의 개념을 설명하고, Kafka를 사용하는 구체적인 예시를 통해 재시도 전략을 설계 및 구현하는 방법을 알아보겠습니다. Dead Letter Topic(DLT)이란? DLT는 메시지 처리에 실패했을 때 해당 메시지를 저장하는 Kafka 토픽입니다. 재시도 과정에서 여전히 실패하는 메시지를 위한 '마지막 피난처'로 사용됩니다. DLT의 주요 목적은 다음과 같습니다. 처리 실패 메시지의 안전한 저장 실패 원인 분석 및 디버깅 용이성 향상 재시도 전략의 필요성 메시지 처리 중 잠깐의 네트워크 지연이나..

Kafka 2023.12.11

Kafka Batch Listener를 활용하여 성능 개선하기

Kafka Consumer를 운영하는 서비스에서 메시지를 개별적으로 처리하면, 각 메시지를 가져오고 처리하는데 필요한 네트워크 오버헤드와 CPU 사용량이 늘어난다. 특히, 각 메시지에 대해 별도의 트랜잭션을 시작하고 커밋하는 것은 비용이 많이 든다. DB와의 네트워크 통신, 트랜잭션 로그의 쓰기, 디스크 I/O 등에 의한 오버헤드가 각 메시지마다 발생하므로 메시지 처리 성능이 저하될 수 있다. 뿐 만 아니라 각 메시지 처리에 대해 별도 DB Connection Pool이 고갈되어, 새로운 트랜잭션을 생성할 수 없게된다. 이러한 경우 배치 처리를 사용하면 여러 메시지를 하나의 트랜잭션으로 쉽게 묶어 처리할 수 있다. 그럼 Batch Listener를 구현하는 방법에 대해 알아보자. 1. Kafka List..

Kafka 2023.06.18

Kafka Consumer 관련 Trouble Shooting 정리

이번 글에서는 '100만개 이상 LAG이 쌓인 이슈를 해결한 과정'에 대해 정리하고 공유하려고 한다. 로직 처리가 지연되고 있어 Kafka Consumer가 제대로 동작하고 있는지 확인하기 위해 LAG을 조회했는데, 100만개 이상의 LAG이 쌓여있었다. 1. Consumer Rebalancing 및 Duplicate Message 이슈 Kafka를 사용하다보면 Consumer가 리밸런싱 되는 과정에서 중복 메시지가 발생한다. 리밸런싱이 발생하는 원인은, Consumer가 Message를 소비하기 위해 Broker에 poll() 요청을 보낸 후, Consumer는 가져온 메시지를 처리한 후, 해당 파티션의 offset을 커밋하게 된다. poll 요청을 보내고 다음 poll을 요청을 보내는데 까지의 시간이..

Kafka 2022.08.19