들어가며 리플리케이션의 이해가 먼저 필요하다. devfunny.tistory.com/380?category=829528 카프카의 토픽과 파티션, 오프셋 토픽 카프카에서는 프로듀서가 전달하는 메시지를 '토픽'에 저장하고, 컨슈머가 해당 '토픽'에서 메시지를 가져온다고 하였다. 메시지의 저장소 역할을 하는 토픽은 데이터베이스의 '테이블'의 devfunny.tistory.com 팩터 리플리케이션의 팩터(Replication Factor)를 지정할 수 있는데, 팩터의 개수는 리플리케이션의 수와 같다. 리플리케이션 팩터는 default 값이 1개인데, 이를 2개로 수정하면 리플리케이션의 수가 2개가 된다. 카프카 클러스터 내에 3개의 브로커가 존재할 경우, 리플리케이션 팩터 수를 수정하지 않았을 때 default..
토픽 카프카에서는 프로듀서가 전달하는 메시지를 '토픽'에 저장하고, 컨슈머가 해당 '토픽'에서 메시지를 가져온다고 하였다. 메시지의 저장소 역할을 하는 토픽은 데이터베이스의 '테이블'의 역할과 같다. 또한 회원 테이블에서는 회원의 정보를 가져오고, 주문 테이블에서는 주문 정보를 가져오듯이 토픽도 특정 주제의 데이터들을 저장하는 저장소로 분류할 수 있고, 마찬가지로 컨슈머는 회원 토픽에서는 회원의 정보를, 주문 토픽에서는 주문의 정보를 가져온다. 따라서 토픽은 데이터를 구분하기 위한 단위로도 사용된다. 메시지를 받을 수 있도록 논리적으로 묶은 개념으로 데이터를 저장하는 데이터 저장소 파티션 카프카의 토픽은 분할된다. 이렇게 토픽을 분할한 것을 파티션이라고 한다. 만약 여러 프로듀서가 같은 토픽에 데이터를 ..
카프카의 기능 카프카의 높은 처리량, 빠른 메시지 전송, 운영 효율화 등을 위해 구현되어있는 기능을 알아보자. 1) 분산 시스템 분산 시스템이란, 같은 역할을 하는 여러 대의 서버로 이루어진 서버 그룹을 뜻한다. - 단일 시스템보다 더 높은 성능을 얻을 수 있다. - 분산 시스템 중 하나의 서버/노드 등에 장애가 발생하면 다른 서버/노드가 대신 처리한다. - 시스템 확장에 용이하다. 2) 페이지 캐시 OS의 페이지 캐시란, 메모리 중 남은 잔여 메모리의 일부를 페이지 캐시로 이용함으로써 처리 속도를 높이고 전체적인 성능을 향상시키는 것이다. 디스크에 읽기/쓰기를 하지 않고 페이지 캐시를 통해 읽고 쓰는 방식을 통해 전체적인 성능 향상을 높이게 되는데 카프카는 이를 이용하도록 디자인되었다. 3) 배치 전송..
카프카의 개념 카프카는 메시징 서버로 동작한다. 메시징 시스템이 무엇인지 먼저 알아보자. 메시징 시스템 메시징 시스템이란, 프로듀서(producer)와 컨슈머(consumer)가 서로 메시지를 전달할 때 직접 전달하는 것이 아닌 중간의 메시징 시스템을 거친 후 전달하는 것을 말한다. 프로듀서 (publisher/producer) 메시지라고 불리는 데이터 단위를 보내는 측 컨슈머 (subscriber/consumer) 데이터를 가져가는 측 카프카에서 프로듀서가 보내는 데이터가 토픽에 저장되고, 토픽(메시지 저장소)에 저장된 데이터를 가져가는 컨슈머는 원하는 토픽에서 데이터를 가져간다. 펍/섭(pub/sub) 모델 중앙에 메시징 시스템 서버를 두고 이렇게 메시지를 보내고 받는 형태의 통신 펍/섭 모델 이전에..
Webstorm 프로젝트 생성 File-New-Project 클릭하여 아래 Empty Project를 원하는 경로에 생성한다. Hexo 설치 1) hexo 설치 npm install hexo-cli -g 2) 셋팅 hero init 폴더명 cd 폴더명 npm install 3) hexo 배포를 위한 설치 npm insatll hexo-deployer-git --save 테마 적용 (next) 1) git submodule 적용 git submodule add https://github.com/theme-next/hexo-theme-next themes/next 2) 변경사항 푸쉬 방법 1) cd themes\next# 테마 경로로 이동 git add . git commit -m "커밋메세지" 2) cd ..
함수형 인터페이스 제공 람다 표현식을 쓸 수 있는 인터페이스는 오직 public 메서드 하나만 가지고 있는 인터페이스여야한다. 자바 8에서 이러한 인터페이스를 특별히 함수형 인터페이스라고 부르고, 함수형 인터페이스에서 제공하는 단 하나의 추상 메서드를 함수형 메서드라고 부른다. 인터페이스를 사용해야하는 개발자 입장에서 람다 표현식을 사용하기 위해 메서드가 하나뿐인 인터페이스를 제공해야하는 번거로움을 해결하기 위해 함수형 인터페이스를 만들고 java.util.function 패키지로 제공하고있다. 아래 예제 github 주소 : https://github.com/westssun/practicalJava8/tree/master/src/main/java/ch4/%EB%9E%8C%EB%8B%A4%EC%99%80..
들어가기전 docker에 centos7을 설치 후, 해당 컨테이너를 실행하고 그 안에 Elasticsearch와 Kibana를 설치하여 localhost:5601로 kibana를 띄어볼 것이다. 이를 위한 순서는 아래와 같다. 1) Centos 설치 2) JDK 설치 3) Elasticsearch 설치 4) Kibana 설치 1. Centos 설치 - docker 이미지 다운로드 docker pull centos - docker 이미지 조회 docker images - docker 이미지 실행 docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 5601:5601 이미지명:이미지태그 /usr/sbin/init 여기서, -p 5601:5601..
소스코드 : https://github.com/westssun/moderninjava8/tree/master/src/main/java/ModernInJava8/ch4_5_6_stream GitHub - westssun/moderninjava8: [BOOK] 모던 인 자바8 [BOOK] 모던 인 자바8. Contribute to westssun/moderninjava8 development by creating an account on GitHub. github.com 예제 실행을 위한 DTO @Data public class SampleDto { private int idx; private String name; private String gender; } 1) 스트림 기본 /** * 기존 Java7 코..
Docker 접속 이후 1) jenkins 이미지 다운로드 docker pull jenkins 2) jenkins 컨테이너 실행 docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins 3) 브라우저 접속 localhost:8080 4) 초기 비밀번호 입력 (1) 로그 확인 docker logs jenkins (2) 컨테이너 접속 *docker 컨테이너 접속* docker exec -it -u 0 jenkins bash *초기 비밀번호 확인 명령어* cat /var/jenkins_home/secrets/initialAdminPassword Jenkins plugin 설치 실패 해결 1) jenkins 버전..
상황 TestDto testDto = testList.get(0); 자바 List의 0번째 데이터를 set 해줘야하는 코드를 만났다. testList에는 어떤 데이터가 들어있는지 모른다. (null 일수도있고, 몇개의 row가 들어가있을 수 있다.) 위 testList.get(0) 을 실행하는 부분에서 NullPointerException을 만났다. 분석 NullPointerException이 발생하여 null 체크를 추가하였다. testList는 외부 API에서 얻어온 데이터가 들어있는 List라서 어느 특정 실행 시점에서 null인 testList에 get 메서드를 호출했기 때문에 발생하는 문제였다. if (testList != null) { TestDto testDto = testList.get(0..
LocalDate LocalDate 인스턴스는 시간을 제외한 날짜를 표현하는 불변 객체이다. 어떤 시간대 정보도 포함하지 않는다. 우리는 정적 팩토리 메서드 of로 LoalDate 인스턴스를 만들 수 있다. LocalDate date = LocalDate.of(2017, 9, 21); int year = date.getYear(); // 2017 Month month = date.getMonth(); // SEPTEMBER int day = date.getDayOfMonth(); // 21 또한 팩토리 메서드 now를 사용하여 현재 날짜 정보를 얻을 수 있다. LocalDate today = LocalDate.now(); 다른 방법으로는, get 메서드에 TemporalField를 전달해서 정보를 얻는 ..
디폴트 메서드의 등장 자바 8에서는 기본 구현을 포함하는 인터페이스를 정의하는 2가지 방법을 제공한다. 만약 인터페이스를 바꾸게 되었을때, 해당 인터페이스를 구현한 모든 클래스의 구현도 고쳐져야하는 상황이 온다면 매우 당황스러울 것이다. 이 문제점을 자바 8에서 제공된 새로운 기능으로 해결할 수 있다. 1) 정적 메서드 : 인터페이스 내부 2) 디폴트 메서드 : 인터페이스의 기본 구현을 제공 자바 8에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다. 결과적으로 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸지 않으면서 인터페이스를 바꿀 수 있다. 이 말은 즉, 디폴트 메서드나 정적 메서드가 추가..