LabHub
배우기 러닝패스 코스

주문이 두 번 도착했고 한 번은 사라졌다 · Kafka 가 약속하는 것 · 실습

키가 같으면 같은 파티션 — 로그를 손으로 만져 본다

LabHub 에서 이어서 보기

이 실습은 VM 에서 돕니다

우분투 VM 에 Apache Kafka 4.3.1 이 KRaft 단일 노드로 떠 있습니다(systemd
kafka 서비스, localhost:9092). /opt/kafka/bin 이 PATH 에 있어 kafka-topics.sh
같은 도구를 바로 쓸 수 있습니다. 처음 뜨는 데 4분쯤 걸립니다.

목표

토픽을 만들고 키가 있는 이벤트를 넣어, 같은 키가 같은 파티션으로 가고 파티션
안에서 순서가 지켜지는 것을 봅니다. 컨슈머 그룹의 오프셋과 지연(lag)을 읽고, 두
그룹이 서로 독립적으로 읽는 것을 확인한 뒤, 파티션 수를 늘리면 키 배치가
바뀌는 것을 직접 관찰합니다.

왜 중요한가

"주문이 두 번 도착했고 한 번은 사라졌다" 는 사고를 읽으려면 먼저 Kafka 가
무엇을 약속하고 무엇을 약속하지 않는지 알아야 합니다. Kafka 는 **파티션 안의
순서**만 약속합니다. 같은 키가 같은 파티션으로 가기 때문에 주문 하나의 이벤트
순서는 지켜지지만, 다른 주문끼리는 아닙니다. 그리고 소비된 메시지는 지워지지
않습니다 — 컨슈머 그룹마다 "어디까지 읽었나" 하는 정수 하나(오프셋)를 따로
갖기 때문에, 한 그룹이 놓친 것을 다른 그룹은 처음부터 다시 읽을 수 있습니다.
이 두 가지가 뒤 모듈의 중복·유실 이야기의 바탕입니다.

단계

1. 토픽 orders파티션 3개로 만드세요.
2. /root/kafka/orders.txt 의 아홉 줄(키:값 형식)을 kafka-console-producer.sh키를 파싱해서 넣으세요. 여러 파티션에 나뉘어 들어가야 합니다.
3. 파티션·오프셋·키가 보이게 처음부터 전부 읽어 /root/kafka/keyed.txt 에 저장하세요. 같은 키는 한 파티션에만 있어야 합니다.
4. 컨슈머 그룹 order-svc 로 처음부터 아홉 건을 읽고, 그 그룹을 describe 한 결과를 /root/kafka/group.txt 에 저장하세요.
5. /root/kafka/more.txt 의 세 줄을 더 넣고(읽지는 말고) order-svc 를 다시 describe 해 /root/kafka/lag.txt 에 저장하세요. LAG 이 보여야 합니다.
6. 두 번째 그룹 analytics 로 처음부터 열두 건을 읽으세요. order-svc 의 오프셋은 그대로여야 합니다.
7. orders파티션 6개로 늘리고 order-1:refunded 를 넣은 뒤 처음부터 읽어 /root/kafka/repartition.txt 에 저장하세요. 그리고 /root/kafka/repartition-report.txtpartitions_before=3, partitions_after=6, order1_before=<3단계에서 order-1 이 있던 파티션>, order1_after=<refunded 가 들어간 파티션> 네 줄을 쓰세요.

참고

단계 7개

  1. 파티션 3개짜리 토픽
  2. 키가 있는 이벤트를 넣는다
  3. 파티션과 오프셋을 눈으로 본다
  4. 컨슈머 그룹의 오프셋
  5. 읽지 않으면 지연이 쌓인다
  6. 그룹은 서로 독립이다
  7. 파티션을 늘리면 키 배치가 바뀐다