Kafka 카프카 요약 정리
카프카 기본 개념
카프카 기본 개념
Kafka Architecture
카프카 커넥트는 편리한 rest api 인터페이스를 제공하지만 지속적으로 파이프라인(싱크 커넥터, 소스 커넥터)를 운영하는데는 한계가 있다.
Kafka Custom Sync Connector
Kafka Custom Source Connector
Kafka Distributed Mode Connect
커넥트를 실행하는 방법은 크게 두 가지가 있다.
Kafka Connect
Kafka Streams Spart Structured Streaming Deployment Standalone Java Process Spark Executor (mo...
Streams Processor API
카프카 스트림즈에서 KTable은 카프카 토픽의 데이터를 로컬의 rocksDB에 Meterialized View로 만들어 두고 사용하기 때문에 레코드의 메세지 키, 메세지 값을 기반으로 keyValueStore로 사용할 수 있다.
스트림즈 DSL - window processing
스트림즈 DSL - GlobalKtable과 KStream을 join()
스트림즈 DSL - Ktable과 KStream을 join()
Gradle ```groovy dependencies { compile 'org.apache.kafka:kafka-streams:2.5.0' } ```
필수 옵션
Kafka Streams DSL
Kafka Streams
트랜잭션 프로듀서의 동작
Kafka Idempotent Producer
Burrow
카프카 명령어 사용
Consumer Lag
카프카는 처리량을 늘리기 위해 파티션과 컨슈머 갯수를 늘려서 운영할 수 있다. 파티션을 여러개로 운영하는 경우 데이터를 병렬처리하기 위해서 파티션 갯수와 컨슈머 갯수를 동일하게 맞추는 것이 가장 좋은 방법이다.
컨슈머 애플리케이션은 안전하게 종료되어야 한다. 정상적으로 종료되지 않은 컨슈머는 세션 타임아웃이 발생할때까지 컨슈머 그룹에 남게된다.
컨슈머와 파티션 할당 정책은 컨슈머의 assignor에 의해 결정된다. 카프카에서는 RangeAssignor, RoundRobinAssignor, StickyAssignor를 제공한다. 카프카 2.5.0는 RangeAssignor가 기본값으로 설정된다.
Commit
Rebalancing
필수 옵션
Consumer
필수 옵션
Producer
카프카 브로커로 커맨드 라인 툴 명령을 내릴 때 브로커의 버전과 커맨드 라인 툴 버전을 반드시 맞춰서 사용하는 것을 권장한다.
1. 첫번째는 카프카 컨슈머 또는 프로듀서가 카프카 브로커에 생성되지 않은 토픽에 대해 데이터를 요청할 때, 그리고 두번째는 커맨드 라인 툴로 명시적으로 토픽을 생성하는 것이다.
kafka-producer-perf-test.sh
kafka-topics.sh
로컬 카프카 설치 및 실행
1. 클라우드 서비스 - 컨플루언트 컨플루언트는 카프카에 대한 개념을 최초로 생각하고 아키텍쳐를 제안, 개발한 인물인 제이 크랩스와 그의 동료들이 설립한 회사이다. 제이 크랩스는 링크드인에서 데이터 인프라를 담당하는 아키텍트 팀장이었는데 카프카의 성장 가능성과 미래를 보고...
개요 카프카 클러스터를 실행하기 위해서는 주키퍼가 필요하다. 주키퍼의 서로 다른 znode에 클러스터를 지정하면 된다. root znode에 각 클러스터별 znode를 생성하고 클러스터 실행 시 root 가 아닌 하위 znode로 설정...
카프카 클라이언트는 통신하고자 하는 리더 파티션의 위치를 알기 위해 데이터를 주고(프로듀서) 받기(컨슈머) 전에 메타데이터를 브로커로부터 전달받는다. 메타데이터는 다음과 같은 옵션을 통해 리프레쉬 된다. 카프카 프로듀서 메타데이터 옵션 ...
토픽 이름 제약 조건 빈문자열 X 마침표 1개(.) 또는 마침표 2개(..)로 생성 X 249자 이상 X 사용 가능 문자 (이외 문자 X) 영어 대소문자 숫자 0~9 ...
1. 브로커에 한번 적재된 레코드는 수정할 수 없고 로그 리텐션 기간 또는 용량에 따라서만 삭제된다. 2. 레코드의 구성 timestamp - 타임스탬프 레코드의 타임스탬프는 스트림 프로세싱에서 활용하기 위한 시간을 저장하는 용도로 사용된다. 카...
1. 토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위이다. 2. 토픽은 1개 이상의 파티션을 소유하고 있다. 3. 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 ‘레코드(record)’라고 부른다. 4. 파티션은 자료구조에서 접하는 큐(queue)와 비...
카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체인 애플리케이션이다.
데브원영님의 카프카 강의를 바탕으로 공부한 내용을 정리하였습니다!
# Area
git config 설정 이 포스팅에서는 디렉토리별로 git 계정을 분리하는 방법을 정리한다. 1 .gitconfig 전역 설정 파일 수정 ~/.gitconfig [user] name = zave7 email = zave...
$ git submodule - Initialize, update or inspect submodules git submodule 하위 모듈을 상위 모듈과 함께 버전관리를 할 수 있도록 하는 명령이다. 기본적으로 최상위 디렉토리 하위에 서브모듈의...
$ git pull - Fetch from and integrate with another repository or a local branch git pull 다른 리포지토리 또는 로컬 분기에서 가져와 통합한다. fetch + merge 이다. ...
$ git clean - Remove untracked files from the working tree git clean git에 의해 추적되지 않는 working directory의 파일들을 제거한다. interactive 모드 및 파일명 패...
$ git remote - Manage set of tracked repositories git remote 원격 저장소를 지정하거나 조회할때 사용하는 명령이다. 여러 저장소를 지정할 수 있다.
$ git push - Update remote refs along with associated objects git push 로컬 레파지토리에서 추가된 커밋을 원격 레파지토리에 반영하는 명령이다. push할 때 원격 레파지토리의 커밋 히스토리가...
$ git fetch - Download objects and refs from another repository git fetch 로컬에는 없지만, 원격 저장소에는 있는 히스토리를 모두 가져온다. 자동으로 merge 되지 않기 때문에 따로 해줘...
Git ★ 재밌는 깃 시작~! 깃 정말 중요합니다! 개인적으로 github 시작하기전에 git 부터, gui 도구를 사용하지 않고 cli 로 배우고 사용하는 것을 추천합니다! 기존에 작성했던 내용을 깃블로그로 이전 중 입니다. (git.txt)
$ git status - Show the working tree status git status 깃에 의해 관리되고 있는 상태를 보여주는 명령어이다. 자주 쓰이는 명령어이다.
$ git rm - Remove files from the working tree and from the index git rm Git에서 파일을 제거하려면 git rm 명령으로 Tracked 상태의 파일을 삭제한 후에 (정확하게는 Staging Are...
$ git log - Show commit logs git log 커밋 히스토리를 조회하는 명령이다.
$ git init - Create an empty Git repository or reinitialize an existing one git init 이 명령은 .git이라는 하위 디렉토리를 만든다. .git 디렉토리에는 저장소 버전관리에 필요...
$ git diff - Show changes between commits, commit and working tree, etc git diff 파일의 내용을 비교해주는 명령이다. CLI 상으로 보기힘든 부분을 외부 도구를...
$ git config - Get and set repository or global options 깃의 환경설정 명령어이다. 환경설정을 잘 활용하면 효율적으로 깃을 사용할 수 있게된다. 설정은 key=value 형식으로 이루어지는데, Git은 여파 설정 파일을 참조하...
$ git commit - Record changes to the repository git commit index 영역의 내용을 기반으로 커밋 오브젝트를 생성하는 명령이다. 커밋 오브젝트에는 부모 커밋의 해시 값과, root tree 해시 값에...
$ git checkout - Switch branches or restore working tree files git checkout 특정 커밋의 상태로 전환하는 명령이다. 체크아웃의 상세한 내용은 추후 채워넣겠다..
$ git branch - List, create, or delete branches git branch 현재 로컬의 브랜치 리스트를 조회하는 명령이다. 브랜치의 상세한 개념은 추후 내용을 채워넣겠다..
$ git add - Add file contents to the index git add Index, 다른 말로 Staging Area 영역에 깃에 의해 추적되는 파일들의 상태를 기록하는 명령어이다. commit 을 수행하기 전 필수로 거쳐야할...
한국어 전처리 패키지(Text Preprocessing Tools for Korean Text)
데이터의 분리(Splitting Data)
원-핫 인코딩(One-Hot Encoding)
패딩(Padding)
정수 인코딩(Integer Encoding)
불용어(Stopword)
어간 추출(Stemming)과 표제어 추출(Lemmatization)
정제(Cleaing)과 정규화(Normalization)
토큰화(Tokenization)
Java 프로젝트에 Kotlin 을 추가하게 된 계기 기존 프로젝트는 스프링부트 + JPA 로 구성되어있어 생산성이 비교적 좋아졌다. 그렇지만 현재 다른 언어들과 같이 모던하지 못한 문법 때문에 불편함을 느꼈고 특히 자바 8에서 Optional 나왔음에도 완전히 Null...
1. 문제 컴포넌트 클래스에서 HandlerExceptionResolver 를 생성자로 주입받게 되면 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfigurat...
문제 jar build 시 initializationError FAILED 에러가 발생하면서 실패했다.
원인 로그를 남기기 위해 HttpServletRequest 클래스를 감싼 커스텀 래퍼클래스를 작성 HttpServletRequest 의 InputStream 을 읽어 올 때의 조건을 만족하지 않아 발생 문제가 발생하는 부분 : && inp...
@Order 어노테이션 int 값 : 숫자가 낮을 수록 우선순위가 높다 (마이너스 값도 가능) Ordered.HIGHEST_PRECEDENCE : 가장 높은 우선순위 Ordered.LOWEST_PRECEDENCE : 가장 낮은 순위(기본 값) @Co...
Event
thread max 스프링부트 thread는 기본 200으로 설정되어있다.
1. Activity 생명주기 그림 이미지 출처
프로젝트 구성요소
안드로이드 컴포넌트 컴포넌트는 안드로이드 앱을 구성하는 기본 요소이다. 각 구성 요소는 시슴템이나 사용자가 앱에 들어갈 수 있는 진입점이 되면 경우에 따라서는 다른 구성 요소에 종속되는 경우도 있다. 컴포넌트 종류는 네 가지로 Activity, Service, Cont...
안드로이드 리소스 리소스는 코드 이외에 프로그램 동작에 필요한 여러 구성요소들을 말한다. 예들들어 설정 파일이나, 이미지, 사운드, 데이터, 텍스트, 다국어 드으이 정보들을 말한다.
# AMD - 원인 CPU가 AMD라서..
Android
‘Invalid Gradle JDK configuration found’ 오류
⌜도메인 서비스⌟
⌜응용 서비스와 표현 영역⌟
⌜리포지터리와 모델 구현⌟
⌜애그리거트⌟
⌜아키텍쳐 개요⌟
⌜도메인 모델 시작하기⌟
데이터프레임 데이터 추출
데이터 프레임 Pandas DataFrame 공식문서 2차원 데이터 구조이다. 행과 열로 구성되어있다. 각 열은 각각의 데이터 타입을 가진다.
파이썬 Pandas 라이브러리에 대해 정리합니다. 판다스는 파이썬 데이터 처리를 위한 라이브러리이다.
파이썬 외부 라이브러리에 대해 정리합니다.
파이썬 표준 라이브러리에 대해 정리합니다.
파이썬 패키지에 대해 학습한 내용을 간략히 정리합니다. (위키독스 점프 투 파이썬 참조)
문제 RDS mariaDB에 Trigger를 생성이 되지 않는다. 원인 AWS RDS는 SYS 엑세스(SUPER 권한)를 제공하지 않는다. 해결방법 MySQL DB 인스턴스에서 바이너리 로깅을 활성화한 경우 DB 인스턴스에 대해 생성하는 사용자 지정 DB 파...
Amazon Linux에서 표준 시간대 변경
AWS Simple Email Service 연동 하기
시간대 수정 1) 인스턴스에서 사용할 표준 시간대를 식별 $ ls /usr/share/zoneinfo 해당 위치의 디렉토리 구조를 탐색하여 원하는 표준 시간대의 파일을 찾아야함 일부 항목은 디렉토리이며 이러한 디렉토리에는 도...
1. AWS EC2 인스턴스 생성 ( ubuntu ) 접속 : https://ap-northeast-2.console.aws.amazon.com/console/home?nc2=h_ct®ion=ap-northeast-2&src=header-signin E...
하이버네이트 방언 종류 jboss doc Reference 공식 링크 Link
1. 문제 신규 Entity 추가 다른 엔티티에서 해당 엔티티를 @JoinColum 으로 매핑 후 Lazyloading 시에 초기화가 되지 않는다는 NoSuchMethodException 발생 Caused by: java.lang.NoSuchMethodExcept...
JPA fetch size
하이버네이트 방언 설정
- Image 사용되지 않는 이미지 제거 ``` $ docker image prune
- Docker Log 별다른 설정을 하지 않았을 경우 컨테이너의 표준 출력 로그 아래와 같은 경로에 쌓이게 된다 /var/lib/docker/containers//-json.log log 가 계속 쌓여서 disk full 이 발생할 수도...
도커 컨테이너 실행 시 스프링부트 profile 적용
Docker Container 표준 시간대 변경
코틀린 스코프 함수 코틀린 표준 라이브러리는 객체의 컨텍스트 내에서 코드 블럭을 실행하기 위한 목적만을 가진 여러가지 함수를 제공한다. 이런 함수들을 람다식으로 호출할 때, 이는 임시로 범위(scope) 를 형성한다. 이 범위 내에서는 객체의 이름이 없어도 객체에 접근...
kapt란 kapt (annotation processing for kotlin) 는 코틀린이 자바의 어노테이션을 처리할 때 kotlin 파일의 어노테이션 처리를 포함합니다. JVM을 기동시킬 때 Kotlin의 어노테이션을 포함시키이 위해 사용되는 플러그인입니다. 기존 a...
Kotlin Variable 코틀린 변수 선언 변수 선언시 키워드 var 또는 val 를 명시해야한다. 변수명: 타입 순으로 작성한다. ex) var v1: Int val v2: Long ...
Kotlin Function
파티셔닝에서 사용할 수 있는 함수 공식문서주소 : https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-functions.html 주요 용어 파티션 프루닝 : 접근이 불필요한 파티션은 전혀 접근하지 않는것...
MariaDB Trigger
마리아 디비 Lock
1. 문제 JUnit(Jupiter) Mockito 클래스의 when, thenReturn 을 이용하여 테스트 코드 작성 테스트 코드 실행 시 아래 익셉션 발생! org.mockito.exceptions.misusing.UnnecessaryStubbingExcep...
어노테이션 정리
JUit
통계 및 데이터 분석에 대해 학습한 전반적인 내용을 간략히 정리합니다.
데이터 전처리에 대해 학습한 전반적인 내용을 간략히 정리합니다.
데이터 활용에 대한 전반적인 내용을 간략히 정리합니다.
리눅스 명령어
리눅스 날짜 포맷 지정 출력
- WSL WSL : Windows Subsystem for Linux 윈되우 10에서 네이트브로 리눅스 실행파일을 실행하기 위한 호환선 계층이다. 윈도우에서 리눅스를 사용하기 위한 도구라고 보면된다.
PowerShell vim 설치
- 문제 커스텀 인터페이스와 구현체를 작성하여 애플리케이션 실행 시 No property [methodName] found for type [Entity]! 가 발생했다. - 원인 스프링이 repository 구현체를 naming 규칙에 따라 생성하는데 그 규...
querydsl Attempt to recreate a file for type 에러
$ gh pr - Github Pull Request Command
Github CLI 소개
Elasticsearch 기본 내용 정리 새 인덱스 생성 PUT books_2 { "mappings": { "properties": { "title": { "type": "text" }, ...
Elasticsearch 기본 내용 정리 Node roles
면접 팁에 대해서 핵심만 간략하게 정리합니다.
자기소개서 작성 팁에 대해서 핵심만 간략하게 정리합니다.
2. Row Reduction and Echelon Forms
1) Linear equaiton
커넥션 풀 계산 참조 링크
Linux Crontab
Linux 타임 스탬프
소프트웨어 생명 주기 (Software Life Cycle) 소프트웨어 생명 주기는 소프트웨어 개발 방법론의 바탕이 되는 것으로, 소프트웨어를 개발하기 위해 정ㅇ의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것이다. 폭포수 모형(Waterfall Model) ...
REST ( Representational State Transfer ) 논문 저자 : Roy T. Fielding 현재 상태 : REST API가 아니지만 REST API라고 부른다.
1. Vector Operations
히스토그램 그래프 구현