Kafka 토픽(Topic) (2)
Kafka 토픽(topic)
- 메시지를 구분하는 단위 : 파일 시스템의 폴더와 유사
- 한 개의 토픽(Totic)은 한 개 이상의 파티션(Partition)으로 구성
- 프로듀서(Producer)가 토픽(Topic)에 전송
- 컨슈머(Consumer)는 토픽(Topic)에서 읽는 역할
토픽(Topic)은 RDBMS에서 테이블(Table)과 저장 위치 저장할 대상이라고 생각합니다.
토픽(Topic)을 생성 시 Kafka Command Line Tool을 이용하여 생성할 예정입니다.
kafka command line tool은 공식 홈페이지에서 다운 받을 수 있습니다.
카프카 토픽 리스트 확인하기
kafka-topics.sh --bootstrap-server localhost:9092 --list
가볍게 위 명령어를 치고 카프카에 CLI가 잘 먹히는지 확인하여 체크한다. Kafka Docker로 구성하기(0)을 통해서 설치하였고, 잘 적용되었는지 확인하면 좋을 것 같다.
카프카 토픽(Topic) 생성하기
kafka-topics.sh --bootstrap-server localhost:9092 --topic first_topic --create --partitions 3 --replication-factor 1
가볍게 위 명령어를 분석해보자면 --bootstrap-server
는 카프카 브로커 서버를 지정해주면 된다. --topic
다음에는 토픽 이름 --create
생성한다는 의미이다.
--partitions
브로커에 파티션을 3개 지정한다는 것이다 분산 처리를하기위해 하나의 토픽에 저장 시 3개의 파티션으로 나누어 작업을 처리할 수 있는 것과 같다.
--replication-factor
는 복제 조건을 뜻합니다. 0은 복제하지않는 정책 1은 하나의 다른 브로커에 복제한다는 의미이고 2는 전체 브로커에 대해 같게 복제하여 안정성을 높인다는 의미입니다.
생성 후에 위의 리스트 명령어를 작성하게되면 first_topic
이라고 shell에 표현 될 것 입니다.
카프카에 저장이 어떻게 되었는지 확인해보겠습니다.
taemin ~/Documents/kafka-study/kafka-docker/kafka-log/kafka-logs-32de4d328dc6> ll
total 32
-rw-r--r-- 1 taemin staff 0B 7 14 22:15 cleaner-offset-checkpoint
drwxr-xr-x 6 taemin staff 192B 7 14 22:17 first_topic-0
drwxr-xr-x 6 taemin staff 192B 7 14 22:17 first_topic-1
drwxr-xr-x 6 taemin staff 192B 7 14 22:17 first_topic-2
-rw-r--r-- 1 taemin staff 4B 7 14 22:16 log-start-offset-checkpoint
-rw-r--r-- 1 taemin staff 91B 7 14 22:15 meta.properties
-rw-r--r-- 1 taemin staff 4B 7 14 22:16 recovery-point-offset-checkpoint
-rw-r--r-- 1 taemin staff 52B 7 14 22:17 replication-offset-checkpoint
위의 그림에서 보다시피 first_topic
0,1,2라고 만들어졌어요 브로커(broker)는 1개이지만 파티션(partitions)이 3개라 하나의 브로커에 저장되있는 것을 볼 수 있습니다.
카프카 토픽 상세 정보 확인하기
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--topic first_topic \
--describe
위와 같이 first_topic
에 대해 자세한 정보가 필요한 경우 명령어를 통하여 알 수 있다.
Topic: first_topic TopicId: xmCU6y6hSsOVeEBlvRkE_g PartitionCount: 3 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: first_topic Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
Topic: first_topic Partition: 1 Leader: 1001 Replicas: 1001 Isr: 1001
Topic: first_topic Partition: 2 Leader: 1001 Replicas: 1001 Isr: 1001
토픽을 수정하거나 삭제하는 법도 따로 존재합니다.
카프카 토픽 수정하기
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--topic first_topic \
--alter \
--partitions 3
파티션 개수 변경하는 방법입니다. --alter
이용하여 파티션 개수를 변경하였습니다. 자세한 내용은 --decribe
명령어를 통해 변경되었음을 알 수 있습니다.
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--entity-type topics \
--entity-name first_topic \
--alter \
--add-config retention.ms=86400000
토픽에 retention.ms
옵션을 추가하는 설정입니다. 해당 설정은 토픽에 저장되는 시간을 입력한 것입니다.
프로듀서가 토픽에 레코드를 전달하고나서 저장하는 시간을 설정한 것입니다. retention.ms
설정 시간 후에는 데이터가 삭제되는 설정입니다.
카프카 로그 파일 분석해보기
taemin ~/Documents/kafka-study/kafka-docker/kafka-log/kafka-logs-32de4d328dc6/first_topic-0> ll
total 8
-rw-r--r-- 1 taemin staff 10M 7 14 22:17 00000000000000000000.index
-rw-r--r-- 1 taemin staff 0B 7 14 22:17 00000000000000000000.log
-rw-r--r-- 1 taemin staff 10M 7 14 22:17 00000000000000000000.timeindex
-rw-r--r-- 1 taemin staff 8B 7 14 22:17 leader-epoch-checkpoint
first_topic-0
폴더를 들어가게 되면 다음과 같은 파일 구성이 되어있습니다.
로그(log)파일에는 세그먼트를 구성하는 실제 데이터가 들어있는 파일입니다. (00000000000000000000.log)
인덱스(index)파일에는 논리적인 인덱스와 파일의 물리적인 인덱스를 매핑해주는 파일입니다. (00000000000000000000.index)
파일명에서 등장하는 00000000000000000000는 해당 Segment의 Base Offset입니다.
해당 로그 파일 분석기는 추가적으로 알아가는 과정에서 내용을 추가하도록 하겠습니다.
댓글남기기