우리 팀에서는 사용자의 조작에 따라 카프카의 특정 토픽을 구독하거나 구독 취소하는 기능을 구현하고 있다. 이 과정에서 topicList라는 리스트를 통해 구독할 토픽을 관리하고, 해당 리스트의 사이즈를 체크하여 구독할 대상이 있는 경우에만 로직을 실행하도록 개발했다. 그런데 topicList에 데이터가 하나도 없을 때 무한루프에 빠져 새로운 토픽이 추가되어도 무한루프를 빠져나오지 못하는 현상이 발생했다.문제의 원인아래는 대략적인 코드이다. 코드를 살펴보면, topicList의 사이즈가 0일 때 while문 안에서 continue가 호출되어 무한루프에 빠지는 것을 알 수 있다. 사실 이 코드는 애초에 잘못 짜여진 코드이다. 토픽이 없는 경우에도 무한루프에 빠지가 코드를 짜면 안된다. 하지만 그렇다고 하더라..
전체적인 로직깃허브에서 pull request 를 만들면 api gateway로 요청을 보낸다 api gateway 는 lambda의 함수를 호출하고 lambda 의 함수 로직에서 mattermost를에 메세지를 전송한다api gateway : API 만들어주는 친구. 외부 클라이언트로부터 요청을 받아 람다 함수로 연결해줌lambda : 서버리스 컴퓨팅 플랫폼(메서드만 작성해서 실행시킬 수 있음)1. Mattermost에 webhook 추가하기먼저 mattermost에 외부 메세지를 받을 수 있도록 webhook을 추가해 준다좌상단 > 통합전체 Incoming WebhookIncoming Webhook 추가하기 내용 입력 생성된 URL → 람다에서 메세지 전송할 URL 로 사용2. aws lambda 함..
최근에 DL(Data Lake) 데이터 저장소를 Logpresso에서 ClickHouse(+Nifi)로 전환하는 작업을 진행했다. 이에 따라 API 서버(Spring Boot)에서도 Logpresso에서 가지고 오던 데이터를 ClickHouse에서 가져오도록 전환을 진행했다. 이를 위해 하나의 프로젝트에 다중 데이터소스(pg, ClickHouse)를 연결해야 했다. 이 글은 그 내용을 다룬다. 1. build.gradle 에 clickhouse jdbc 추가ClickHouse JDBC를 사용하기 위해 build.gradle에 의존성을 추가해준다. 2. yml 에 clickhouse 접속 정보 추가application.yml 파일에 ClickHouse 접속 정보를 추가해준다.datasource 위의 pos..
우리 팀에서는 브랜치에 push 될 때 마다 jar를 넥서스에 올려놓는 형식으로 사용중이다넥서스를 설치한 이후 보관주기를 설정한적이 없어 서버용량의 99% 를 사용중이었고 nexus 의 기능을 이용해 cleanup 설정을 걸어줬다 1. Cleanup Policies 설정정리 정책 설정Nexus Repository Manager에 로그인한다Administration > Repository > Cleanup Policies로 이동한다 기본적인 정보들을 적어준다 Cleanup Criteria 설정:Component Age: 게시일로부터 설정한 날짜가 지났을 경우Component Usage: 설정한 날짜 동안 다운로드되지 않았을 경우Asset Name Matcher: 삭제할 대상 이름의 정규식 설정 조건을 설정..
✔ 목표 : centOS7에 제우스8 설치하고 띄워보자 0. 설치 파일 다운로드 - 아래 링크에서 진행 https://technet.tmax.co.kr/ko/front/download/findDownloadList.do TmaxSoft Technical Network [technet-01] 데모라이선스 신청 데모라이선스는 제품구입 전 테스트 및 검토를 위하여 제한 된 기간 동안 발급받아 사용가능한 라이선스 입니다. technet.tmax.co.kr 1. jeus8500_unix_generic_ko.bin 파일이 위치한 디렉터리로 이동 후 설치 파일을 실행 ./jeus8500_unix_generic_ko.bin 1)소개 -> ENTER 2) 라이센스 -> ENTER 라이센스 이어서 -> ENTER -> E..
우리 프로젝트에서는 여러개의 쓰레드를 이용하여 작업을 실행하기 위해 ThreadPoolExecutor를 이용하고 있다 쓰레드 풀의 개수는 고정적으로 사용하고 있으며, 해당 쓰레드를 실행하는 부분에서 쓰레드의 개수를 관리하며 쓰레드 풀 이상의 요청은 하지 않기 때문에 이론적으로는 쓰레드 풀이 터지는 경우는 없어야 했다. 하지만 여러 프로젝트를 진행하며 종종 쓰레드 풀이 터지곤 했는데 이번에 조금 더 깊이 파봤다 발생한 오류 는 아래와 같다 RejectedExecutionException: Task cohttp://m.xxx.xx.TrainWorker rejected from java.util.concurrent.ThreadPoolExecutor[Running, pool size = 16, active th..
kafka with raft(kafka without zookeeper)? 그동안 카프카를 사용할 때 클러스터의 메타데이터와 상태 정보를 관리하기 위해 zookeeper를 설치해 사용하고 있었다. 하지만 아파치는 KIP-500에서 카프카에서 주키퍼를 없애기로 발표했다. 카프카를 위해 주키퍼까지 설치, 관리하는것이 아니라 카프카만 설치하면 된다는 점이 매력적으로 다가왔고, 이를 적용하기로 했다. 카프카 설치 0. 카프카를 설치를 위한 사전작업 카프카 파일 다운을 위한 wget 설치 yum install wget tar 설치 yum install -y tar java 설치 https://bamdule.tistory.com/57 참고 1. 카프카 설치 # 파일 다운로드 wget https://downloads..
pg의 데이터 타입인 timestamp 와 timestamptz의 차이점에 대해 알아보자이 문서는 postgres 12 기준으로 작성되었다.postgresql 문서The SQL standard requires that writing just timestamp be equivalent to timestamp without time zone, and PostgreSQL honors that behavior. timestamptz is accepted as an abbreviation for timestamp with time zone; this is a PostgreSQL extension.=> timestamptz : timestamp with time zone의 약어timestamp : 타임존을 명시하지..
- Total
- Today
- Yesterday
- 카프카
- 넥서스 보관주기
- cleanup policies
- s3
- kafka with raft
- 제우스 로그
- cleanup policy
- 다중 데이터소스
- 제우스8.5
- 넥서스 파일 보관주기
- 티스토리챌린지
- kafka without zookeeper
- AWS
- php
- 보관주기
- 오블완
- SynchronousQueue
- API Gateway
- docker
- volatile
- multiple datasource
- jeus8
- 도커
- 제우스8
- 네트워크
- 스레드 동기화
- 쓰레드 변수
- jeus8.5
- 주키퍼 없는 카프카
- db 두개
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |