일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Hadoop
- 불공변
- MapReduce
- Generic
- ingestion time
- covariant
- Coroutine
- contravariant
- Perfect Watermarks
- flink watermark
- 공변
- lambda
- Generics
- event time
- flink watermarks
- watermarks
- processing time
- watermark
- kotlin
- apache flink
- Heuristic Watermark
- HDFS
- java
- Heuristic Watermarks
- Stream
- Perfect Watermark
- 가변성
- coroutines
- flink
- Today
- Total
목록개발 (21)
mm Home
Watermarks 이전 장 에서 설명했는데 Event Time 기준으로 스트림 처리를 할 때의 단점을 보완하기 위해 Watermarks 메커니즘을 사용한다고 했다. 가령 로그를 1시간 단위로 집계를 내려고 하는데, 09:59 에 발생한 이벤트가 10:01분에 스트림 서버에서 처리되어 09:00 ~ 10:00 시간대로 처리가 되지 않는 경우가 생기기 때문이다. 그럼 Watermarks가 어떤 것인지 살펴보자. Watermarks 란 Watermarks 는 단순히 Event Time의 타임스탬프를 기록해둔 마커이다. 특정 오퍼레이터의 윈도우 사이즈마다 Watermarks 에 timestamp가 마킹되어 있어서, 이 기록보다 느린 이벤트가 인입된다면 해당 이벤트를 Lateness로 간주하겠다는 것이다. 여기..
Flink 스트리밍 환경에서 세 가지의 특정 타임을 캡처할 수 있다. Event Time 이벤트가 디바이스에서 생성된 시간을 의미한다. 예를들어 모바일에서 로그인이 발생했을때 모바일 기기에서 발생된 시간이다. Processing Time 이벤트가 실제 Flink 서버에서 수행된 시간이다. 예를 들어 Window Time 을 매 1시간마다 스트림 처리중인 작업이 있다면, 같은 프로세싱 타임에 처리된 레코드들은 프로세싱 타임이 같다. 1시간마다 작업중인 스트리밍 처리에 100건의 레코드가 10:05 에 수행되었다면, 프로세싱 타임 10:05 에 100건의 레코드들이 수행된 것. (100건의 레코드들은 같은 프로세싱 타임에 수행된 것이다.) Ingestion Time 이벤트가 플링크에 인입되는 시간이다. 인입..
Generic JDK 1.5에서 타입 안정성을 위해 generic 추가 됨. //아래와 같이 raw type을 쓰게되면 ClassCastException을 발생하기 쉬웠다 List list = new ArrayList(); list.add(1); list.add("jess"); Generic을 만들었는데, JDK 1.5 미만의 버전의 호환을 선택. 그래서… Type Erasure 하위 호환을 위해 Type Parameter 정보를 지운다. JDK 1.5 미만에서 컴파일이 되어도 Generic을 사용했을때와 동일하게 하기 위함이다. List list = new ArrayList(); //위의 코드는 Type Erasure에 의해 실제 Runtime 시에 아래와 같다. List list = new Array..
Generic Kotlin의 Generic은 Java의 Jeneric과 비슷한 점이 많으므로 Java - Generics 글을 참고하면 좋을듯 하다. 위 글을 통해 아래의 내용을 이해하면 된다. Type Erasure 컴파일러가 하위 호환을 위해 Type Parameter 정보를 지운다. (런타임시에 타입 파라미터 정보를 알 수 없다) 공변 (Covariant) A -> A' 일때, C -> C *공변은 같은 기저타입에서 같은 방향으로 변한다. 반공변 (Contravariant) A -> A' 일때, C
글에 앞서.. 2019년에 공부하며 작성한 글이다보니 당시 버전과 2021년 버전은 꽤나 다른것 같습니다 개념은 비슷하겠지만.. 참고 부탁드립니다 코루틴이란? 협력형 멀티태스킹을 위한 프로그래밍 요소. 새로운 동시성 프로그래밍 방법. 코루틴을 경량화 스레드라고 자주 표현한다. 쉽게 보면, 중단가능한 Function이다. 이해가 잘 안되는데… 왜 나온거지? 코루틴 개념과 용어는 이미 1958년에 나옴. 서브루틴을 사용하지 않으면 공통된 기능을 묶지도 못하고, 모든 코드를 한번에 메모리에 올려야 하기 때문에 개발시에도, 런타임시에도 비효율적. (중복되는 루틴에 대해서 메모리 비효율적 - 생성해야하기 때문에) 서브루틴은 별도의 메모리에 올려놓고, 서브루틴이 호출될때마다 저장된 메모리로 이동했다가, return..
하둡이란? 분산처리를 위한 프레임워크 시스템. (2.x 기반 설명..) 주요 모듈 HDFS MapReduce YARN HDFS (Hadoop Distributed FileSystem) hadoop의 분산 파일시스템. 파일 시스템이라 하면, 데이터를 어디에 어떻게 저장할 것이고 어떻게 관리할 것인지에 대한 시스템. OS의 파일시스템 레이어와 다르다. 실제로 남기는 데이터는 OS의 파일시스템을 사용. 주요 특징. 처리 가능한 데이터 사이즈 커짐 (Petabytes) 이미 존재한 파일에 append는 가능하지만 수정이 불가능하다. (Write once, Read many times) 파일 이동, 삭제, 복사 등의 기능 있음. block 파일시스템의 블록. 블록 사이즈 : 128MB (default) 실제 OS..
Spring web-flux에서 Netty가 defualt 컨테이너로 사용된다.그 동안 Servlet 컨테이너로 톰캣만 이용해서 Netty에 대해서 잘 몰랐었다.Netty가 무엇인지 어떻게 사용되는지에 대해서 알아보자.Netty를 이용한 전반적인 개발 이야기할 것은 아니고.. web-flux에서 어떻게 사용되었는지를 위해 이해하는 정도로만 공부해보았다. 예전에는.. 먼저 전통적인 네트워크 프로그래밍에서는 하나의 Request를 할당하여 하나의 스레드를 할당하여 소켓을 열었다.(Blocking) 아래와 같은 코드로 표현할 수 있을 것이다. ServerSocket serverSocket = new ServerSocket(8080); Socket clientSocket = serverSocket.accept(..
Spring 5 features리액티브 프로그래밍 모델어노테이션 기반 MVC + 함수형 MVC 같이 지원. 기존의 어노테이션 기반을 사용할 수도 있지만, 함수형으로 MVC 설정을 할 수도 있다.간단하게 설정을 어떻게 하는지 방법만 봐보자. 다음 글에서 web-flux에 대하여 자세히 설명하겠다.라우터를 통해 request를 적절한 핸들러에 라우팅한다.핸들러가 컨트롤러가 된다.아래와 RouterFunction을 설정해서 스프링의 Bean으로 생성한다면 DispatcherHandler 에서 관련 빈들을 다 불러들여서 해당 Handler로 라우팅한다.public class BookHandler { public Mono listBooks(ServerRequest request) { return ServerRes..
최근 발표된 Java 9의 새로운 피쳐들에 대해 많은 글들이 올라온다. 능력은 안되지만 나도 나름대로 공부한걸 정리해보았다. try-with-resourcesjava 7 에서 추가되었던 try-with-resources 구문을 더 간결하게 사용할 수 있다.try-with-resources : AutoCloseable 를 구현한 클래스에 대해 try 구문이 끝날때 자동으로 close 처리해주는 기능변경된 내용//java 9 이하try (ByteInputStream b = new ByteInputStream()) {} catch (Exception e) {} //java 9 try (a; b) { //이전과 동일하게 다수의 자원 선언 가능.} catch (Exception e) { }추가 사항try-with..
최근 자바 9에서는 Reactive Streams API 가 추가되었다. 비동기 논블록킹의 개발방식이 떠오르면서 자바에서도 도입한것 같다. Reactive가 왜 나오게 되었는지, 어떤 개발 방식인지 살펴 보자. 간단하게 자바 9로 예제도. 기존의 절차지향적인 개발방식에서 Reactive 프로그래밍 패러다임이 떠오름.왜 Reactive ?기존의 절차지향적이고 쓰레드풀을 이용한 처리의 문제점.블록킹이 걸려있는 상태에서 대기하고 있는 쓰레드의 성능 문제 (특히 MSA 같은 서비스에서 API 콜 수행시 부하도 없이 쓰레드를 붙잡고 있는 상황 연출)쓰레드의 변경마다 발생하는 context-switch 비용한정적인 자원의 쓰레드 풀. 쓰레드간 공유하는 자원으로 인한 side-effect 가능성.Event-drive..