LabHub
배우기 러닝패스 코스

주문이 두 번 도착했고 한 번은 사라졌다 · 한 번 사라짐 · 퀴즈

퀴즈: 컨슈머와 커밋 시점

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. 컨슈머가 읽고 → 위치를 저장하고 → 처리하는 순서일 때, 처리 중 죽으면 어떤 의미론인가?

    1. at-most-once — 저장 뒤 처리 전에 죽은 메시지는 다시 오지 않는다
    2. at-least-once — 넘겨받은 프로세스가 같은 메시지를 다시 받는다
    3. exactly-once — 위치가 먼저 저장돼 중복도 유실도 없다
    4. 순서에 따라 달라지지 않는다 — 의미론은 acks 설정이 정한다
  2. 콘솔 컨슈머가 `--max-messages 3` 으로 세 건을 넘기고 끝났는데 파이프 뒤의 처리기가 두 번째에서 죽었다. 그룹의 다음 읽기 위치는?

    1. 1 — 마지막으로 처리된 메시지 다음부터
    2. 3 — 읽은 만큼 커밋됐으므로 두 건은 이 그룹에서 다시 오지 않는다
    3. 0 — 처리기 실패가 감지되어 커밋이 취소된다
    4. 2 — 죽은 메시지부터 다시 읽는다
  3. `--reset-offsets` 로 그룹을 되감을 때 운영 문서가 요구하는 조건과 옵션은?

    1. 프로듀서를 멈추고 `--dry-run` 을 붙여야 실제로 바뀐다
    2. 브로커를 재시작한 뒤 `--force` 를 붙인다
    3. 컨슈머 인스턴스가 멈춰 있어야 하고 `--execute` 를 붙여야 실제로 바뀐다
    4. 토픽을 삭제한 뒤 다시 만들면 자동으로 되감긴다
  4. 새 그룹을 아무 설정 없이 붙였더니 옛 메시지를 하나도 읽지 않았다. 원인은?

    1. 새 그룹은 항상 다른 그룹이 마지막으로 읽은 위치를 이어받는다
    2. auto.offset.reset 의 기본값이 latest 라 커밋된 오프셋이 없으면 가장 뒤에서 시작한다
    3. 브로커가 새 그룹에 이전 데이터 읽기를 허용하지 않는다
    4. enable.auto.commit 이 true 라 시작 시점의 오프셋을 먼저 커밋한다
  5. 되감기 뒤 재처리에서 이미 처리한 주문이 또 왔다. 이 글이 권하는 대응은?

    1. 커밋을 처리 앞으로 옮겨 다시는 같은 메시지가 오지 않게 한다
    2. 되감기를 하지 않고 사라진 주문은 수동으로 입력한다
    3. auto.commit.interval.ms 를 줄여 중복 창을 좁힌다
    4. 처리한 주문 번호를 결과와 같은 곳에 남겨 이미 있으면 건너뛰는 멱등 처리기를 만든다
  6. 일주일 넘게 멈췄던 배치 컨슈머가 돌아와 그 사이 데이터를 전부 건너뛰었다. 관련된 두 설정은?

    1. retention.ms 와 segment.ms — 세그먼트가 굴러가 데이터가 지워졌다
    2. offsets.retention.minutes(기본 7일)로 커밋이 버려진 뒤 auto.offset.reset=latest 가 적용됐다
    3. max.poll.interval.ms 와 session.timeout.ms — 그룹에서 제외되어 파티션을 잃었다
    4. enable.auto.commit 과 acks — 자동 커밋이 꺼져 위치가 저장되지 않았다