[Kafka] Topic 만들기

Denver·2023년 2월 12일
0

Hadoop

목록 보기
8/9
post-thumbnail

0. 실행 환경

AWS EC2 t2.xlarge
OS : Red Hat 9.1
Kafka :3.3.1
Scala : 2.13


1. Topic 만들기

토픽 생성

bin/kafka-topics.sh --create --topic <test-topic> --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1

토픽 리스트 확인

producer 실행

./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic

여기 입력한 메세지가 토픽에 post됨

Consumer 실행

/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic

왼쪽 producer 창에서 메세지를 입력하면
오른쪽 conspumer 창에 메세지가 출력된다.



2. 컨슈머 그룹

consumer 그룹 지정하지 않으면 Unique한 컨슈머 그룹이 생성된다.

./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

그룹 지정 컨슈머 생성

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --group test-group

컨슈머 그룹 리스트

./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

컨슈머 그룹 상세

./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test-group



3. Consumer 와 Partition

1) 파티션 1개짜리 토픽

1 producer 2 consumer

컨슈머 그룹을 지정하지 않으면 유니크한 컨슈머 그룹이 생성된다(2번 참고)
프로듀서가 메세지를 보내면 모든 컨슈머가 동일하게 메세지를 받는다.



1 producer 1 consumer group(2 consumer)

컨슈머 그룹으로 묶어주면 한 컨슈머만 메세지 받는다.


2 producer 1 consumer group (2 consumer)

2번째 프로듀서가 메세지를 보내도 한 컨슈머만 메세지를 받는다.

-> first-topic 토픽에 파티션이 1개 이기때문에
파티션 1개는 컨슈머 그룹 내 1컨슈머와 매핑된다
-> 리소스 효율화위해 파티션 여러개로 설정한다.

partition 2개짜리 topic

토픽 리스트 확인

./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

partition 2개 짜리 토픽 생성

./bin/kafka-topics.sh --create --topic topic-multi-partition --bootstrap-server localhost:9092 --partitions 2 --replication-factor 1

2 producer 1 consumer group(2 consumer)

# producer
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topic-multi-partition

# consumer
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-multi-partition --group my-newgroup

메세지 분배되어서간다.
캡쳐에서는, 대부분 1프로듀서 -> 1 컨슈머에게, 2프로듀서 ->2컨슈머에게 가는 것만 나왔데 2프로듀서 메세지가 1컨슈머에게도 간다

profile
까먹었을 미래의 나를 위해

0개의 댓글