프로젝트/kafka
-
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 = true auto.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 Signal SIGKILL (9): SIGKILL signal 은 프로세스를 즉각 종료할 때 사용한다. SIGINT(2): 사용자의 요청으로 중단이 될 때 사용한다. (e.g., Ctrl+C). SIGTERM(15): SIGTERM signal 종료 요청을 보낸다, 요청을 보낼 뿐 SIGKILL은 아니다. kafka의 immediate-stop 옵션 Container가 stop 되었을 때 현재 record를 처리하고 종료할지, 이전에 poll 한 모든 ..
-
kafka 주키퍼가 필수가 아니다?프로젝트/kafka 2023. 8. 22. 00:01
개요 kafka를 docker로 구성해서 사용하다 보면 zookeeper도 같이 구성해서 사용하곤 했습니다. 하지만 zookeeper는 필수가 아니라는 이야기를 듣고 궁금하여 공부해보려 합니다. Zookeeper란 무엇인가? 쿠버네티스, 카프카 등의 분산 시스템에서는 분산된 시스템끼리 정보를 공유하기 위해 코디네이션 시스템이 필요하고 대표적인 오픈 소스로 Apache Zookeeper가 존재합니다. 공식문서에서는 고성능 코디네이션 시스템으로 소개하며, 이름, 설정 관리, 동기화, 그룹 관리, 리더 선출 등을 수행해 준다고 설명합니다. Kafka에서 Zookeeper가 필요없어졌다 Apache Kafka 2.8.0에 출시되면서 Apache Zookeeper의 의존성이 모두 제거되었습니다. Zookeeper..
-
kafka는 어떻게 고가용성을 유지할까?프로젝트/kafka 2023. 8. 21. 00:01
개요 kafka는 고가용성, 내결함성이 보장된다고 합니다. 고가용성 및 내결함성이란 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능을 말합니다. 그러면 Kafka는 어떻게 고가용성을 유지할 수 있을까요? 핵심키워드인 kafka replication factor, leader & follower, ISR를 통해 알아보고자 합니다. Kafka replication factor kafka에서는 replication 수를 임의로 지정하여 topic을 만들 수 있습니다. replication-factor 옵션을 통해서 설정할 수 있습니다. replication-factor가 1일 때 topic1 그리고 topic2의 replication factor가 1인 경우입니다. broker1에만 저..