본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/4hTSJNB
I. 학습 인증샷 4장 이상 포함
1. 공부시작: 날짜, 시각 다 나오도록
2. 공부 종료: 날짜 시각 다 나오도록
3. 1개 클립 수강 (강의장 목록 캡쳐, 수강화면이 보이지 않도록) 1장
4. 학습 인증샷 1장(필기 촬영이나 작업물 촬영)
II. 학습 후기 700자 이상 (공백 제외)
Kafka CLI에 대한 내용이다.
요약
Kafka CLI
- CLI: Command Line Interface
- 아파치 카프카를 관리하고 운영하기 위해 제공되는 명령어 도구
- CLI를 통해 카프카 토픽, 프로듀서 및 컨슈머를 제어 가능
Kafka CLI 주요 기능
- kafka topic 관리
- 토픽의 생성, 삭제, 조회, 수정 가능
- 예
- 토픽 목록 보기 (조회)
- 파티션 및 복제 설정 변경 (수정)
- 프로듀서 메시지 삽입
- 특정 토픽에 메시지를 보내는 기능
- 메시지의 키와 값을 설정하여 전송 가능
- 컨슈머 메시지 소비
- 토픽에서 메시지를 읽고 처리
- 특정 컨슈머 그룹을 지정하거나 파티션별로 메시지를 소비 가능
Kafka CLI는 카프카를 설치하면 그 안에 커맨드라인이 존재한다.
topic 관련 명령어
- 토픽 목록 보기
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
- 토픽 생성하기
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create \
--topic my_topic --partitions 3 --replication-factor 1
- 토픽 삭제
bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete \
--topic my_topic
- 토픽 상세 정보 조회
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--topic my_topic --describe
- 전부 보면 `kafka-topics.sh`로 실행할 수 있는 것을 알 수 있다.
- --create
- 토픽을 만든다
- --alter
- 토픽의 옵션을 수정한다
- --list
- 토픽의 목록을 뽑아온다
- --describe
- 토픽의 상세 정보를 조회한다
- --delete
- 토픽을 삭제한다
- 쉽게 말해서 "CRUD"
- --create
Producer 관련 명령어
- 메시지 보내기
bin/kafka-console-producer.sh --broker-list localhost:9092 \
--topic my_topic
- 메시지 입력
# 입력 예시
> Hello FastCampus!
Consumer 관련 명령어
- 메시지 읽기 (처음부터)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--from-beginning --topic my_topic
- 특정 Consumer Group으로 읽기
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--group group_name --topic my_topic
- kafka-consumer-groups.sh (처음 봄)
- 컨슈머 그룹들에 대한 정보를 조회 해볼 수 있는 도구?
Kafka 실행 및 종료
- 실행
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
- 종료
bin/kafka-server-stop.sh config/server.properties
bin/zookeeper-server-stop.sh config/zookeeper.properties
실습 - 토픽 생성
토픽생성
- 실습 명령어
ahn@Mac study-kafka-message-queue % docker compose exec kafka1 \
kafka-topics.sh \
--bootstrap-server localhost:9092,localhost:9093,localhost:9094 \
--create --topic my-topic \
--replication-factor 2 \
--partitions 1
[2025-04-10 10:18:29,395] WARN [AdminClient clientId=adminclient-1] Connection to node -2 (localhost/127.0.0.1:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
Created topic my-topic.
ahn@Mac study-kafka-message-queue %
- kafka1 이나 kafka2나 상관없음
- docker compose로 이루어진 kafka1~3까지는 ZooKeeeper에 의해 하나의 클러스터화 되어 있음
- 브로커 중 하나만 적어도 카프카 클러스터 접근에 문제가 없음
- replication-factor 2
- 1로 두었다면 카프카 메시지를 이 브로커에 대해 복제는 안하겠다
- 2
- 복제를 한 번 해서 총 2개
- 복제를 2번하는게 아님
- partitions 1
- 이 토픽을 queue처럼 (1등분)쓰겠다
- 이론시간에 배웠듯이 이 파티션 수는 한번 늘리면 변경이 불가능에 가까움(늘리는 건 가능)
- 신중하게 결정해야 한다
Consumer 실행
- 실습 명령어
docker compose exec kafka1 \
kafka-console-consumer.sh \
--bootstrap-server localhost:19092 \
--topic my-topic \
--from-beginning
- --from-beginning
- 처음 부터 읽어오기...
- consumer는 카프카에 쌓여있는 데이터를 가져오기 위해
- producer와 입장이 다름 - 어디서부터 읽어 와야하는지 지정해야 함
Producer 실행
- 실습 명령어
docker compose exec kafka1 \
kafka-console-producer.sh \
--bootstrap-server localhost:19092 \
--topic my-topic
1 - 파티션 1개의 1개의 토픽
2 - 파티션이 3개로 나누어진 토픽
Topic 수정
- 실습 명령어
# 파티션 3개로 alter
docker compose exec kafka1 \
kafka-topics.sh \
--bootstrap-server localhost:19092 \
--topic my-topic \
--alter --partitions 3
- 우리가 상상하는 모습
Producer 실행
- 실습 명령어 - 이전과 달리 옵션이 있음
docker compose exec kafka1 \
kafka-console-producer.sh \
--bootstrap-server localhost:19092 \
--topic my-topic \
--property="parse.key=true" \
--property="key.separator=:"
- key를 parsing 하겠다.
- key 구분자는 콜론으로 하겠다.
ㅏ
- 실습 명령어 - 이전과 달리 옵션이 있음
진실1: Topic은 사실 카프카 메시지에 대한 논리적인 단위이다.
진실2: 따라서 실제 메시지는 물리적으로 Broker에 담겨있다.
따라서 위의 상황의 실제 모습은 다음과 같다.
- Broker: 각각의 카프카 머신
- 토픽은 클러스터를 가로지르고 있음
- 파티션 3개 -> 브로커의 리소스를 효율적으로 사용할 수 있도록 각 브로커에 나눠서
- 카프카는 결국 토픽이 아닌 파티션 별로 순서 보장이 된다.
- 이론시간에 배웠던 해시값을 이용한 값을 이용 -> 동일한 키를 가진 메시지는 동일한 파티션
실습 - Replication
- 아니 동영상 하나 실습이 너무 긴거 아님??
- 벌써 몇천자는 썼을듯..
- 환급챌린지 할 강의 완전 잘못 골랐음... 존나 어렵고 길고..
환경 변경 : 파티션 복제를 위해 Replication factor를 2로 설정한다.
Topic생성
docker compose exec kafka1 \
kafka-topics.sh \
--bootstrap-server localhost:9092,localhost:9093,localhost:9094 \
--create \
--topic my-distributed-topic \
--replication-factor 2 \
--partitions 3
- factor 2
- 2번 복제하는 것을 의미하지 않는다
- 1개는 원본 , 하나는 복제본 해서 총 2벌의 데이터를 갖는다는 뜻
- 파티션은 처음부터 3개를 준다.
- 백엔드 개발자에서는 크게 달라지는 부분이 없어 보임
- 메시지가 들어오면 전략에 따라 어떤 파티션에 들어갈지 정해짐 - 리더 파티션
- Leader Partition
- 외부와 직접적으로 메시지를 주고 받는 파티션
- Follower Partition
- Leader로부터 데이터를 복제받음
- Backup용
- Leader와 Follower가 섞여있음
- 하나의 Broker가 죽어도 복구할 수 있음
- DB Replication과 다르다
- DB
- write: primary only
- read : primary, secondary both
- kafka와 다름
- DB
간단하게 정리했는데도 네이버 글자수로 3800자임...
동영상 하나에 너무 많은 내용이 ㅠㅠ
실습이라 좋은데 오히려 환급 챌린지는 정말 챌린지가 되고 있다..ㅠ
'패캠챌린지 > Kafka EcoSystem - 진행중' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 36일차 : 한번에 끝내는 KafkaEcosystem 강의 후기 (0) | 2025.04.09 |
---|---|
패스트캠퍼스 환급챌린지 35일차 : 한번에 끝내는 KafkaEcosystem 강의 후기 (0) | 2025.04.08 |
패스트캠퍼스 환급챌린지 33일차 : 한번에 끝내는 KafkaEcosystem 강의 후기 (0) | 2025.04.06 |
패스트캠퍼스 환급챌린지 32일차 : 한번에 끝내는 KafkaEcosystem 강의 후기 (0) | 2025.04.05 |
패스트캠퍼스 환급챌린지 31일차 : 한번에 끝내는 KafkaEcosystem 강의 후기 (0) | 2025.04.04 |