프로젝트/kafka
-
우리는 왜 spring kafka batch listener를 활용하지 않나요?프로젝트/kafka 2024. 12. 1. 23:38
개요신규입사자분께서 우리는 왜 kafka message를 consume 할 때 batch listener를 활용하지 않는지, 그 선택에서 어떤 히스토리와 결정이 있었는지 물으셨습니다. 단건씩 메시지를 받지 않고 batch listener를 활용하여 한번에 여러 건의 메시지를 받으면 네트워크 레이턴시를 아낄 수 있을 것 같다는 의견을 주셨습니다. 질문 주신 내용이 합리적인 생각이라는 들었지만 batch listener에 대한 지식이 없었기 때문에 why에 답변을 할 수 없었습니다. 그에 대한 답을 찾기 위한 여정을 기록해보고자 합니다. Batch Listener란?@Beanfun myContainerFactory(): ConcurrentKafkaListenerContainerFactory { val..
-
spring kafka auto-commit 동작원리 : 데이터 유실과 중복처리프로젝트/kafka 2024. 10. 13. 14:52
대상 독자spring kafka의 auto-commit 동작원리를 알고 싶으신 분들 auto-commit을 활용할 때 데이터 유실과 중복처리를 제어할 수 있는 방법을 알고 싶으신 분들 개요많은 블로그들을 살펴보면 kafka consumer의 옵션 중 하나인 auto-commit은 일정주기로 commit을 수행하기 때문에 메시지의 중복 및 유실이 발생할 수 있다고 설명합니다. 일정주기로 자동으로 commit을 수행한다는 것은 메시지가 처리되는 중간에도 commit이 일어날 수 있을 것 같습니다. 만약 auto-commit을 활성화한다면 내부적으로는 어떤 일이 일어날까요? 이번 글에서는 spring kafka에서 auto-commit이 어떻게 동작하는지 알아보고 이 과정에서 데이터 유실과 중복처리를 어떻게..
-
Kafka Consumer를 On Off 할 수 있을까?프로젝트/kafka 2023. 11. 26. 00:01
개요 Kafka를 활용하다가 잠시 DB의 장애가 발생하거나 Applicaion에 문제가 발생하는 경우 DLQ에 수십만 건의 데이터가 쌓여있을 수 있습니다. 이때 DLQ를 off 해두었다가 장애가 복구하면 on을 하여 활용하면 괜찮은 전략이 될 수 있을 것 같아 on, off 방법을 구성해보려 합니다. Kafka Listener autoStartUp @KafkaListener(id="assigned_listener_id", autoStartup = "false", topics = "topic-to-listen-to") public void listen(Message message){ // interesting message processing logic } consumer를 구성할때 autoSartUp을 ..
-
Kafka Binder란 무엇인가?프로젝트/kafka 2023. 11. 21. 00:01
개요 Kafka를 Spring Cloud Stream과 함께 사용하다 보면 Kafka Binder라는 개념이 등장하게 됩니다. Kafka Binder란 무엇인가? 를 정리해 보면서 Kafka Binder에 대해서 개념을 잡아보고자 합니다. Spring Cloud란? Spring Cloud는 분산 시스템에서 필요한 다양한 기능들을 추상화하여 제공합니다. 보통 마이크로서비스 아키텍처(MSA)를 구축할 때 유용한 도구를 제공하는 프레임워크입니다. 주요 기능으로는 서비스 디스커버리, 로드밸런싱, Config 관리, 회로 차단, 분산 추적 등이 있습니다. Spring Cloud Stream이란? 이벤트 중심 마이크로 서비스를 구축하기 위한 프레임워크입니다. Spring Cloud Stream은 외부 미들웨어와의 ..
-
Dead Letter Queue란 무엇인가?프로젝트/kafka 2023. 11. 16. 00:01
개요 Dead Letter Queue(Topic)란 무엇인가? Dead Letter Queue를 사용하는 이유는 무엇인가? Deale Letter Queue 전략 Dead Letter Queue란? DLQ(Dead Letter Queue) , DLT(Dead Letter Topic)로도 불리며 Message Queue에서 소비되지 못한 메시지가 이동할 수 있는 Queue 또는 Topic을 뜻합니다. Kafka의 경우에는 Topic이지만 용어의 통일성을 위하여 Dead Letter Queue라고 명칭 하겠습니다. Consumer Application 내의 잘못된 조건이나 예기치 않은 상태 변경 등 다양한 문제로 메시지가 처리되지 않을 수 있습니다. Consumer Application이 메시지를 처리하려고..
-
kafka Consumer Lag 모니터링하기프로젝트/kafka 2023. 11. 15. 00:01
개요 만약 Application에서 메시지를 publish 하는 양을 cosumer가 따라오지 못하는 경우 어떻게 인지할 수 있을까요? 이 경우를 인지하기 위해서 kafka Consumer Lag을 모니터링해야 합니다. Kafka Consumer Lag 이란? 예를 들어 토픽에 파티션이 하나 있다고 가정하겠습니다. 이때 Consumer가 처리하는 속도가 Producer에서 메시지를 발행하는 속도보다 느려지는 상황에서 Producer는 4번째 메시지까지 발행했지만 Cosumer에서는 1번째 메시지를 읽고 있을 수 있습니다. 이런 경우 메시지간 Offset의 차이가 발생하게 되고 이를 Consumer Lag이라고 부릅니다. Lag을 번역하면 "지연"이라는 의미를 가집니다. 한마디로 Producer의 속도를 ..
-
kafka auto commit의 위험성프로젝트/kafka 2023. 11. 4. 00:01
개요kafka auto commit에 대해 명확히 이해하고 kafka auto commit을 활용했을 때 위험성에 대해 알아보고자 합니다. auto commit이란?kafka poll()을 통해 가져온 레코드를 어디까지 읽었는지 자동으로 commit 할 수 있는 옵션인 auto.commit을 제공합니다.enable.auto.commit = trueenable.auto.commit = trueauto.commit.interval.ms = 100ms 위의 설정은 100ms 시간의 간격마다 auto commit을 수행한다는 것을 의미 합니다. 뭔가 자동으로 해준다? 편리하게 사용할 수 있을 것 같은 느낌듭니다. 예를 들어 poll()을 통해 500개의 레코드를 가져옵니다. 100ms가 지났을 때는 100개..
-
kafka의 graceful shutdown프로젝트/kafka 2023. 11. 2. 00:01
개요Spring Kafka의 Consumer를 활용하다가 graceful shtudown을 어떻게 지원하는지 궁금해졌습니다.만약 offset을 commit 하기 전에 SIGTERM, SIGINT와 같은 종료 요청이 오면 어떻게 될까요? Shutdown SignalSIGKILL (9): SIGKILL signal 은 프로세스를 즉각 종료할 때 사용한다.SIGINT(2): 사용자의 요청으로 중단이 될 때 사용한다. (e.g., Ctrl+C).SIGTERM(15): SIGTERM signal 종료 요청을 보낸다, 요청을 보낼 뿐 SIGKILL은 아니다. kafka의 immediate-stop 옵션Container가 stop 되었을 때 현재 record를 처리하고 종료할지, 이전에 poll 한 모든 메시지를 처..