Kafka 시작하기
Kafka 시작하기
Quick start
소스 다운로드
wget http://apache.tt.co.kr/kafka/2.4.0/kafka_2.12-2.4.0.tgz
압축 해제 및 디렉토리 이동
tar -xzf kafka_2.12-2.4.0.tgz
cd kafka_2.12-2.4.0
server.properties 파일 수정
- 파일 내용 중 주석처리되어있는 advertised.listeners 속성 설정 값을 아래와 같이 추가해준다.
advertised.listeners=PLAINTEXT://localhost:9092
서버 실행
- 주키퍼 서버 실행:
bin/zookeeper-server-start.sh config/zookeeper.properties
- 카프카 서버 실행:
bin/kafka-server-start.sh -daemon config/server.properties
test 토픽 생성
- 주키퍼 서버에 TopicCommand 명령을 이용한 토픽 생성 요청 (파티션 하나)
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
- 카프카 서버에 카프카 콘솔 프로듀서 스크립트를 통해 메시지 전송을 위한 ConsoleProducer 실행 요청
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
- > 커서와 함께 입력 대기중인 상태를 확인한 뒤, 보낼 메시지를
test command 1
,test command 2
와 같은 식으로 각각 입력 뒤 엔터
test 토픽 메시지 가져오기
- 카프카 콘솔 컨슈머를 통해 다음 명령을 전달하여 test 토픽에 등록된 모든 데이터 가져오기
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
파티션을 가지는 토픽 예제
파티션 8개를 사용하도록 지정된 test8 토픽 생성
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic test8
test8 토픽에 순차적으로 1~8까지의 메시지 각각 입력 후 엔터
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test8
test8에 등록된 토픽 메시지 가져오기
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test8 --from-beginning
위 결과를 통해 얻어온 값은 입력한 순서대로 돌아오지 않음
- 파티션과 각 파티션 별 메시지 순서를 이해해야함
- 컨슈머 입장에서 불러올 때에는 파티션이 1개인 토픽에 대해서만 순서가 보장되며, 파티션이 여러개인 경우 저장된 순서대로 메시지를 가져올 수 없다
파티션 4개를 가지는 토픽 예제
파티션 4개를 사용하도록 지정된 test4 토픽 생성
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic test4
test4 토픽에 순차적으로 1~6까지의 메시지 각각 입력 후 엔터
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test4
test4에 등록된 토픽 메시지 가져오기
# 현재 컴퓨터에서는 4,5,6,1,2,3 식으로 응답됨
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test4 --from-beginning
파티션이 여러개인 경우 저장 순서대로 메시지가 응답됨을 보장하지 않음
- 파티션이 하나인 경우 메시지 순서가 보장됨
- 파티션이 여러개인 경우, 파티션 별 저장되어있는 메시지의 순서만 보장되므로 전체 저장된 메시지의 순서는 보장받을 수 없음