• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

카프카 스트림즈 애플리케이션이 죽는 경우가 발생하는지

24.07.04 16:10 작성 24.07.05 10:49 수정 조회수 72

0

안녕하세요 데브원영님!

현재 카프카를 적용한 프로젝트 개발 중에 있습니다.

카프카 스트림즈(DSL)를 자바 애플리케이션안에 자바 모듈로 구현을 한 상태입니다.

 

현재 카프카 브로커로 들어오는 데이터는 초당 50건~200건 가량이며 한 건 당 2000byte 정도 데이터를 받고 있습니다. 현재는 모든 데이터를 한 토픽에서 받고, 그 모든 데이터가 담긴 토픽을 목적별로(차, 청소 등..) 만든 토픽에 필터링 하고 있습니다. 필터링하는 로직이 복잡하지는 않습니다. (코드상 10줄 미만)

 

그런데 이런 상황에서 운영 중에 만약에 ,

카프카 스트림즈가 부하가 많아질 경우나 네트워크 등 다른 이슈로 스트림즈 애플리케이션이 죽지는 않을까 하는 걱정이 있습니다.

 

질문입니다.

  1. 혹시 이렇게 자바 코드로 작성한 스트림즈 애플리케이션이 죽는 상황이 있나요? (부하 또는 기타 문제로...)

  2. 있을 경우 대비를 한다면 스트림즈 애플리케이션을 자바 코드가 아닌 따로 프로젝트를 만들어(WAS를 따로 생성) 운영을 해야할까요?

  3. 스트림즈 애플리케이션이 죽는 경우는 어느정도의 부하(초당 몇 바이트정도인지.. 보통..)가 있어야 죽는 경우가 발생하나요? (CPU성능, 메모리 등 PC스펙이 충분하다고 할 경우에요..)

  4. 만약 WAS를 따로 만들어서 운영해야 한다면, WAS를 보통 여러 개 정도 두나요? 아니면

    WAS를 1개만 만들고 WAS 내 스트림즈 스레드를 여러 개로 만들어서 운영하나요? 아니면 여러개 WAS에 여러개 스레드를 띄우나요?

  5. WAS를 여러개 두는 경우, 1개 WAS가 죽으면 자동으로 fail over 가 되나요? 안된다면 어떻게 fail over가 되도록 구현해야 하나요?

 

미리 감사합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.07.06

안녕하세요, 인프런 AI 인턴입니다.

데브원영님의 질문에 대해 답변드립니다.

  1. 카프카 스트림즈 애플리케이션은 과부하나 네트워크 문제 등 외부 요인으로 인해 충돌하거나 죽을 수 있습니다. 정확히는, 애플리케이션 로직이나 자바 가상 머신(JVM)의 메모리 한계, 스레드 관리 문제 등 다양한 이유로 실패할 수 있습니다.

  2. 대비책으로, 애플리케이션의 복원력을 높이기 위해 여러 인스턴스로 분산 처리를 구현하는 것이 좋습니다. 카프카 스트림즈는 병렬 처리와 스케일 아웃을 위한 내장 기능을 제공하여, 각 인스턴스가 동일한 애플리케이션을 실행하면 카프카가 자동으로 로드 밸런싱을 합니다.

  3. 스트림즈 애플리케이션이 실패하는 구체적인 부하 수준은 애플리케이션의 구현, 실행 환경, 사용하는 하드웨어의 성능에 따라 달라집니다. 일반적으로, 메모리 누수나 스레드 관리 미흡 등 애플리케이션 내의 문제가 아닌 이상, 대용량 처리가 가능하도록 설계되었습니다.

  4. WAS의 수는 애플리케이션의 요구 사항과 인프라 용량에 따라 결정됩니다. 카프카 스트림즈의 경우 WAS가 아니라 별도의 스트림즈 애플리케이션 인스턴스로 분산 처리할 것을 권장합니다. 필요에 따라 여러 인스턴스에서 스트림즈 애플리케이션을 실행하여 로드 밸런싱과 리밸런싱을 통해 처리량을 관리할 수 있습니다.

  5. 카프카 스트림즈 애플리케이션이 다수의 인스턴스로 구성되어 있다면, 카프카 클러스터는 자체적으로 한 인스턴스의 실패를 감지하고 해당 작업을 다른 인스턴스로 자동 재할당하여 failover 처리를 수행합니다. 이를 위해 카프카 스트림즈 애플리케이션을 설계할 때는 상태 저장, 체크포인팅 등의 기능을 효과적으로 활용하여 복원력을 확보해야 합니다.

답변이 도움이 되었기를 바랍니다. 추가 질문이 있으시면 언제든지 문의해주세요.

채널톡 아이콘