작성
·
288
0
안녕하세요, 먼저 좋은 강의 잘 듣고 있습니다 (- -) (_ _)
컨슈머 랙 모니터링 - 처리량 이슈 파트에서 궁금한 점이 생겨서 질문드립니다.
파티션 1개 - 컨슈머 1개에서
파티션 2개 - 컨슈머 2개가 되면 linear하게 처리량이 늘어난다고 하셨는데, 어떻게 처리량이 늘어나는 건지 조금 이해가 안가서요.
상단과 같은 구조는 하나의 컨슈머가 0,1,2,3... 이렇게 하나씩 처리를 한다고 하면, 하단과 같은 구조는 다음과 같이 레코드를 동시에 소비하게 되어 2배로 늘어난다는 말씀일까요?
컨슈머 1 - 0 : 2 : 4 : 6 : ...
컨슈머 2 - 1 : 3 : 5 : 7 : ...
( : 는 레코드가 소비되는 시점을 구분한 것 입니다!)
만약 그렇다면, offset은 어떻게 관리가 되는건지도 궁금하네요..
답변 2
1
안녕하세요
컨슈머의 데이터 처리량이 초당 10개라고 한다면 1개 파티션에는 최대 1개의 컨슈머가 붙기 때문에 전체 파이프라인에서 처리량은 초당 10개로 제한됩니다. 반면, 2개 파티션에 컨슈머가 2개 붙게 되면 초당 20개의 데이터가 처리될 수 있기 때문에 데이터 처리량이 컨슈머 1개에 비해 2배로 늘게 된다고 볼 수 있습니다. 쉽게 생각하여 데이터를 처리하는 컨베이어 벨트가 두개로 늘어난다고 생각하시면 좋겠습니다.
그리고 오프셋 관리는 파티션별로 개별로 기록되는 레코드의 오프셋을 기준으로 기록이 되는점 참고부탁드립니다.
0
안녕하세요, 인프런 AI 인턴입니다.
뽀또공장1님께서 질문하신 컨슈머 랙과 처리량에 대해 답변 드리겠습니다.
말씀하신대로 파티션과 컨슈머의 비율이 1:1이 되면, 각 컨슈머는 자신에게 할당된 파티션의 레코드들을 독립적으로 소비하게 됩니다. 이 경우, 컨슈머가 늘어남으로써 전체적인 처리량이 선형적으로 증가하는 경우가 많습니다. 예를 들어, 한 컨슈머가 파티션 하나를 소비할 때 처리할 수 있는 레코드의 수가 100개라면, 컨슈머가 두 개가 되고 각각 다른 파티션 하나씩을 소비한다면 총 200개의 레코드를 처리할 수 있습니다.
컨슈머1이 파티션0의 레코드 0, 2, 4, 6…을 소비하고, 컨슈머2가 파티션1의 레코드 1, 3, 5, 7…을 소비하는 경우가 바로 뽀또공장1님이 설명한 상황입니다. 컨슈머가 레코드를 차례대로 소비하기 때문에 각 컨슈머는 자신이 처리한 마지막 레코드의 오프셋을 기억하고 있습니다. 컨슈머 그룹 내에 이 오프셋 정보는 Kafka 클러스터에 컨슈머 오프셋으로 기록되어, 컨슈머 장애 발생 시 다른 컨슈머가 이어받아 처리할 수 있습니다.
물론, 처리량이 항상 선형적으로 늘어나는 것은 아닙니다. 네트워크 지연, 컨슈머 자원 한계, 파티션별 레코드 분포 불균형 등 다양한 요인으로 인해 실제 처리량은 다를 수 있습니다.
오프셋 관리와 관련하여 컨슈머는 처리한 레코드의 오프셋을 주기적으로 커밋(commit)합니다. 이로써 실패 시 이어서 처리할 수 있는 지점을 확인할 수 있으며, 이는 Kafka 시스템에 의해 안정적으로 관리됩니다.
위 사항에 대해서 더 자세한 내용은 Kafka 공식 문서에서 “6. Operations > 6.1 Basic Kafka Operations > Checking consumer position” 에서 확인하실 수 있습니다.