message 들은 일련의 Key-Value 쌍으로 이루어진 binary data로 인코딩된다. Key는 Field Number 뿐만 아니라, 해당 Field의 data type을 지시하는 "Wire Type"을 표현.Key 구성Key = (field_number &l
syntax : "proto3"Proto version 지정. 명시하지 않으면 default로 version 2.지원 언어 차이.Proto2 지원 언어 : C++, Java, Python, GoProto3 지원 언어 : C++, Java, Python, Go, Ruby
함수를 마치 클래스에서 만든 인스턴스처럼 취급하는 방법.함수를 파라미터로 넘겨줄 수 있음.함수를 결과 값으로 반환 받을 수 있음.코틀린에서는 모든 함수를 고차 함수로 사용 가능함수형 타입 선언 방식'Unit' : 반환이 없다.'::a' : 고차함수 넘길려면 앞에 ::
var : 일반적으로 통용되는 변수. 언제든지 읽기 쓰기가 가능.val : 선언시에만 초기화 가능. 중간에 값을 변경할 수 없음.코틀린은 변수가 초기화 되어있지 않을 경우 컴파일 에러 발생.? 이용하여 nullable 변수로 선언 가능.코틀린은 8진수 표기 지원하지 않
중요한 역할을 맡고 있는 메인스레드를 블락하지 않는다는 것이다.막힘 없는 앱 환경을 제공하기 위해서는 Main-Safe하게 개발해야하고, 이를 위해 여러 스레드를 활용하여 동시성 코드를 짜야한다.코루틴은 콜백 기반 코드를 sequential code로 바꾸어주기 때문에
제 3의 그룹이 토픽이 필요할때 만들고 더 이상 니즈가 없으면 컨슈머 삭제하고 토픽도 삭제.레코드 안에 타임 스탬프를 기록하여 병렬 처리 하여도 타임 스탬프 순서로 처리.파티션은 기본적으로 3개 사용 하지만 컨슈머 랙에 따라 파티션을 늘림. 파티션을 늘리는 일은 큰 일
컨슈머 마지막 커밋 오프셋과 토픽의 마지막 오프셋 차이.컨슈머 랙을 모니터링 하는것은 중료. 컨슈머 랙이 크다는 것은 서비스 처리가 느리다는 의미.컨슈머 랙은 컨슈머의 상태를 나타내는 지표. 컨슈머 랙의 최대값은 컨슈머 인스턴스를 통해 직접 확인할 수 있음.consum
1 : 1 프로세스 + 1 쓰레드(컨슈머)간략한 코드프로세스 단위 실행/종료다수의 컨슈머 실행 필요시 다수의 프로세스 실행 필요2 : 1 프로세스 + n 쓰레드(동일 컨슈머 그룹)복잡한 코드쓰레드 단위 실행/종료스레드간 간섭 주의(세마포어, 데드락등)다수 컨슈머 실행시
컨슈머 그룹의 파티션 소유권이 변경될 때 일어나는 현상.컨슈머와 파티션 할당 변경.리밸런스를 하는 동안 일시적으로 메시지를 가져올 수 없으며 리밸런스 발생시 데이터 유실/중복 발생 가능성 있음.commitSync() 또는 추가적인 방법(unique key)으로 데이터
데이터를 가져가는 polling 주체.커밋을 통해 읽은 컨슈머 offset을 카프카에 기록.데이터 저장 위치.FileSystem(.csv, .log, .tsv)Object Storage(S3, Minio)Hadoop(Hdfs, Hive)RDBMS(Oracle, Mysq
key, value가 제대로 들어 오는지 확인하기 위해서 콘솔 컨슈머를 다음 옵션과 함께 실행key 값을 넣지 않는 방식으로 레코드 전달 할 경우카프카가 전달하는 메시지는 레코드라고 한다.레코드 키는 메시지를 구분하는 구분자 역할을 한다.동일 키는 동일 파티션에 적재한
컨슈머에서 그룹을 지정하여 메시지를 polling 할 경우 다음과 같이 동작한다.지정한 그룹을 추가한다.메시지를 읽은 offset을 기억하여 offset 부터 읽기 시작한다.N개의 파티션에 기록된 메시지를 병렬적으로 가져온다(입력된 메시지 순서가 보장되지 않을 수 있다
Before 카프카 엔드투엔드(end-to-end) 연결 방식의 아키텍쳐. 데이터 연동의 복잡성 증가(HW, OS, System, ...). 각기 다른 데이터 파이프라인 연결 구조. 확장에 엉청난 노력 필요. 모든 시스템으로 데이터를 전송 실시간 처리도 가능한 것
Remote Procedure Call : 네트워크로 연결된 서버 상의 프로시저(함수, 메서드, ...)를 원격으로 호출하는 기능. RPC를 사용하면 클라이언트는 마치 로컬에서 함수를 호출 하듯 서버의 프로시저를 호출할 수 있다.RPC의 구성품. 마샬링 처리 수행.함수
설치문제 발생시Link : https://github.com/neovim/neovim/wiki/Installing-NeovimNVIM 설치 과정중 문제 발생시 NVIM 캐쉬 파일 제거 후 시도Link : https://github.com/AppImag
디커플링은 어떻게 구현 되는가 ? 바로 인터페이스다.인터페이스는 다음과 같은 특징을 가지고 있다표준화 되어 있다.표준화 되어 있어 여러 회사, 조직에서 사용한다.많은 곳에서 사용하기에 쉽게 변경되지 않는다.인터페이스의 규칙만 지킨다면 인터페이스와 접합된 모듈은 언제든
목적이 같은 코드들은 분리 하였지만 각 계층이 결합됨.데이터를 바꾸면 UI도 변경되는 구조.핵심 업무 규칙기업이 고객에게 전달 하고자 하는 핵심 요소.Use Case : 어플리케이션 기능(사용 사례, 어플리케이션을 어떻게 사용할 수 있는지에 대한 방법).Entities
Atomic 연산Atomic Increment/Decrement 연산은 (생각보다) 비싸다.스마트포인터의 의미없는 복사가 발생하는 경우가 많다.VectorReallocation에서 RefCount++/RefCount-- 발생최신 C++에서 문제가 개선 되었더라도 여전히
확장 메서드 Rust의 트레잇은 인터페이스나 추상 클래스와 비교되어 설명되곤 한다. 트레잇을 사용할 경우 인터페이스 처럼 구현을 강제 하지만 확장 메서드와 같은 기능도 가지고 있다. C#의 확장 메서드 트레잇은 내가 만든 구조체 뿐만 아니라 다른 개발자가 만든 구조