묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
tumbling window 가 close 되는 시점에 로직이 수행되도록 하고 싶습니다.
final KStream<String, MonitoringClass> ks0 = streamsBuilder.stream(INPUT_TOPIC, Consumed.with(STRING_SERDE, MONITORING_CLASS_SERDE)); Duration windowDuration = Duration.ofMinutes(2); TimeWindows tumblingWindow = TimeWindows.of(windowDuration.toMillis()).grace(Duration.ZERO); ks0 .groupByKey() .windowedBy(tumblingWindow) .count() .suppress(Suppressed.untilWindowCloses(Suppressed.BufferConfig.unbounded())) .toStream() 안녕하세요, 다음과 같이 suppress() 함수를 사용해서 윈도우가 종료되는 시점에만 특정 로직을 실행하고 싶은데 suppress() 함수를 추가한 후부터는 테스트 실행시 아예 컨슈밍이 안되는 것 처럼 보여서 도움을 얻고자 글 남겼습니다.해당 부분도 커밋 주기 때문에 예상대로 동작하지 않는 걸까요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
레디스 적용 시 여러번응모 테스트에서 에러가 발생합니다.
@SpringBootTest class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test public void 한번만응모() { applyService.apply(1L); long count = couponRepository.count(); assertThat(count).isEqualTo(1); } @Test public void 여러번응모() throws InterruptedException { int threadCount = 1000; //ExecutorService : 병렬 작업을 간단하게 할 수 있게 도와주는 Java API ExecutorService executorService = Executors.newFixedThreadPool(32); // CountDownLatch : 다른 Thread에서 수행하는 작업을 기다리도록 도와주는 클래스 CountDownLatch latch = new CountDownLatch(threadCount); for (int i=0; i<threadCount; i++) { long userId = i; executorService.submit(() -> { try { applyService.apply(userId); } finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } }@Service public class ApplyService { private final CouponRepository couponRepository; private final CouponCountRepository couponCountRepository; public ApplyService(CouponRepository couponRepository, CouponCountRepository couponCountRepository) { this.couponRepository = couponRepository; this.couponCountRepository = couponCountRepository; } public void apply(Long userId) { Long count = couponCountRepository.increment(); System.out.println("count : "+count); // long count = couponRepository.count(); if (count > 100) { return; } Coupon save = couponRepository.save(new Coupon(userId)); System.out.println("save! : "+save.getId()); } }@Repository public class CouponCountRepository { private final RedisTemplate<String, String> redisTemplate; public CouponCountRepository(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } public Long increment() { try { return redisTemplate .opsForValue() .increment("coupon_count"); } catch (Exception e) { e.printStackTrace(); throw e; } } }여러번응모 테스트 케이스 실행CouponCountRepository.java의 increment 메서드에서 다음과 같은 에러가 발생하고 있습니다.제일 처음에 나는 에러메시지는 다음과 같습니다.Caused by: io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.쿠폰도 정상적으로 등록되지 않아 아에 0개로 출력되고 있습니다.구글링을 해봤지만 도저히 원인을 찾을 수가 없어요 ..++추가로, 도커에서 레디스 컨테이너와 이미지를 삭제한 후 실행해도 동일한 결과가 나타나는 것을 확인됩니다.강의에서 나온 그대로 도커 명령어를 사용해서 레디스를 pull 하였는데 왜 컨테이너와 이미지를 삭제해도 동일한 오류가 발생하는 걸까요?도커에서 레디스 컨테이너와 이미지를 삭제하고 ApiApplication을 실행하면 정상적으로 실행됩니다...++ 정리 드리자면, 1. 강의를 그대로 따라했는데 RedisCommandExecutionException가 발생하면서 테스트 케이스를 실행할 수 없는 이유2. 강의에서 나온 그대로 도커 명령어를 사용해서 레디스를 pull 하였는데 왜 컨테이너와 이미지를 삭제해도 동일한 오류가 발생하는 이유3. 도커에서 레디스 컨테이너와 이미지를 모두 삭제하고 ApiApplication를 실행했을 때 정상적으로 실행되는 이유답변 부탁드립니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
섹션 1 Service Discovery Eureka Service Discovery 빌드 시 오류납니다.
IntelliJ Community 2021.2.3 버전으로 진행하고 있습니다.컴파일 오류는 나지는 않지만 빌드 시 오류가 납니다. 어떤 부분이 잘못 되었는지 모르겠습니다. 어떻게 해야 될까요? application.ymlserver: port: 8761 spring: application: name: discoveryservice eureka: client: register-with-eureka: false fetch-registry: false pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>discoveryservice</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>discoveryservice</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> <spring-cloud.version>2022.0.4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>paketobuildpacks/builder-jammy-base:latest</builder> </image> </configuration> </plugin> </plugins> </build> </project> DiscoveryserviceApplication.javapackage com.example.discoveryservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class DiscoveryserviceApplication { public static void main(String[] args) { SpringApplication.run(DiscoveryserviceApplication.class, args); } }
-
미해결실습으로 배우는 선착순 이벤트 시스템
redis 설정 시 application.yml을 수정하지 않는 이유
안녕하세요 강사님.spring-data-redis 의존성을 추가하여 디펜전시 받고couponcountrepository.java를 생성하였습니다.보통 yml 파일에 redis 관련 설정도 해주는 것으로 알고있었는데 강의에서는 따로 yml에 redis 설정을 하지 않아서요.redis 설정을 안해준다면 어플리케이션에서 어떻게 redis와 연결될 수 있는지.. 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
스프링 시큐리티 최신버전 코드 있을까요?
제일 최근에 질문한 글 참고해도 적용이 안되네요...혹시 현재 버전에서 적용 가능한 코드가 있을까요?아니면 참고할 수 있는 자료라도 있을까요? https://start.spring.io/ 에서 gradle로 생성해서 사용중입니다. 스프링 3.2버전 사용하고있어요.
-
미해결카프카 완벽 가이드 - 코어편
메시지 배치 내의 데이터 저장 관련 질문
안녕하세요.producer에서 메시지가 배치 단위로 전송이 되고, retry도 해당 배치 단위로 이뤄지는 것 같은데요.예를 들어 1~10번의 메시지가 하나의 배치를 이루고 있을 때 그 안에서 3,5번 메시지만 전송이 실패한다거나 하는 경우가 생기면 해당 메시지 배치 전체가 실패로 처리되어 retry하게 되는 걸까요?그리고 해당 배치를 이루고 있는 내부 메시지들의 전송순서 또한 seq 기반으로 구현되어 있는 건지도 궁금합니다.
-
미해결카프카 완벽 가이드 - 코어편
파티션별로 topic 이 관리되는거 같은데...
파티션과 topic 의 관계를 알고 싶습니다.
-
미해결카프카 완벽 가이드 - 코어편
토픽 삭제와 관련한 질문
고생 많으십니다. 강사님 만약 topic 에 producer 와 consumer 가 있는 상태에서 topic의 삭제가 가능한지요? 아울러 topic 도 자동삭제 기능이 있는지요?강사님 또는 비전러닝머신관련 새로운 추가 강의 부탁드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
보상 트랜잭션의 대한 후속 강의 2차 문의합니다.
보상 트랜잭션의 대한 후속 강의 문의합니다.8개월 전쯤 상반기에 출시 계획이 있다고 하셨는데, 언제쯤 강의를 출시할 계획이신가요?전체적인 로드맵을 공유해주시면 좋을 것 같습니다.후속 강의가 너무 궁금합니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
centos 7로 이 강의를 진행할 수 있나요?
centos 6을 다운 받을 수 없어 centos7을 다운 받아 진행하려고 합니다.지금 진행하다가 막힌 부분은 server01과 server02를 virtual Machine에서 centos7 파일 적용이 안 됩니다.\이 다음에 아무것도 안 뜨고 검은색 화면만 뜹니다
-
미해결실습으로 배우는 선착순 이벤트 시스템
코드 제공
혹시 전체 코드를 받아볼 수 있는 리포지토리가 있을까요?
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
Consumer Lag은 어느정도 수치면 정상적인 상황일까요?
안녕하세요, 강의 재밌게 듣고 있습니다 컨슈머 그룹편을 보다가 궁금해졌는데.. 실무하실때 Lag이 어느정도 쌓이면 장애상황이라고 생각하시나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
my-order-sink-connect 변경 정보 문의
my-order-sink-connect로 DB 접속정보를 생성하고 connect를 생성한 후 orders 테이블의 정보(PK, unique 등)가 변경되면 my-order-sink-connect에서 변경된 DB 정보를 인지하고 있나요?아니면 connect가 바라보고 있는 테이블의 정보(PK, 컬럼, unique 등)가 변경되면 connect를 삭제 하고 다시 생성해 줘야 하나요? 감사합니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink pk에러
안녕하세요 my-ordser-sink-connect를 만들고 연계 테스트도 잘 진행하였습니다.테스트 진행시 데이터 설정값오류로 pk Exception이 발생하였는데 이 이후 부터 데이터 입력도 되지 않고 재기동하여도 topic를 참조하여 pk 에러가 나타나고 신규 데이터를 받지 못하고 있습니다.my-order-sink_connect 장애 발생시 예외 처리나 장에 처리 가이드가 따로 있을까요감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@EnableKafka 인식안됨
다른 분들은 저와 같은 경우 없으신가요?ㅠㅠ아래와 같이 gradle 파일에 디펜던시 추가해줬습니다.그런데implementation 'org.springframework.kafka:spring-kafka'@EnableKafka 어노테이션을 인식하지 못하네요ㅠㅠ구글링해도 kafka 어노테이션 관련 글은 없어서 질문드립니다.ㅠㅠ <코드내용><오류 정보 >
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
실시간으로 데이터를 전송해야할때
안녕하세요. 프로듀서의 accumulator 관련 질문이 있습니다.Accumulator 내부에서 레코드를 배치로 모아 보낸다고 하셨는데, 데이터를 실시간으로 처리해야하는 경우에는 배치 작업을 스킵할 수도 있는 건가요?.? 감사합니다 :)
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
postgresql 연동 문의
Postgresql DB 사용시 auto_increment 옵션이 업어서아래와 같이 작성하여 order등록 테스트 진행시 id 값이 null 이어서 에러가 나타납니다.create table orders ( id int primary key, user_id varchar(50) not null, product_id varchar(20) not null, order_id varchar(50) not null, qty int default 0, unit_price int default 0, total_price int default 0, created_at datetime default now())테이블을 직접 생성하지 않고 소스의 jpa의 create 옵션을 사용하여 orders 테이블을 생성하고 상품을 등록하면 id 값이 자동으로 등록이 되는되 내부적으로 id값이 맵핑되는 로직이 따로 존재 하는 건가요? 테이블을 수동으로 생성 후 id 값을 맵핑시킬수 있는 로직이 따론 존재 하는 걸까요?@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id;
-
미해결카프카 완벽 가이드 - ksqlDB
Group by push쿼리 사용중 오류 관련해서 질문드립니다.
안녕하세요 강사님 질문드립니다. group by 를 사용하여 조회할때한번씩 group by 가 되지않고 조회되는경우가 있는데이경우에는 리눅스 서버가 문제인건가요?쿼리 날리면 결과가 조금 늦게 뜨긴합니다.
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
Streams테스트중 질문드립니다.
StreamsFilter를 실행시키는 중 강사님 화면과 다른 게 있어서 질문드립니다.강사님께서는 실행시켜도 콘솔에 로그가 출력되지 않는데 저는 실행시키면 로그가 계속 출력됩니다. 혹시 잘못한 건지 궁금해서 질문드립니다.
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
kafka-connect-web관련 문의드립니다.
안녕하세요강의중 Kafka-connect-web에 대해 말씀하셔서 실습차 아래와 같은 구성으로 세팅후 확인중 에러가 있어 문의드립니다. 환경설정 zookeeper, Kafka, Kafka Connect 서버 : 10.0.3.16, 10.0.3.17, 10.0.3.18Kafka-connect-web 서버 : 10.0.1.9 Kafka-connect-web은 위의 서버에 도커 컨테이너로 생성하였고생성명령어는 아래와 같이 했습니다. docker run -d -p 8080:8080 --name kafka-connect-web -e "VUE_APP_CONNECT_SERVERS=http://10.0.3.16:8083,http://10.0.3.17:8083,http://10.0.3.18:8083" officialkakao/kafka-connect-web:latest 문제 내용container 안에서 curl 10.0.3.16:8083/connector-plugins로 확인시 값을 받아와서 네트워크 문제는 없는것 같은데 Kafka-connect-web에서 Connector class 값을 받을려고 실행하는 axios가 timeout이 나고,container 안에서 tcpdump를 떠도 패킷이 보이지 않습니다.Kafka-connect-web에 추가적인 설정이 필요한지 문의드립니다.