본문 바로가기
[AWS]/Kafka

[Kafka 클러스터 환경 구축] 9강. partition과 Message 순서

by METAVERSE STORY 2022. 11. 23.
반응형
728x170

 

 

이번에는 Kafka 에 Topic을 생성하면서 Partition에 데이터가 어떻게 저장 되고 Partition을 여러개 지정 하였을 때, 왜 데이터 순서를 보장 받을 수 없는지 확인 하였습니다. 
그리고 데이터 순서를 보장하고싶을 경우에는 어떻게 설정 해야하는지도 알아보았습니다.

 

 

 

## Kafka Topic 생성

 

 

 

## Kafka Producer 에 Message 생성

 

 

 

## Kafka Consumer 에 Message 소비  (기대했던 것과 달리 순서대로 출력 되지 않습니다.)

 

 

 

 

 

## 첫 번째, Partition Consumer 확인
: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 첫 번째 파티션에 저장된 데이터를 확인할 수 있다.

 

 

 

## 두 번째, Partition Consumer 확인
: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 두 번째 파티션에 저장된 데이터를 확인할 수 있다.

 

 

 

## 세 번째, Partition Consumer 확인
: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 세 번째 파티션에 저장된 데이터를 확인할 수 있다.

 

 

 

 

 

 

 

 

===============================================================

 

 

 

  • Kafka Topic 생성
# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-topics.sh --create \\
--bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 \\
--partitions 3 \\
--replication-factor 1 \\
--topic testpartion
  • Kafka Producer 에 Message 생성
# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-producer.sh \\
--broker-list kafka01:9092,kafka:9092,kafka:9092 \\
--topic testpartion

> a
> b
> c
> d
> e
> f
  • Kafka Consumer 에 Message 소비

: 기대했던 것과 달리 a, b, c, d, e, f 순서대로 출력 되지 않습니다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic testpartion \\
--from-beginning

> a
> d
> b
> e
> c
> f
  • Kafka Producer 에 Message 생성
# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-producer.sh \\
--broker-list kafka01:9092,kafka:9092,kafka:9092 \\
--topic testpartion

> 1
> 2
> 3
> 4
> 5
> 6
  • Kafka Consumer 에 Message 소비

: 역시 기대했던 것과 달리 데이터가 순서대로 출력 되지 않습니다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic testpartion \\
--from-beginning

> a
> d
> 1
> 4
> b
> e
> 2
> 5
> c
> f
> 3
> 6
  • 첫 번째, Partition Consumer 확인

: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 첫 번째 파티션에 저장된 데이터를 확인할 수 있다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic testpartion \\
--partition 0 \\
--from-beginning
  • 두 번째, Partition Consumer 확인

: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 두 번째 파티션에 저장된 데이터를 확인할 수 있다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic partition-test \\
--partition 1 \\
--from-beginning
  • 세 번째, Partition Consumer 확인

: topic(partition-test)을 3개의 파티션에 나눠 저장하였는데, 그 중 세 번째 파티션에 저장된 데이터를 확인할 수 있다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic partition-test \\
--partition 2 \\
--from-beginning
  • Partitions 개념

: Kafka Producer에서 들어오는 메시지는 파티션 0~2번에 랜덤으로 저장이 된다. 지금 같은 경우 가장 먼저 입력된 “a” 이벤트는 파티션 1번에 저장 되었고, 두 번째로 입력된 “b” 이벤트는 파이션 0번에 저장 되었다. 이것과 같은 원리로 Consumer에서 파티션을 읽어갈 때에도 파티션 0~2번 중에 순서를 알 수 없이 접근하여 데이터를 읽어가기 때문에 최초 데이터 삽입 순서를 보장 받을 수 없다.

  • 반드시 순서를 보장 해야할 때

: 위에 설명된 Partitions 개념이 기본이기 때문에, 반드시 순서를 보장 받아야하는 Topic 일 경우 Partion 값을 1로 지정하여 하나의 Partion에서만 데이터를 보관/처리 하면 된다.

  • Kafka Topic 생성
# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-topics.sh --create \\
--bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 \\
--partitions 1 \\
--replication-factor 1\\
--topic partition-data-sort
  • Kafka Producer 에 Message 생성
# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-producer.sh \\
--broker-list kafka01:9092,kafka:9092,kafka:9092 \\
--topic partition-data-sort

> 1
> 2
> 3
> 4
> 5
  • Kafka Consumer 에 Message 소비

: 이번에는 데이터가 입력 순서와 동일하게 소비 되는 것을 확인할 수 있다.

# EC2 Ubuntu terminal(kafka01)

$KAFKA_HOME/bin/kafka-console-consumer.sh \\
--bootstrap-server kafka01:9092,kafka:9092,kafka:9092 \\
--topic partition-data-sort \\
--from-beginning

> 1
> 2
> 3
> 4
> 5

 

 

 

 

 

반응형
그리드형

댓글