작성
·
183
·
수정됨
0
카프카 인강을 듣고 처음 적용하려고 하고 있는데요.
혹시 프로듀서에서 컨슈머로 데이터를 받고, API 통신을 4회 정도 하여 DB에 넣는다고 하면, 적정하지 않은 컨슈머 렉으로 진행되는 부분이 있지 않을까 고민이 되어서요.
비동기 방식으로 진행하고 큐에 데이터를 쌓고 진행하려고 하는데, 큐에 데이터가 많이 쌓인다면 메모리 이슈로도 진행될 것 같아서요.
요점은
프로듀서에서 컨슈머로 데이터가 들어오면 비동기 방식으로 큐에 쌓은다.
큐에 쌓은 데이터를 API 통신으로 데이터를 가공한 후 DB에 넣어준다.
이렇게 되면 카프카에서 컨슈머로 렉이 발생되지는 않겠지만 큐에 데이터가 쌓이면서 메모리 문제가 되지 않을까 고민이 있습니다.
답변 2
0
안녕하세요.
컨슈머가 토픽에서 데이터를 받은 이후에 일정 처리과정 이후 DB에 쌓는 것을 문의주셨는데요. 기본적으로 프로듀서 -> 토픽 -> 컨슈머
로 파이프라인을 운영한다는 뜻은 비동기적인 처리를 지원한다는 뜻입니다. 그렇기 때문에 데이터의 양에 따라 컨슈머랙은 자연스럽게 늘어날 수 있으며 이는 비정상적인 상황이 아닙니다. 그러므로 비동기적 이벤트 처리를 원치 않으시고 즉각적인 데이터 처리를 원하신다면 프로듀서 -> 토픽 -> 컨슈머
와 같은 통신방식은 적합하지 않다고 볼 수 있습니다.
참고로, 컨슈머가 내부 큐를 가지는 것은 일반적인 컨슈머 애플리케이션 개발에 자주 쓰이는 방법은 아닙니다. 결국 데이터양이 많아지면 컨슈머 내부적으로 지연이 발생하기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다.
코비님의 카프카 관련 질문에 대해 답변 드리겠습니다.
프로듀서로부터 다수의 메시지를 받아 API 통신을 통한 데이터 처리 후 DB에 저장하는 로직을 설계할 때, 컨슈머의 렉(Lag)과 시스템의 메모리 관리는 중요한 고려사항입니다.
카프카 컨슈머는 데이터를 비동기 방식으로 큐에 쌓아두고, 처리능력에 맞추어 순차적으로 API 통신을 하고 결과를 DB에 저장하는 구조를 가질 수 있습니다. 비동기 처리를 위한 큐잉 시스템을 활용하는 것은 일반적인 방법입니다.
메모리 이슈를 최소화하기 위해서는 큐에 쌓이는 데이터의 양을 조절하고 적당한 크기로 관리할 필요가 있습니다. 이를 위해 큐의 최대 길이를 설정하거나, 메시지 처리 후 메모리를 적절히 해제하는 방식으로 구현할 수 있습니다.
카프카 스트림즈(Kafka Streams)는 이러한 용도에 적합한 도구로, 데이터를 스트리밍 처리하면서 상태 관리와 같은 복잡한 작업을 단순화시켜 줍니다. 스트림즈는 이벤트 시간과 처리 시간을 구분하고, 윈도우 지원, 정확한 한 번 처리(exactly-once) 의미론 등을 제공합니다.
큐에 데이터가 많이 쌓여 메모리 이슈가 발생하지 않도록 하려면, 컨슈머의 처리량을 모니터링하고, 적절한 스케일링을 통해 시스템 자원을 관리하는 것이 중요합니다.
카프카 스트림즈에 대한 더 자세한 정보는 아래 링크를 참조하시면 도움이 될 것입니다.
도움이 필요하시면 언제든지 질문해 주세요.