지난 포스팅에서는 kafka-console-producer.sh 명령을 통해 토픽에 레코드를 전달하는 과정을 살펴보았다.
2022.10.26 - [All] - [Kafka] Kafka Command-Line Tool(3) - kafka-console-producer.sh
[Kafka] Kafka Command-Line Tool(3) - kafka-console-producer.sh
2022.10.26 - [Message Queue/Kafka] - [Kafka] Kafka Command-Line Tool(2) - kafka.topics.sh [Kafka] Kafka Command-Line Tool(2) - kafka.topics.sh kafka-topics.sh 이 커맨드 라인 툴을 통해 토픽(topic)과..
ryeojin.tistory.com
이번 포스팅에서는 hello.kafka 토픽으로 전송한 데이터를 kafka-console-consumer.sh 명령어로 확인해보도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ bin/kafka-console-consumer.sh --bootstrap-server my-kafka:9092 \
--topic hello.kafka \
--from-beginning
hello
kafka
0
1
2
3
4
5
key1:no1
key2:no2
key3:no3
|
cs |
이때 필수 옵션으로 --bootstrap-server에 카프카 클러스터 정보, --topic에 토픽 이름이 필요하다. 추가로 --from-beginning 옵션을 주면 토픽에 저장된 가장 처음 데이터부터 출력한다.
만약 데이터의 메시지 키와 메시지 값을 확인하고 싶다면 --property 옵션을 사용하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ bin/kafka-console-consumer.sh --bootstrap-server my-kafka:9092 --topic hello.kafka \
--property print.key=true \
--property key.separator="-" \
--group hello-group \
--from-beginning
null-hello
null-kafka
null-0
null-1
null-2
null-3
null-4
null-5
null-key1:no1
null-key2:no2
null-key3:no3
|
cs |
(데이터를 보낼 때 오타가 있어서 key값이 인식되지 않았음......)
1. 메시지 키를 확인하기 위해 print.key를 true로 설정했다. print.key를 설정하지 않으면 기본 설정값이 false이기 때문에 메시지 키를 확인할 수 없다.
2. 메시지 키 값을 구분하기 위해 key.separator를 설정했다. key.separator를 설정하지 않으면 tab delimieter(\t)가 기본값으로 설정되어 출력된다. 여기서는 대시(-)로 설정했으므로 <메시지 키>-<메시지 값> 형태로 출력된다.
3. --group 옵션을 통해 신규 컨슈머 그룹(consumer group)을 생성했다. 컨슈머 그룹은 1개 이상의 컨슈머로 이루어져 있다. 이 컨슈머 그룹을 통해 가져간 토픽의 메시지는 가져간 메시지에 대해 커밋(commit)을 한다. 커밋이란 컨슈머가 특정 레코드까지 처리를 완료했다고 레코드의 오프셋 번호를 카프카 브로커에 저장하는 것이다. 커밋 정보는 __consumer_offsets 이름의 내부 토픽에 저장된다.
메시지 키를 넣지 않은 데이터는 null과 메시지 값이 함께 보이고, 메시지 키를 넣은 데이터는 메시지 키와 메시지 값이 함께 묶여서 한 줄로 보이는 것을 확인할 수 있다. 여기서 특이한 점은 kafka-console-producer.sh로 전송했던 데이터의 순서가 현재 출력되는 순서와 다르다는 것이다.
이는 카프카의 핵심인 파티션 개념 때문에 생기는 현상이다. kafka-console-consumer.sh 명령어를 통해 토픽의 데이터를 가져가게 되면 토픽의 모든 파티션으로부터 동일한 중요도로 데이터를 가져간다. 이로 인해 프로듀서가 토픽에 넣은 데이터의 순서와 컨슈머가 토픽에서 가져간 데이터의 순서가 달라지게 되는 것이다. 만약 토픽에 넣은 데이터의 순서를 보장하고 싶다면 파티션 1개로 구성된 토픽을 만드는 것이다.
'Message Queue > Kafka' 카테고리의 다른 글
[Kafka] Kafka Command-Line Tool(5) - kafka-consumer-groups.sh (0) | 2022.10.26 |
---|---|
[Kafka] Kafka Command-Line Tool(3) - kafka-console-producer.sh (1) | 2022.10.26 |
[Kafka] Kafka Command-Line Tool(2) - kafka.topics.sh (0) | 2022.10.26 |
[Kafka] Kafka Command-Line Tool(1) - 설정 (0) | 2022.10.26 |