
컨슈머와 컨슈머 그룹컨슈머는 카프카에서 토픽을 구독하고 구독한 토픽들로부터 메시지를 받는 주체주로 여러 개의 컨슈머가 같은 토픽으로부터 데이터를 분할해서 읽어옴카프카 컨슈머는 보통 컨슈머 그룹 의 일부로서 작동하고, 동일한 컨슈머 그룹에서 여러 개의 컨슈머들이 동일한 토픽을 구독할 경우 각각의 컨슈머는 해당 토픽에서 서로 다른 파티션의 메시지를 받게 됨 (출처: https://medium.com/codex/apache-kafka-series-part-2-partitions-consumer-group-and-offset-management-fbb08839edfa)컨슈머 그룹에서 컨슈머를 추가하면 토픽에서 읽어오는 데이터 양을 확장할 수 있게 됨만약 카프카 컨슈머가 지연시간이 긴 작업을 수행하고 현재 컨슈머..

프로듀서프로듀서 개요애플리케이션에서 카프카에서 메시지를 써야 하는 상황들성능 메트릭 기록로그 메시지 저장센서 정보 수집 ..각 case 마다 throughput, latency가 다름카프카에서 메시지를 쓰는 작업(=produce)는 어떻게 이루어질까?ProducerRecord 객체 생성 : topic, value 필수 지정 (partition 과 key는 선택 사항)객체를 byte 배열로 직렬화partitioner 가 파티션을 결정함보통 기준은 ProducerRecord 객체의 키 값키 값이 지정되지 않았을 경우 random프로듀서는 이 레코드를 같은 토픽 파티션으로 전송될 레코드를 모은 record batch 에 추가, 이 record batch 가 카프카 브로커의 partition leader 에게 ..

카프카 시작하기일반화된 유형의 데이터를 발행하고 구독할 수 있는 중앙 집중화된 시스템카프카는 분산 커밋 로그 로, 저장된 데이터는 순서가 유지되고 지속성 있게 보관되며 결정적으로 읽을 수 있고, 데이터를 분산시켜 저장할 수 있음 카프카 기본 구성 요소메시지: 데이터 기본 단위. key 라는 메타데이터 포함할 수 있으며 데이터를 저장할 파티션을 결정하기 위해 사용됨 카프카는 효율성을 위해 메시지를 배치 단위 로 저장스키마: 메시지의 형식. 카프카는 잘 정의된 스키마를 공유 저장소에 저장함으로써 구버전, 신버전 형식을 동시에 지원하도록 하는 사전 작업 없이도 메시지를 처리할 수 있음토픽과 파티션:카프카에서 메시지는 토픽 단위로 저장. 토픽은 여러개의 파티션 으로 나뉨.각 파티션은 서로 다른 서버에 저장될 수..

Coroutine ContextCoroutineContext는 다음과 같이 코루틴 빌더 함수에 보인다 .. 대체 뭘까?public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Jobpublic fun CoroutineScope.async( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, bl..

코루틴 디스패처 (Coroutine Dispatcher)코루틴 디스패처란?코루틴을 스레드로 보내 실행시키는 역할, 코루틴을 스레드로 보내는 데 사용할 수 있는 스레드나 스레드 풀을 가짐실행 요청한 스레드에서 코루틴이 실행될 수 있게 함→ CoroutineDistpatcher 는 코루틴의 실행을 관리하는 주체로실행 요청된 코루틴을 작업 대기열에 적재하고스레드가 새로운 작업을 시작할 수 있는 상태라면 스레드에 코루틴을 보내 실행함제한된 디스패처와 무제한 디스패처제한된 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한무제한 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한되지 않음 → 실행 요청된 코루틴이 이전 코드가 실행된 스레드에서 계속 실행 됨제한된 디스패처 생성Single-Thread Dispatc..
코루틴 빌더코루틴 빌더 함수 호출 시 새로운 코루틴 생성모든 코루틴 빌더 함수는 코루틴을 추상화한 Job 객체 생성runBlockingpublic actual fun runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T새로운 코루틴을 실행한 뒤 완료될 때까지 현재 스레드를 중단 가능한 상태로 blocking,따라서 runBlocking 내부에서 delay(1000L) 호출 시 Thread.sleep(1000L) 과 비슷하게 작동runBlocking 이 사용되는 경우메인 함수: 프로그램이 끝나는 걸 방지하기 위해 스레드를 블로킹할 필요가 있을 경우유닛 테스트현재는 거의 사용되지 않고 유닛 테스트에는 runTest ..
Chapter 1: 스레드 기반 작업의 한계와 코루틴의 등장멀티 스레드 프로그래밍단일 스레드일 경우 작업을 순차적으로 처리해야 하므로 처리 속도, 응답속도 늦어짐 → 해결 방안으로 멀티 스레드 등장여러 개의 스레드로 작업을 실행 하여 메인 스레드에 처리가 오래 걸리는 작업이 요청 되었을 때 그 작업을 백그라운드 스레드로 돌려서 처리하도록 함멀티 스레드 구현 방식Thread Classpackage chapter1.code5import kotlin.concurrent.threadfun main() { println("[${Thread.currentThread().name}] 메인 스레드 시작") thread(isDaemon = false) { println("[${Thread.currentThrea..
https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { int[] cost = new int[3000001]; static class Item implements Comparable{ int number; int dist; Item(int number, int dist){ this.number = number; this.dist = dist; } @Override public int ..

합격 후기를 합격 발표 약 3개월 후에 쓰는 사람이 있다?? 거두절미하고 전형 별로 알아보도록 하겠다 1) 서류전형 사실 SW 전공자에게 서류 전형이 의미가 있나? 싶다. 최근 바로 서류는 적/부 이고 코테로 거르는 곳이 많이 생겼다 보니.. 하지만 소홀하게 생각하면 안된다는 점.. 대충 쓰다 면접에서 털릴 수 있다. 이런 점을 위주로 쓰자. => 나의 강점, 경험이 회사에 구체적으로 어떻게 기여할 수 있을지 =>프로젝트 정리 => 프로젝트에서 느낀 점, 어려운 점, 배웠던 점 즉 "생각 정리"와 "경험 정리" 한 것들이 "구체적인 직무의 요구사항" 과 매칭이 되어야 하는 부분이다 사실 면접때 자소서를 읽고 질문한다는 느낌은 안들었지만.. 그래도 면접때 나올 질문의 밑밥을 염두에 두고 써 나가는게 좋다 ..

OS 정리 세마포어와 뮤텍스 공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다. 이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다. 뮤텍스(Mutual Exclusion) Lock을 가지고 있는 프로세스/스레드만이 lock해제가 가능하다 Locking Algorithm으로 락 가지고 있는 프로세스/스레드가 임계영역 나갈 때만 해제가 가능 Busy Waiting(SpinLock) - lock이 얻어질 때까지 계속 체크하는 것 세마포어 카운터 변수 ⇒ 운영체제 또는 커널에 저장 wait() : 가능한지 체크, 가능하면 카운터변수 -1, signal(): critical section에서 나올때 s를 1 증가 카운터 변수 값 자연수 가능 ⇒ 즉 여..