본문 바로가기

Programming

(19)
카프카 컨슈머에서 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 컨슈머가 카프카 브로커에서 ..
Kafka Rebalancing 의 이해와 동작 과정 카프카 컨슈머 그룹을 구성하여 데이터를 처리하게 된다면, 운영 상황에서 다양한 경우의 수를 마주할 수 있다. 그룹에 참여하는 컨슈머 클라이언트 구성에 변화가 생길 경우 이 변화를 반영하기 위해 카프카에서는 일련의 과정이 필요한데, 이걸 rebalancing (리벨런싱) 이라고 한다. 이번 포스팅에서는 카프카 컨슈머 그룹과 리벨런싱에 대해 이해해보고, 리벨런싱이 어떻게 동작하는지 정리해보겠다. 그 전에, 이 내용들은 카프카 아키텍쳐를 먼저 알고 있어야 할 것 같은데, 필요하다면 이 링크 글을 참고하길 바란다. -> https://joooootopia.tistory.com/29 Apache Kafka 의 기본 아키텍쳐 Apache Kafka 아파치 카프카(Apache Kafka)는 분산 메시지 스트리밍 플랫..
Apache Kafka 의 기본 아키텍쳐 Apache Kafka 아파치 카프카(Apache Kafka)는 분산 메시지 스트리밍 플랫폼이며 데이터 파이프 라인을 구성할 때 많이 사용된다. 카프카는 대용량 실시간 로그처리에 특화되어 개발된 오픈소스인 만큼, 분산 및 복제 구성과 더불어 Fault-Tolerant 한 안정적인 아키텍처와 빠른 성능으로 데이터를 처리할 수 있다. 서비스에서 사용하고 있던 리소스 공간은 서비스의 로직과는 별개로, 상황에 따라 필요가 없어질 수도 있고 확장이 필요할 수도 있다. 또한 최근 등장하고 있는 다양한 서버 디바이스 특성에 따라 비동기 메시징 프레임워크를 기반으로 통신할 필요가 있을 수 있다. (예를 들면 디바이스가 가진 네트워크 커넥션이 탄탄하지 못하기 때문에 네트워크 지연 가능성을 고려해야하는 경우가 있겠다.) ..
[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 기능을 사용하여 모아둔 쿼리문..
[Spring-boot] Facebook Timeline 프로젝트 : MySQL, JPA 개발 환경 구성하기 1. Spring boot 2.1.6/ Gradle project에서 프로젝트의 디렉토리 구조 디렉토리 내의 패키지, 파일 명은 개발 방향에 따라 많이 바뀌게 되겠지만, 전반적인 프로젝트의 구조는 다음과 같이 구성할 예정이다. 설정 값을 넣어줄 때에 있어서 application.properties 보다 application.yml이 확장성을 고려하면 더 편리하다는 의견이 많았기 때문에 이 파일도 변경해주었다. 비스니스 로직은 service 패키지에 들어갈 예정이며 컨트롤러는 web 패키지에 들어갈 것이다. 이번 프로젝트를 하며 스프링 부트의 구조를 좀 더 확실히 알고자하는 취지도 있었기 때문에 패키지를 역할별로 엄격히 나눌 예정이다. 2. MySQL, JPA 연동하기 /build.gradle plugin..
[Java] 삽입정렬과 버블정렬 삽입 정렬 :: Insertion sort import java.io.*; public class Main { static int[] InsertionSort(int testcases, int[] array) { for(int j=1; j=0 && data