본문 바로가기

전체 글

(24)
카프카 컨슈머에서 poll() 을 요청하면 어떤 일이 일어날까 컨슈머 poll 이 어떤 방식으로 진행되는지 테스트 후 동작방식을 정리해보겠다. 테스트 조건 partition 0 과 partition 1 에 각각 데이터가 20개씩 들어있는 상황 결과 여기서 limit=10 으로 데이터를 컨슈밍했었다면? ✔️ 10개 데이터가 모두 partition 0 or partition 1 에서 컨슈밍 limit=20 으로 데이터를 컨슈밍했었다면? ✔️ 20개 데이터가 모두 partition 0 or partition 1 에서 컨슈밍 limit=21 이상으로 데이터를 컨슈밍했었다면? ✔️ 20개 데이터는 모두 partition 0 or partition 1 에서 컨슈밍 ✔️ 그리고 나머지 1 이상은 또 다른 파티션에서 컨슈밍해온다. Fetch, Poll 컨슈머가 카프카 브로커에서 ..
MSA 서비스에서 Circuit Breaker 도입하기 이 글은 조대협 님의 글을 통해(https://bcho.tistory.com/1247) 공부한 내용을 담았습니다. MSA 에서 서비스 간 장애 전파 MSA 패턴을 도입하면서 단일 서비스 컴포넌트는 여러개로 쪼개져 서로 호출하는/호출당하는 관계를 가진다. 이런 경우 먼저 대두되는 문제는 서비스 간 장애 전파 이다. 하나의 서비스 컴포넌트에 장애가 발생하면 그걸 호출하는 또다른 컴포넌트까지 장애를 전파받는다. Service 1 -- 호출 --> Service 2 위와 같은 관계에 놓였을 때 Service 2 의 응답속도가 매우 느려졌다고 가정해보겠다. 이때 Service 1 의 모든 쓰레드가 2 의 응답을 기다리고만 있다면 다른 요청을 처리할 수 없게 되니 상태는 더 악화된다. 이런 식으로 Service 2..
Kafka Rebalancing 의 이해와 동작 과정 카프카 컨슈머 그룹을 구성하여 데이터를 처리하게 된다면, 운영 상황에서 다양한 경우의 수를 마주할 수 있다. 그룹에 참여하는 컨슈머 클라이언트 구성에 변화가 생길 경우 이 변화를 반영하기 위해 카프카에서는 일련의 과정이 필요한데, 이걸 rebalancing (리벨런싱) 이라고 한다. 이번 포스팅에서는 카프카 컨슈머 그룹과 리벨런싱에 대해 이해해보고, 리벨런싱이 어떻게 동작하는지 정리해보겠다. 그 전에, 이 내용들은 카프카 아키텍쳐를 먼저 알고 있어야 할 것 같은데, 필요하다면 이 링크 글을 참고하길 바란다. -> https://joooootopia.tistory.com/29 Apache Kafka 의 기본 아키텍쳐 Apache Kafka 아파치 카프카(Apache Kafka)는 분산 메시지 스트리밍 플랫..
Apache Kafka 의 기본 아키텍쳐 Apache Kafka 아파치 카프카(Apache Kafka)는 분산 메시지 스트리밍 플랫폼이며 데이터 파이프 라인을 구성할 때 많이 사용된다. 카프카는 대용량 실시간 로그처리에 특화되어 개발된 오픈소스인 만큼, 분산 및 복제 구성과 더불어 Fault-Tolerant 한 안정적인 아키텍처와 빠른 성능으로 데이터를 처리할 수 있다. 서비스에서 사용하고 있던 리소스 공간은 서비스의 로직과는 별개로, 상황에 따라 필요가 없어질 수도 있고 확장이 필요할 수도 있다. 또한 최근 등장하고 있는 다양한 서버 디바이스 특성에 따라 비동기 메시징 프레임워크를 기반으로 통신할 필요가 있을 수 있다. (예를 들면 디바이스가 가진 네트워크 커넥션이 탄탄하지 못하기 때문에 네트워크 지연 가능성을 고려해야하는 경우가 있겠다.) ..
Java 의 개발 철학과 특징 Java 가 등장하기 전까지, 대부분의 프로그래밍 언어는 특수 OS 나 아키텍쳐에 국한되어 컴파일되도록 설계된다는 문제를 안고 있었다. 이는 플랫폼이 다양해지면서 해당하는 CPU 에 맞는 컴파일러를 구축하게끔 만들었으며, 서로 다른 환경에 따른 컴파일러를 구축하는 문제는 당연히 시간과 비용이 수반된다. 따라서 더 나은 방법을 찾기 위해 Java 개발자들은 Cross Platform 언어를 개발하고자 하였다. Write Once, Run Anywhere Java 는 Write Once, Run Anywhere 을 개발 철학으로 두었다. 다시 말해 플랫폼 독립적인 언어를 지향점으로, 같은 코드를 어느 운영체제에서나 실행시킬 수 있게 하자는 컨셉을 담고 있다. Java 가 한번 개발된 프로그램을 어디서나 실행..
[Selenium + Headless Chromium] Java로 인스타그램 대용량 크롤링하기 2 - 배치 프로그램 이번 포스팅에서는 제가 Spring framework 5에서 Java selenium 라이브러리를 사용했던 방법을 1편에 이어 소개해드리겠습니다. 제 개발 환경이나 프로젝트에 관한 정보는 1편에 공개되어있으며, 이번에는 배치프로그램 내에서 수행한다는 특성을 많이 살려보도록 하겠습니다. 이번에는 전반적인 DB 구성과 크롤링 코드를 수행할 배치 프로그램 소스코드도 간단히 소개하면서 포스팅을 진행해보겠습니다. 제가 구현한 배치프로그램에 관심이 생기신다면, 'Spring' 카테고리 내에 더 많은 글이 있으니 방문해주셨음 합니다 ㅎㅎ Instagram : 장소태그 크롤링하기 2편의 첫 주제인 만큼 기본적인 내용을 조금 다뤄보려 합니다. 경험상, selenium에서 크롤링을 위해 가장 많이 쓰게 되는 요소는 xpa..
[Selenium + Headless Chromium] Java로 인스타그램 대용량 크롤링하기 1 3개월 간 빡세게 진행했던 프로젝트에서 Selenium 크롤링을 거의 메인으로 사용했었습니다. 프로젝트를 하면서 크롤링 덕에 고생을 너무 많이 해서 내가 이것만 끝나면 블로그에 흔적이라도 남길 거라고 이를 갈았는데 막상 끝내고 포스팅 할 때가 되니 미화가 돼 버렸습니다..ㅎ 사실 구글링해서 나오는 블로그들에서 이미 selenium 라이브러리를 사용하여 크롤링 코드를 구현한 예제들을 많이 소개하고 있습니다. 하지만 이 포스팅에서 소개하는 크롤링 소스코드는 다음과 같은 점에서 차별점이 있음을 고려하며 읽어주셨으면 합니다. 1. 크롤링이 배치 프로그램 내에서 돌아감 2. 약 10000개 이상의 글을 연속적으로 크롤링 3. 크롤링을 stop 하는 기준점이 존재 4. System의 Interruption과 대용량..
[Spring-batch] ItemWriter 클래스 구현기 (오류 해결) 사실 이 글을 포스팅 하기 전에, Spring batch를 공부한 내용들과 spring batch + quartz 를 연동하기 위한 설정들 등등, 좀 더 기초적인 내용들을 먼저 다루고 싶었다. 하지만 일단 프로젝트의 완성도를 위해 개발부터 진행하고 있던 와중, 나를 너무 힘들게 했던 내용이 있어 먼저 끌고 와보았다. 분명 써놓고 보면 별 것 아닌 것 처럼 보이겠지만... 이 오류를 잡기위해 며칠을 고생한 걸 생각하며,,, 이걸 글로라도 남겨야 시간이 좀 덜 아까울 것 같은,, 그런 보상심리에 포스팅을 시작한다. ㅎㅎ ItemWriter write() 를 execute 할 때 발생할 수 있는 오류 나는 JdbcBatchItemWriter 를 사용하였으며, JDBC의 Batch 기능을 사용하여 모아둔 쿼리문..