본문 바로가기

Develop

(317)
[Kafka] Kafka-console-consumer 카프카의 컨슈머 역할을 한다. 토픽에 대한 조회 용도로 사용한다. 특정 카프카 브로커의 토픽의 데이터를 가져올 수 잇다. bootstrap server, topic에 대한 옵션이 필수이고, 저장된 데이터를 가장 처음 부터 출력이 가능하다. 토픽의 데이터도 가져올 수 있고, 메시지키를 가져올 수도 있다. 최대 컨슘 메시지 개수를 설정할 수도있고 특정 파티션에 대한 컨슘도 가능하다. 진행해보자 1) 주키퍼, 브로커 데몬 모드로 기동 bin/zookeeper-server-start.sh -daemon config/zookeeper.properties bin/kafka-server-start.sh -daemon config/server.properties 2) 토픽 생성 bin/kafka-topics.sh --..
[WebFlux] Webflux 관련 머리속 정리 가끔 깜빡깜빡하다가 아차차..하던것들 Spring Mvc Spring Mvc는 Thread per Request이다. 쓰레드풀의 하나의 쓰레드를 리퀘스트에 쓰는 것이다. 쓰레드 하나가 모든일을 사용하고, 중간에 이 과정은 block된다. 시스템 부하가 크다면, 단순히 외부 network IO를 처리하는 것 자체에 서버 속도 처리 spec이 달라진다는 것이 문제이다. Webflux는 netty 기반이고, nginx와 동일하게, 이벤트 루프를 사용하여, 쓰레드를 사용한다. 단적인 예는 위의 그림과 같다. 하나의 쓰레드에서 외부 Api를 호출하고, 이 과정이 끝나면 다음 테스크에서는 이벤트 루프의 응답을 받은 쓰레드에서 이어서 처리를 한다. 높은 처리가 가능한 이유는, 각 쓰레드당 free한 쓰레드가 많아진다..
[Kafka] kafka-console-producer hello.kafka 토픽에 데이터를 넣을수 있는 명령어를 실행해보자 키보드로 문자를 작성하고 엔터키를 누르면 별다른 응답없이 메시지 값이 전송된다. kafka-console-producer.sh 쉡 스크립트를 사용하면 된다. 그리고, 메시지를 보낼때 separator를 선언하면, 메시지키를 구분자로 사용할 수 있다. 메시지 키를 동일하게 쓰면, 같은 파티션으로 들어가게 된다. 즉 동일한 메시지키를 쓰면, 같은 파티션으로 들어가게 된다. 메시지 키가 Null인 경우, 라운드 로빈으로 전송한다. 즉 여러 파티션에 들어가게 된다. 실습 해보자 bin/kafka-console-producer.sh --bootstrap-server my-kafka:9092 --topic hello.kafka 이렇게 하는 경우 ..
[Kafka] 카프카 config 내용 분석 하기 kafka-configs 를 정리해보자 토픽의 일부 옵션을 설정하기 위해서는 kafka-configs.sh명령어를 사용해야한다. --alter와 --add-config 옵션을 사용하여, Min.insync.replicas옵션을 토픽별로 설정할 수있다. 관련 Config 명령어로 broker,all,describe옵션을 사용해서 조회가 가능하다. bin/kafka-configs.sh --bootstrap-server my-kafka:9092 --alter --add-config min.insync.replica=2 topic test bin/kafka-topics.sh --bootstrap-server my-kafka:9092 --topic hello.kafka --describe 예를 들어 위와 같이, ..
[Kafka] 토픽 생성 및 파티션 설정 토픽은 디비의 테이블과 같다. 토픽을 생성하려면, 클러스터 정보와 토픽의 이름을 알고 있으면 된다. topic.sh를 활용해서 해당 토픽을 생성하거나,컨트롤 하면 된다. 파티션 개수, 복제 개수를 설정할 수 있지만, 안하면 브로커의 기본값으로 세팅된다. 우선 주키퍼와 브로커를 실행하자 실행파일은 bin 하위, config 파일은 config 폴더 하위에 있다. 파티션 개수를 줄일수 없는 특성 때문에, 해당 파티션의 개수를 줄여야 할 때는 방법이 없다. 이때는 그냥 새로 토픽을 만드는 것이 좋다. 일단. 주키퍼, 브로커를 실행하자 1) 주키퍼 실행 bin/zookeeper-server-start.sh config/zookeeper.properties 2) 브로커 실행 bin/kafka-server-star..
[Kafka] 카프카 재시작시 발생하는 에러 카프카를 다시 시작하면 종종 에러가 발생하게 된다. 기존에 클러스터에 대한 내용을 캐싱 형태로 가지고 있게 되는데, 이는 재시작을 위해 지워줘야 한다. 왜냐면, 해당 정보는 클러스터가 재시작될때 변경되는데, 이전의 클러스터 정보를 찾아가기 때문이다. (에러 내용) kafka.common.InconsistentClusterIdException: The Cluster ID HJcDo1HpS5-q4aZps1OlAQ doesn't match stored clusterId Some(E40mZS9sS4q0HuW9kidRqg) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wro..
[Spring] Spring Profile 공부를 막 시작한 친구를 위해.. 기록용 Spring 에서는 profile별로, 변수나 정적 값의 정보를 다르게 가져갈수 있다. 간단하게 파일 구조는 이렇게 분리가 가능하다. application-환경.yaml 이다. 흔히 Java를 런시거나, Jar파일을 실행할때, VM Options을 주게 되는데 이 Vm Option으로 환경변수에 대한 값을 지정해주면 해당 Profile로 분기처리를 하여, 동작을 제어할 수 있다. 인텔리제이를 예로 위 처럼 -D로 변수명,값을 Vm option으로 넘겨주게 되면 스프링이 기동될때 해당 프로파일에 대한 값으로 정보를 가져오게 된다. 이게 가장 흔하고 기본적인 내용이다. @ActiveProfile이나 등등 해당 프로파일을 가지고 빈의 값을 동적으로 분기처리하는.. 그런..
[Spring] 스프링 밸리데이션 동작과정 머리속에 들어있는 내용들을 정리한다. 1. 밸리데이션 관련 의존성 주입. implementation 'org.springframework.boot:spring-boot-starter-validation' 2. 간단한 테스트 @RestController @RequiredArgsConstructor public class MemberController { private final MemberMapper memberMapper; @RequestMapping("/member") public String mapperTest(@RequestBody @Valid MemberDto memberDto){ return "success!"; } } @Getter @Setter @AllArgsConstructor public..