이번에는 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
'[AWS] > Kafka' 카테고리의 다른 글
[Kafka 클러스터 환경 구축] 8강. Topic, Producer, Consumer, Partition, Replica 설명 및 테스트 (0) | 2022.11.23 |
---|---|
[Kafka 클러스터 환경 구축] 7강. Kafka, Zookeeper 실행 (0) | 2022.11.23 |
[Kafka 클러스터 환경 구축] 6강. Host 및 클러스터 환경설정 (0) | 2022.11.22 |
[Kafka 클러스터 환경 구축] 5강.AMI 생성 및 인스턴스 복제 (0) | 2022.11.22 |
[Kafka 클러스터 환경 구축] 4강. Kafka 설치 및 환경설정 (1) | 2022.11.22 |
[Kafka 클러스터 환경 구축] 3강. Zookeeper 설치 및 환경설정 (0) | 2022.11.21 |
[Kafka 클러스터 환경 구축] 2강. Java 설치 및 환경설정 (0) | 2022.11.17 |
[Kafka 클러스터 환경 구축] 1강 AWS EC2 인스턴스 배포 (0) | 2022.11.17 |
댓글