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

파티션이 여러개인 경우 저장 순서대로 메시지가 응답됨을 보장하지 않음

  • 파티션이 하나인 경우 메시지 순서가 보장됨
  • 파티션이 여러개인 경우, 파티션 별 저장되어있는 메시지의 순서만 보장되므로 전체 저장된 메시지의 순서는 보장받을 수 없음

참고문서