inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

왜 쿠폰수가 너무 많을까요?

미해결

실습으로 배우는 선착순 이벤트 시스템

분명 현재 없는 상태이고 결과가 자꾸 이상하게 나와서 sout 처리를 잠시 해보았습니다 package com.example.api.service; import com.example.api.domain.Coupon; import com.example.api.repository.CouponCountRepository; import com.example.api.repository.CouponRepository; import org.springframework.stereotype.Service; @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 applyV1(Long userId) { Long count = couponRepository.count(); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } public void applyV2(Long userId) { Long count = couponCountRepository.increment(); System.out.println(count); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } } @SpringBootTest class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test public void applyOnce() { applyService.applyV1(1L); long count = couponRepository.count(); Assertions.assertEquals(1L, count); } @Test public void 여러명응모V1() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV1(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } @Test public void 여러명응모V2() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV2(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); org.assertj.core.api.Assertions.assertThat(count).isEqualTo(100); } } 그런데 여러명응모V2 test를 실행시에 count를 출력시 다음과 같은 수가 나옵니다. 20003 20011 20012 20013 20015 20016 20017 20018 20020 20022 ??? 한번 할때마다 1000씩 쿠폰의 수가 증가중인데요;;; 조회했을때는 empty라 나오는데 이렇게 되는 연유를 잘 모르갰습니다. 테스트 코드라서 rollback이 되야할거 같은데 그렇지 않는것도 잘 모르겟네요;; ㅠㅠ

  • java
  • docker
  • spring-boot
  • kafka
  • redis
seonjun Moon 댓글 1 좋아요 0 조회수 657

파티션 개수 늘리기

해결됨

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

파티션 개수를 늘리면 프로듀서의 처리량이 늘어나는 게 맞을까요? 이게 맞다면 왜 파티션 개수를 늘리면 프로듀서의 처리량이 늘어나는 지 알 수 있을까요? 파티션이 2개라고 했을 때 프로듀서의 데이터를 넣는 게 파티션 A 넣고 파티션 B 넣고 파티션 A 넣고 이렇게 되면 파티션 하나 일 때랑 별 차이가 없을 것 같아서 질문 드립니다.

  • kafka
  • 데이터-엔지니어링
fbfbf1 댓글 2 좋아요 0 조회수 439

(필수정보) 레거시 bootstrap 을 사용하지 않는 방법

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

* bootstrap 라이브러리를 추가하고 아래와 같이 application.yml 파일만으로 설정하면 적용이 안됩니다. dependency에 bootstrap을 의존성 추가하지 않습니다 . 그 후 application.yml파일에 아래와 같이 설정합니다. spring: cloud: config: name: ecommerce # yml 파일명 앞부분 config: import: optional:configserver:http://localhost:8888 # 구성정보 설정 강의에서 나오는 bootstrap.yml 설정 정보를 Spring Boot 2.4버전 이후부터는 application.yml 설정 정보에서 사용할 수 있습니다. ( 공식홈페이지 ) 위 방법은 공식 홈페이지 목차에서 Spring Cloud Config Client - Spring Boot Config Data Import 부분에 나와있습니다. 만약 bootstrap 라이브러리를 사용한 구성설정을 하고 싶다면 공식홈페이지 목차에서 Spring Cloud Config Client - Config First Bootstrap 부분을 살펴보시면 되겠습니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
nyximos 댓글 2 좋아요 10 조회수 1411

빅디님 좋은 강의 너무 감사드립니다 강의 연장 가능한지 문의드립니다

미해결

15일간의 빅데이터 파일럿 프로젝트

좋은 강의에 항상 신경써주셔서 감사합니다 미처 수강하지 못한 부분이 있어서 수강을 하고자 합니다 너무 좋은 강의에 감사드리며 요청드립니다

  • 빅데이터
  • hadoop
  • kafka
  • zookeeper
  • redis
  • flume
  • impala
  • 데이터-엔지니어링
댓글 1 좋아요 0 조회수 326

데이터 다시 읽기

해결됨

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

안녕하세요 세그먼트가 00000.log, 00010.log, 00020.log가 있다고 하고 Consumer가 30번 offset까지 읽었을 때 offset 10 ~ 19번까지를 다시 읽고 싶으면 00010.log 파일을 사용하면 되는걸까요??

  • kafka
  • 데이터-엔지니어링
fbfbf1 댓글 2 좋아요 1 조회수 397

카프카 브로커 cpu 사용률 관련입니다.

미해결

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

안녕하세요, 강의 잘 봤습니다. 카프카의 실제 운영관점의 질문을 드리고자 합니다. 상황에 따라 다르겠지만, 카프카 브로커의 권장 cpu 스펙이 있을까요? 카프카 브로커의 cpu사용률은 무엇에 크게 좌우될지 궁금합니다. 예를들면, 토픽 및 파티션의 수에 비례한다든지, 메시지 사이즈에 비례한다든지 질문드리는 이유는 카프카를 신규 구성 예정인데요, 내부적으로 테스트 해봤을때 업무량에 크게 좌우되지는 않는 것 같았는데, 파티션 수가 많은 경우에 튀어 보이긴 합니다. 참고로 압축기능은 사용하지 않습니다.

  • kafka
  • 데이터-엔지니어링
ljmljm7 댓글 2 좋아요 0 조회수 653

Debezium Source 에서 topic에 저장되는 UTC시간대 질문

미해결

카프카 완벽 가이드 - 커넥트(Connect) 편

안녕하세요. topic에 UTC 시간대로 저장되는 문제가 있습니다. 해결 접근방법에 조언을 듣고 싶습니다. Sink를 적용했을때 customers, products,order_items는 문제없이 적용되었으나 orders테이블의 timestamp타입의 order_datetime컬럼에 문제가 발생하여 SMT 옵션을 추가하다가 발견한 문제입니다. 결론적으로 mysql_cdc_oc_sink_orders_01.json에 "transforms": "ConvertDateTimeType", "transforms.ConvertDateTimeType.type": "org.apache.kafka.connect.transforms.TimestampConverter$Value", "transforms.ConvertDateTimeType.target.type": "Timestamp", "transforms.ConvertDateTimeType.field": "order_datetime", "transforms.ConvertDateTimeType.format": "yyyy-MM-dd'T'HH:mm:ss'Z'", "transforms.ConvertDateTimeType.timezone": "Asia/Seoul" 위 옵션을 추가하여 sink로 저장을 해결하였으나 topic에 저장되는 시간이 다르게 저장되는것을 발견했습니다. source 데이터베이스에서는 2023-06-20 13:56:40 에 저장하였으나 sink 데이터베이스에서는 2023-06-20 04:56:40으로 저장되고 있었습니다. 이에 topic을 확인해보니 저장되는 시간대가 2023-06-20 04:56:40으로 topic에서부터 저장되는 값이 다른 것을 알 수 있었습니다. 따라서 source설정쪽이 문제일 것 같은데 "database.connectionTimeZone": "Asia/Seoul" 옵션을 넣었음에도 UTC로 적용되고있어 질문드립니다. 감사합니다. mysql_cdc_oc_source_01 . json { "name": "mysql_cdc_oc_source_01", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "192.168.56.101", "database.port": "3306", "database.user": "connect_dev", "database.password": "connect_dev", "database.server.id": "10001", "database.server.name": "mysql01", "database.include.list": "oc", "table.include.list": "oc.customers, oc.products, oc.orders, oc.order_items", "database.history.kafka.bootstrap.servers": "192.168.56.101:9092", "database.history.kafka.topic": "schema-changes.mysql.oc", "key.converter": "org.apache.kafka.connect.json.JsonConverter", "value.converter": "org.apache.kafka.connect.json.JsonConverter", "transforms": "unwrap", "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState", "transforms.unwrap.drop.tombstones": "false", "database.connectionTimeZone": "Asia/Seoul" } } MYSQL의 TIME_ZONE은 한국시간대입니다. mysql> select @@system_time_zone; +--------------------+ | @@system_time_zone | +--------------------+ | KST | +--------------------+

  • kafka
  • 데이터-엔지니어링
좋은 낙지 댓글 2 좋아요 0 조회수 1246

No suitable driver 나오시는 분들

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar 제 경우 mariadb 커넥터 대신 mysql 커넥터 사용해서 해결했습니다. (... confluentXXX/share/java/kafka 폴더에 위치) 정말.. 하루종일 아래 예외로 애먹었네여.. Error while starting connector ... No suitable driver found for jdbc:mysql:// localhost:3307/mydb mariadb 버전별 커넥터를 5개정도 해봐도 안되어서 자포자기한 채로 mysql 커넥터를 사용하니 되었습니다 ㅠㅠ 자세한 버전 정보입니다. (윈도우) kafka : 2.13-3.4.0 kafka-connect-jdbc : 10.7.2 confluent : 7.4.0 mariaDB : 10.11 java : 17 설정 정보입니다. confluent/etc/kafka/connect-distributed.properties 89번 행 근처 plugin.path=\C:\\Work\\confluentinc-kafka-connect-jdbc-10.7.2\\lib confluent/bin/windows/kafka-run-class.bat 97번 행 근처 rem classpath addition for LSB style path if exist "%BASE_DIR%\share\java\kafka\*" ( call :concat "%BASE_DIR%\share\java\kafka\*" ) (...) 122번 행 근처 rem Log4j settings IF ["%KAFKA_LOG4J_OPTS%"] EQU [""] ( if exist %~dp0../../etc/kafka/tools-log4j.properties ( set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%~dp0../../etc/kafka/tools-log4j.properties ) else ( set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%BASE_DIR%/etc/kafka/tools-log4j.properties ) ) ELSE ( rem create logs directory IF not exist "%LOG_DIR%" ( mkdir "%LOG_DIR%" ) set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%~dp0../../etc/kafka/tools-log4j.properties ) confluent/bin/windows/connect-distributed.bat 28번 행 근처 rem Log4j settings IF ["%KAFKA_LOG4J_OPTS%"] EQU [""] ( set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%BASE_DIR%/etc/kafka/connect-log4j.properties -Dlog4j.config.dir=%BASE_DIR%/etc/kafka ) POST Request { "name":"my-source-connect", "config":{ "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:mysql://localhost:3307/mydb", "connection.user":"root", "connection.password":"1234", "mode":"incrementing", "incrementing.column.name":"id", "table.whitelist":"users", "topic.prefix":"my_topic_", "tasks.max":"1" } }

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
댓글 2 좋아요 3 조회수 7142

busrefresh 요청 시 rabbitmq 큐 처리

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요 테스트를 하면서 찾아봐도 해당 부분에 대한 의문이 해결되지 않아서 문의 드립니다. 예를 들어 3대의 서버에 spring event bus를 구성한 후 1번 서버에서 busrefresh를 요청하면 3대 서버에서 refresh가 정상적으로 처리가 되는건 확인했는데 rabbitmq에서 큐를 확인해보면 busrefresh를 요청한 1번 큐에는 메시지가 없고 2번, 3번 서버에서는 큐 메시지가 들어오는데.. 1번에서는 busrefresh 요청을 받기 때문에 큐 메시지 없이 처리가 가능하기 때문에 큐에서 제외되는건가요? 제가 확인한 내용이 맞다면 rabbmit exchange에서 topic으로 패턴 매칭되서 모든 큐에 메시지를 넣을 거 같은데..어떻게 자신의 큐만 제외시키는지 궁금합니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
jhlim 댓글 2 좋아요 0 조회수 653

브로커에 연결이 안됩니다

미해결

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

원영님 강의를 보고 현재 스프링 프레임워크 기반의 회사 솔루션에 카프카 도입을 구현하고 있습니다. 터미널 상에서 컨슈머와 프로듀서는 잘 주고 받는데 IDE로 넘어와 적용하면 에러가 발생합니다 브로커의 로그를 확인해보니 Processing automatic preferred replica leader election (kafka.controller.KafkaController) Checking need to trigger auto leader balancing (kafka.controller.KafkaController) Topics not in preferred replica for broker 0 Map() (kafka.controller.KafkaController) 이런 로그들이 찍히는데 구글링해도 이렇다 할 해결방법을 못찾고 있습니다 컨슈머 프로퍼티에 부트스트랩 서버도 localhost:9092 프로듀서 프로퍼티의 부트스트랩 서버도 동일하며 서버 프로퍼티의 애드버타이즈드 리스너도 localhost :9092로 설정해뒀습니다 혹시 제가 빠뜨린 부분이 있을까요? 도움 주시면 감사하겠습니다..

  • kafka
emlookstudy 댓글 2 좋아요 0 조회수 821

강사님 Schema에 대해 궁금점이 있습니다.

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

좋은 강의 감사드립니다. 덕분에 많은 걸 배워서 마음이 든든해 집니다. 그런데, 하나 궁금한 점이 있어서 여쭤보고 싶습니다. 우리 개발자들은 사실 귀찮은 걸 싫어하기 때문에 기술이 나날이 발전해 가는 것이라 생각이 되는데요, 강사님이 설명주신 부분처럼 Schema나 Payload를 계속해서 수동으로 만드는 것은 개발자 입장에서는 매우 비효율적일거라 생각이 됩니다. 따라서, 이미 저 부분을 해결하기 위한 많은 부분들이 고려되었을 것으로 예상이 되는데요, 혹시 저 부분을 편하게 등록할 수 있는 다른 방법이 있을까요? 키워드라도 주시면 찾아서 공부해 나가는데 큰 도움이 될 것 같습니다. 감사합니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
밤의멜로디 댓글 1 좋아요 0 조회수 513

RocksDB에서 StateStore로 읽어온 값은 메모리 상태에 저장될까요?

미해결

카프카 완벽 가이드 - ksqlDB

안녕하세요, 철민님. 항상 좋은 강의 감사드립니다! 한 가지 질문 드리고 싶은 것이 있어 글을 작성합니다. 혹시 RocksDB에서 StateStore로 읽어온 데이터는 어디에 저장이 되어 있을까요? RocksDB는 로컬에 Key / Value 형식으로 데이터를 가지는 것으로 이해를 했는데, StateStore로 읽어오면 그 값은 메모리에 있을까요? StateStore의 구현체가 RocksDB도 있고, In-Memory 같은 형태도 존재하고 있는데, 이렇게 구현체가 따로 있는 것으로 추정컨데 RocksDB를 이용한 StateStore는 값을 읽어와서 메모리에 따로 저장하지 않고, 필요할 때 마다 로컬 디스크에 있는 값을 바로바로 불러오는게 아닐까 싶은데... 어떤 형식으로 동작하는 것일까요...?

  • kafka
  • 데이터-엔지니어링
  • ksqldb
코린코린 댓글 3 좋아요 1 조회수 797

오라클 Virtualbox 설치 후 서버 실행시 오류입니다.

미해결

15일간의 빅데이터 파일럿 프로젝트

VM Name: Server01 Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter' (VERR_INTNET_FLT_IF_NOT_FOUND). Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND). Result Code: E_FAIL (0X80004005) Component: ConsoleWrap Interface: IConsole {6ac83d89-6ee7-4e33-8ae6-b257b2e81be8} 이런 오류가 뜨는데 어떻게 해결하면 좋을까요?? 구글링 해보니 host-only-ethernet을 새로만들고 다시 해보라고 하던데 그 방법도 되지 않습니다. Virtualbox 버전은 7.0.8 최신버전입니다.

  • 빅데이터
  • hadoop
  • kafka
  • zookeeper
  • redis
  • flume
  • impala
  • 데이터-엔지니어링
댓글 2 좋아요 0 조회수 1285

안녕 하세요

미해결

카프카 완벽 가이드 - 커넥트(Connect) 편

안녕 하세요 궁금한 사항이 있어서 문의드립니다. Debezium CDC source connector 강의 내용중 redo 로그에 commit되지 않은 데이터도 쓰여진다고 말씀해주셨는데요 저보다 당연히 잘 아시겠지만 제가 알기로는 commit하면 버퍼에 쌓이고 디스크에는 반영되지 않고 그 이후에 주기적으로 redo log에 쌓이는 것으로 알고 있습니다 즉 commit이 되어야 redo log에 쌓이는 걸로 알고 있는데 제가 잘못알고 있는걸까요? 감사합니다.

  • kafka
  • 데이터-엔지니어링
하하호호 댓글 3 좋아요 0 조회수 540

카프카 이해

미해결

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

제가 카프카에 대한 구조와 사용법을 이해하지 못해서 학습 재미가 떨어지는데요. 카프카를 이렇게 써야 하는지를 맞는지가 궁금합니다. 많은 영상을 봤지만서도 사용법이 잘 이해가 안되서 질문드립니다

  • kafka
  • 데이터-엔지니어링
나두코딩 댓글 1 좋아요 0 조회수 703

bootstrap.yml 파일의 "encrypt.key-store.password" 암호화

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

spring config를 적용하면 설정 값들에 암호화를 수행하여 "{cipher}..." 구문으로 적용할 수 있는데, bootstrap.yml 파일의 "encrypt.key-store.password", "encrypt.key-store.secret" 항목의 값은 암호화를 어떻게 할 수 있는지 방법 부탁드립니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
run2nextstep 댓글 1 좋아요 0 조회수 947

JWT Token SigningKey 관련 질문

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요. 강의를 수강하던 중 이해하기 힘든 현상을 발견되어 이렇게 질문드립니다. Jwt는 SigningKey로 복호화가 가능하다면, 유효한 토큰이다.(유효한 토큰이다란 기준이 여러 개 있습니다만) 라고 알고 있는데요. 아래와 같은 현상을 발견하게되서 질문하게 되었습니다. (현재 Gateway server - token.secret = A) (현재 User service - token.secret = A) 1.User-service 회원생성 2.User-service 로그인 (응답에서 jwt토큰 복사) 로그인 시 User-service의 token.secret을 SigningKey로 jwt 토큰 발급 3.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200) 여기까지는 정상입니다만 4.ecommerce.yml의 token.secret 변경 및 커밋 5.Gateway의 /refresh 호출 액츄에이터에 의한 token.secret 변경 (현재 Gateway server - token.secret = B) (현재 User service - token.secret = A) (현재 JWT 토큰의 SigningKey = A) 6.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 ( response, 200 ) 여기가 질문 포인트입니다. AuthorizationHeaderFilter의 isJwtValid의 코드를 보면 subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 이런 구문이 있습니다. Jwt 생성 당시의 Siginingkey랑 다른 signingkey로 복호화하면 오류가 나면서 인가에 실패하는 것을 기대했습니다. 하지만 왜 정상적으로 200을 반환하는지 이해가 잘 되지 않습니다. (Gateway의 token.secret은 B로 변경됨을 로그로 확인했습니다. )

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
최학준 댓글 2 좋아요 0 조회수 1351

MSA 각 서비스 분리시에, 공유되는 클래스는 어떻게?

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요. 강의에서 , UserService 와 OrderService 가 서비스로 분리되어 있는 상태에서 UserService 에서 OrderService API 호출해서 데이터를 가져올때, ResponseOrder 클래스를 UserService 프로젝트안에 만드셨던데, 실제 현업에서는 ResponseOrder 를 UserService 와 OrderService 에 중복으로 클래스를 생성하지는 않을 거 같은데요. 서로 다른 프로젝트(UserService 와 OrderService) 에서 공유되는 클래스는 어떻게 관리를 해야하나요.. 프로젝트에 각각 중복해서 클래스를 만들어서 사용하나요?

  • spring-boot
  • jpa
  • Kafka
  • msa
  • 아키텍처
  • spring-cloud
  • architecture
  • kafka
  • JPA
  • spring-boot
tyjuniorleo 댓글 1 좋아요 1 조회수 580

카프카 sink connector 사용시 에러

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요. 카프카 관련 수업 듣는 중 오류가 발생하여 질문 드립니다. org.apache.kafka.connect.errors.ConnectException: Tolerance exceeded in error handler\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:206)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:132)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertAndTransformRecord(WorkerSinkTask.java:501)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:478)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:328)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:201)\n\tat org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185)\n\tat org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:234)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\nCaused by: org.apache.kafka.connect.errors.DataException: Converting byte[] to Kafka Connect data failed due to serialization error: \n\tat org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:366)\n\tat org.apache.kafka.connect.storage.Converter.toConnectData(Converter.java:87)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertValue(WorkerSinkTask.java:545)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.lambda$convertAndTransformRecord$1(WorkerSinkTask.java:501)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:156)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:190)\n\t... 13 more\nCaused by: org.apache.kafka.common.errors.SerializationException: com.fasterxml.jackson.core.JsonParseException: Unexpected character (':' (code 58)): was expecting comma to separate Object entries\n at [Source: (byte[])\"{\"schema\":{\"type\":\"struct\",\"fields\":[{\"type\":\"int32\",\"optional\":false,\"field\":\"id\"},{\"type\":\"string\",\"optional\":true,\"field\":\"user_id\"},{\"type\":\"string\",\"optional\":true,\"field\":\"pwd\"},{\"type\":\"string\",\"optional\":true,\"field\":\"name\"},{\"type\":\"int64\",\"optional\":true,\"name\":\"org.apache.kafka.connect.data.Timestamp\",\"version\":1,\"field\":\"created_at\"}],\"optional\":false,\"name\":\"users\"},\"payload\":{\"id”:4,”user_id\":\"user4”,”pwd\":\"1234\",\"name\":\"username4”,”created_at\":1671277849000}}\"; line: 1, column: 433]\nCaused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (':' (code 58)): was expecting comma to separate Object entries\n at [Source: (byte[])\"{\"schema\":{\"type\":\"struct\",\"fields\":[{\"type\":\"int32\",\"optional\":false,\"field\":\"id\"},{\"type\":\"string\",\"optional\":true,\"field\":\"user_id\"},{\"type\":\"string\",\"optional\":true,\"field\":\"pwd\"},{\"type\":\"string\",\"optional\":true,\"field\":\"name\"},{\"type\":\"int64\",\"optional\":true,\"name\":\"org.apache.kafka.connect.data.Timestamp\",\"version\":1,\"field\":\"created_at\"}],\"optional\":false,\"name\":\"users\"},\"payload\":{\"id”:4,”user_id\":\"user4”,”pwd\":\"1234\",\"name\":\"username4”,”created_at\":1671277849000}}\"; line: 1, column: 433]\n\tat com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840)\n\tat com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:712)\n\tat com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:637)\n\tat com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextFieldName(UTF8StreamJsonParser.java:1011)\n\tat com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:250)\n\tat com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:258)\n\tat com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:68)\n\tat com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15)\n\tat com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4270)\n\tat com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2734)\n\tat org.apache.kafka.connect.json.JsonDeserializer.deserialize(JsonDeserializer.java:64)\n\tat org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:364)\n\tat org.apache.kafka.connect.storage.Converter.toConnectData(Converter.java:87)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertValue(WorkerSinkTask.java:545)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.lambda$convertAndTransformRecord$1(WorkerSinkTask.java:501)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:156)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:190)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:132)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertAndTransformRecord(WorkerSinkTask.java:501)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:478)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:328)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:201)\n\tat org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185)\n\tat org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:234)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\n 발생 에러는 다음과 같은데, 터미널에서 직접 produce 하는 도중 발생하였는데 payload 의 데이터가 잘못 전송 되어서 해당 오류가 발생 한 것 같아서 기존 users 테이블에 다시 insert 하는 방식으로 다시 사용했을 때 이전에 실패한 task 가 남아있어서 여전히 my_topic_users 테이블에 insert 되지 않았습니다. 중간에 발생한 task 는 삭제하거나 임의로 건너 뛰거나 할 수 없는 것인가요?

  • kafka
  • JPA
  • spring-boot
  • architecture
  • spring-cloud
  • Kafka
  • msa
뉴비 댓글 0 좋아요 0 조회수 675

윈도우에서 카프카 토픽 삭제 시, 카프카가 실행이 안됩니다..

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

https://www.inflearn.com/questions/644825 제가 예전에 올린 글입니다. 질문한 글에 댓글을 또 달았었는데 도저히 해결을 할 수 가 없어서 다시 질문올립니다. 제가 윈도우 환경에서 카프카 토픽을 삭제 했는데 그 뒤로 답글로 제시해주신 해결책을 해보려고 해도 해볼 수가 없었습니다.. 즉, C:\Temp 디렉토리 하위에 zookeeper, kafka 폴더가 전혀없고 저의 C:\Temp 아래는 폴더 구조는 다음과 같습니다.. 2020(폴더) HncDownload(폴더) Service.log AUtempR(폴더 - 안에 아무것도 없음) 그리고 기존 에 사용하고 있던 Kafka환경 폴더(강의에서 제공해주신 폴더)를 삭제하고 다시 압축을 풀어서 압축을 푼 경로에 zookeeper와 kafka를 실행해도 zookeeper는 실행되고 kafka는 실행되지 않습니다... 즉, 동일한 에러가 발생하네요.. 대체 어떤 걸 지워야지 다시 kafka서버가 정상 실행될까요? 참고로 자료 올려주신 윈도우용 카프카 파일 전부 삭제하고 다시 압축 풀고 설정해도 토픽목록은 동일한 에러로 안보이고, 카프카 역시 동일한 에러로 켜지지 않습니다.. 감사합니다.

  • 카프카
  • Kafka
  • kafka
  • msa
  • spring-boot
  • JPA
  • architecture
  • spring-cloud
리자몽 댓글 2 좋아요 0 조회수 925

인기 태그

인프런 TOP Writers

주간 인기글