본문 바로가기

BackEnd39

@Transactional, Connection Pool deadlock 최근에 회사에서 푸시 시스템 관련 일을 하던 중에, RDS의 connection pool이 모자란 현상이 발생했습니다. kafka를 이용하는 시스템에서 prodcuer 2대 consumer 2대를 이용하니, 3대까지 연결은 되는데 마지막 한 대가 연결이 안되는 에러가 발생했습니다. 이는 rds의 connection pool을 넘어서 그렇습니다. 그래서 producer의 connection pool을 4개로 줄여서 해결했습니다. 진짜로 해결이 된 것일까요? 사실 connection pool을 감소시킨 producer보다는 consumer부분이 더 신경쓰였습니다. 왜냐하면 consumer가 batch 단위로 데이터를 받아오고 각각의 데이터 검사를 위해 thread를 이용합니다. 즉, batch 크기 만큼 t.. 2023. 2. 17.
[Kafka] partition, consumer, producer 관계 (2) 이번에는 두 대의 서버와 local kafka를 이용하여 실험해 본다. kafka는 docker를 이용하여 실행한다. producer @Async //항상 1 전송 public void prodcue1(String mm){ kafkaTemplate.send("fcm",Integer.toString(new Random().nextInt()), mm); System.out.println(String.format("pro %s %s", mm, Thread.currentThread().getId())); } @Async //항상 2 전송 public void produce2(String mm){ kafkaTemplate.send("fcm", Integer.toString(new Random().nextInt().. 2023. 2. 8.
[Kafka] partition, consumer, producer 관계 (1) parition, consumer, producer 가 정확히 어떻게 작동하는 지 궁금하여 테스트를 해보게 되었다. Spring test와 @EmbeddedKafka를 이용하여 테스트 했다. 이는 producer이다. key는 random으로 아무런 값이나 보내게 된다. @Async //항상 1 전송 public void prodcue1(String mm){ kafkaTemplate.send("fcm",Integer.toString(new Random().nextInt()), mm); System.out.println(String.format("pro %s %s", mm, Thread.currentThread().getId())); } @Async //항상 2 전송 public void produce2(.. 2023. 2. 8.