Infra
Kafka Producer, Consumer 코드 사용법
Kafka Producer, Consumer 코드 사용법Kafka Client를 이용한 프로듀서final Properties configs = new Properties();configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());configs.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());final KafkaProducer producer = new KafkaProduce..
ElasticSearch index.refresh_interval 옵션의 -1 값에 대해
ES index.refresh_interval 옵션의 -1 값에 대해GET {index_name}/_settings을 조회해보면 index의 설정이 나오는데, 이때 refresh_interval 값이 나오는 경우도 욌고 없는 경우도 있다. 없다면 기본값인 1s 으로 돌아가는 것이다. ES는 near-realtime으로 돌아간다. 만약 문서를 색인했으면 검색에서 조회가 되기 위해서는 refresh가 되는 것을 기다려야 한다. 이 때 사용되는 옵션이refresh_interval 다. refresh 작업 자체가 비싼 작업이기 때문에 색인 성능을 높이기 위해서는 이 값을 올리는 것이 좋다. 이 값을 -1로 둔다는 것은 refresh를 비활성화한다는 뜻이기 때문에 추가된 문서가 검색이 되지 않을 수 있다. ES는..
k8s secret properties 파일로 volume mount 하기
k8s secret properties 파일로 volume mount 하기apiVersion: v1kind: Secretmetadata: name: bepoz-secret labels: app: bepoz-apptype: Opaquedata: name: YmVwb3o= # 'bepoz'의 base64 인코딩apiVersion: apps/v1kind: Deploymentmetadata: name: bepoz-deploymentspec: replicas: 1 selector: matchLabels: app: bepoz-app template: metadata: labels: app: bepoz-app ..
OpenSearch Sink Connector 등록 설정
OpenSearch Sink Connector 등록 설정OpenSearch Sink Connector 란말 그대로 open search를 위한 sink connector 입니다. 카프카 토픽의 내용을 바로 open search의 index로 인덱싱하기 위해서 사용합니다. elastic search에서 fork 되어서 나온 open search 라고 elastic search sink connector를 사용하면 동작하지 않습니다.( 관련해서 es 직원이 답변해둔 링크 ) es sink connector의 경우 confluent 사에서 공식적으로 plugin을 제공한다(ex. confluentinc/kafka-connect-elasticsearch:14.0.12). open search sink conn..
여러 파드 로그 조회 명령어 Stern
여러 파드 로그 조회 명령어 Stern k logs {pod-name} 으로 파드를 조회할 때에 1개의 파드만 조회가능하다. 만약 replicas가 여러개라면 1개의 파드를 보는 것으로는 제대로된 로그파악이 되지 않는다. k logs -l app=bepoz 이렇게 레이블이 app=bepoz인 것 들을 한 번에 조회할 수도 있긴하지만 -f 옵션으로 지속적으로 로그변경을 확인하고 싶을 때에는 최대 5개의 파드까지만 가능하기 때문에 파드 수가 많다면 k logs -f -l app-bepoz 이렇게 사용이 어렵다. 명령어 stern은 가능하다. stern은 쿠버네티스 클러스터의 여러 파드와 여러 컨테이너를 tail 할 수 있게끔 해준다. brew install stern 으로 stern을 설치한다. 기본적으로 ..
쿠버네티스 인 액션
쿠버네티스 소개쿠버네티스 클러스터 이해마스터 노드는 전체 쿠버네티스 시스템을 제어하고 관리하는 쿠버네티스 컨트롤 플레인을 실행한다워커 노드는 실제 배포되는 컨테이너 어플리케이션을 실행한다컨트롤 플레인컨트롤 플레인은 클러스터를 제어하고 작동시킨다. 하나의 마스터 노드에서 실행되거나 여러 노드로 분할되고 복제돼 고가용성을 보장할 수 있는 여러 구성 요소로 구성된다.쿠버네티스 API 서버는 사용자, 컨트롤 플레인 구성 요소와 통신한다.스케줄러는 애플리케이션의 배포를 담당한다.(애플리케이션의 배포 가능한 각 구성 요소를 워크 노드에 할당)컨트롤러 매니저는 구성 요소 복제본, 워커 노드 추적, 노드 장애 처리 등과 같은 크러스터단의 기능을 수행한다.Etcd는 클러스터 구성을 지속적으로 저장하는 신뢰할 수 있는 분..
[ES] rollup 간략 정리
ElasticSearch rollup에 대해 특정 정보를 es에 계속해서 쌓고있는 상황이라고 하자, 정보를 계속해서 인덱싱하다보면 용량이 점점 늘어나게 될것이고 이는 리소스 비용의 증가로 이어질 것이다. 이 정보들을 summary/압축하여 가볍게 보관하면서 이전의 데이터를 사용하기 위해 롤업을 사용한다. 예시로 사용할 인덱스와 도큐먼트 정보는 아래와 같다. PUT rollupexample-2022.01.01 { "mappings": { "properties": { "updateType": {"type": "keyword"}, "age": {"type": "long"}, "date": {"type": "date", "format": "epoch_millis"} } } } POST _bulk {"index"..
[Redis] RedisTemplate, RedisCacheManager 설정에 대해
RedisTemplate, RedisCacheManager 설정에 대해 레디스를 캐시서버로 이용하려고 하는 상황이다. @Configuration @RequiredArgsConstructor public class RedisConfig { // spring.data.redis yaml에 정의하고 이걸 토대로 자동으로 생성되는 RedisConnectionFactory 빈을 사용 추천 private final RedisProperties redisProperties; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisC..