이 글에서는 Kafka를 다운로드하고 실행하는 방법에 대해 알아보겠습니다.

윈도우를 기준으로 명령어를 작성하였지만, 리눅스 환경과 실행 파일만 다를 뿐 명령어는 동일합니다.

( 도커로 설치하기 )




1. Kafka 다운로드

1) Windows

Kafka 공홈에서 Kafka를 다운로드 받습니다.

( 현재 최신 버전은 2019년 12월에 Release된 2.4 입니다. )



  • Binary 압축 파일을 다운받습니다.
    • 스칼라 버전별로 binary 파일을 제공해주는데, 어떤 버전이라도 돌아가게 하려면 Scala 2.12를 추천한다고 하네요.
  • Kafka는 스칼라로 개발 되었으므로, 시스템에 JVM이 설치되어 있어야 합니다. ( jdk8 이상 )



2) linux



1. wget 패키지 설치

# yum -y install wget


2. Kafka 다운로드

# wget http://mirror.apache-kr.org/kafka/2.4.1/kafka-2.4.1-src.tgz


3. 압축 해제

# tar -xzf kafka-2.4.1-src.tgz


4-1. Java 설치 확인

# java -version


4-2. Java 설치가 안되어 있으면 설치

# yum -y install java-11-openjdk java-11-openjdk-devel

( 추가적으로 /etc/profile에서 환경변수까지 잡아주도록 합니다. )


이제 Kafka를 구동시킬 준비가 되었습니다.





2. Zookeeper 실행

Apache Zookeeper는 Kafka 클러스터의 최신 설정정보 관리, Kafka 서버들의 동기화, 리더 채택 등 클러스터의 서버들이 공유하는 데이터들을 관리하기 위해 사용됩니다.

따라서 Kafka server를 실행하기 전에, Zookeeper를 먼저 실행해줘야 합니다.


# cd {압축 풀었던 kafka 폴더}

# .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

[2020-03-12 20:51:36,024] INFO Reading configuration from: .\config\zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)

[2020-03-12 20:51:36,032] WARN \tmp\zookeeper is relative. Prepend .\ to indicate that you're sure! (org.apache.zookeeper.server.quorum.QuorumPeerConfig) [2020-03-12 20:51:36,034] INFO clientPortAddress is 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.quorum.QuorumPeerConfig) ... [2020-03-12 20:51:36,233] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory) [2020-03-12 20:51:36,252] INFO zookeeper.snapshotSizeFactor = 0.33 (org.apache.zookeeper.server.ZKDatabase) [2020-03-12 20:51:36,266] INFO Reading snapshot \tmp\zookeeper\version-2\snapshot.1e (org.apache.zookeeper.server.persistence.FileSnap) [2020-03-12 20:51:36,308] INFO Snapshotting: 0xa6 to \tmp\zookeeper\version-2\snapshot.a6 (org.apache.zookeeper.server.persistence.FileTxnSnapLog) [2020-03-12 20:51:36,335] INFO Using checkIntervalMs=60000 maxPerMinute=10000 (org.apache.zookeeper.server.ContainerManager)

  • 윈도우는 /bin/windows 폴더 밑에 batch 파일을 사용하고, 리눅스라면 /bin 디렉토리 하위에 shell 파일을 사용하면 됩니다.
  • zookeeper-server-start.bat
    • zookeeper 서버를 실행하는 파일입니다.
  • zookeeper.properties
    • zookeeper 서버 설정 파일입니다.
    • 위의 로그를 보시면 zookeeper를 실행했을 때 포트가 2181로 바인딩 되는데 그 이유는, zookeeper.properties에서 clientPort=2181으로 기본 설정되어 있기 때문입니다.
    • 기본 설정외에 추가적인 설정은 공식문서를 참고하시면 도움이 될듯합니다.



*** error ***

입력 줄이 너무 깁니다.

명령 구문이 올바르지 않습니다.

=> 위와 같은 에러가 발생한다면 폴더 경로가 길어서 그런 것이니, kafka 폴더를 C드라이브 바로 밑으로 옮긴후에 실행하시면 됩니다.





3. Kafka 실행

Zookeeper 서버가 실행된 상태에서 CMD창을 하나 더 열어 Kafka 서버를 실행합니다.

# .\bin\windows\kafka-server-start.bat .\config\server.properties

[2020-03-12 21:25:53,568] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$) [2020-03-12 21:25:53,857] INFO starting (kafka.server.KafkaServer) [2020-03-12 21:25:53,858] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer) [2020-03-12 21:25:53,874] INFO [ZooKeeperClient Kafka server] Initializing a new session to localhost:2181. (kafka.zookeeper.ZooKeeperClient) ... [2020-03-12 21:28:27,881] INFO [GroupMetadataManager brokerId=0] Scheduling loading of offsets and group metadata from __consumer_offsets-48 (kafka.coordinator.group.GroupMetadataManager) [2020-03-12 21:28:27,882] INFO [GroupMetadataManager brokerId=0] Finished loading offsets and group metadata from __consumer_offsets-42 in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager) [2020-03-12 21:28:27,884] INFO [GroupMetadataManager brokerId=0] Finished loading offsets and group metadata from __consumer_offsets-45 in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager) [2020-03-12 21:28:27,888] INFO [GroupMetadataManager brokerId=0] Finished loading offsets and group metadata from __consumer_offsets-48 in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)

  • kafka-server-start.bat는 kafka 서버 실행 파일이며, server.properties는 설정 파일입니다.
  • Kafka 서버를 튜닝하는 작업은 꽤 어려운 일이고, 저도 잘 모르니... 어떤 설정이 있는지에 대한 정보는 공식문서로 대체하겠습니다.



*** error ***

[2020-03-12 21:24:45,131] ERROR Shutdown broker because all log dirs in c:\tmp\kafka-logs have failed (kafka.log.LogManager)

=> 위와 같은 에러가 발생한다면, c:\tmp 폴더 하위에 있는 kafka-logs 폴더와 zookeeper 폴더를 제거하시길 바랍니다. 서버 실행시 재생성되므로 상관 없습니다. ( 참고 )







4. Quick Start

Zookeeper와 Kafka 서버를 실행했으니, Topic을 만들어서 메시지를 생산/소비하는 예제를 진행해보겠습니다.

아래의 예제는 공식문서 Quickstart를 참고하였습니다.

  • 윈도우 : .bat 파일
  • 리눅스 환경 : .sh 파일


1) Topic

⭐ Topic 관련 옵션 한번에 보기 (help 명령어)

# .\bin\windows\kafka-topics.bat --help


Topic 생성하기

CMD창을 하나 더 열어서 Topic을 만듭니다.

# .\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

  • --create
    • 새로운 토픽을 만들 때 사용하는 옵션
  • --bootstrap-server
    • 연결할 Kafka 서버( host:port )
    • 이 옵션이 추가되면, 직접 Zookeeper에 연결하지 않아도 됩니다.
  • --replication-factor
    • Partition 복제 수
    • 이 옵션을 사용하지 않으면, 기본 값을 사용합니다.
      • 기본 값은 server.properties 파일에서 default.replication.factor 항목으로 설정 가능합니다. ( 설정되어 있지 않을 경우, 추가 작성 )
  • --partitions
    • Topic이 생성되거나 변경될 때의 Partition 수
    • 이 옵션을 사용하지 않으면, 기본 값을 사용합니다.
      • 기본 값은 server.properties 파일에서 num.partitions 항목으로 설정 가능합니다.
  • --topic
    • create, alter, describe, delete 옵션에 사용할 Topic 명
    • Topic 이름은 큰따옴표(")로 묶고, 정규식 사용이 가능하므로 \로 escape 합니다.



Topic 목록

# .\bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092

test

  • --list
    • 사용 가능한 Topic 목록



Topic 상세정보

# .\bin\windows\kafka-topics.bat --describe --topic test --bootstrap-server localhost:9092 Topic: test PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824 Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0

  • --describe
    • 운영상에 필요한 Topic의 상세정보를 보여줍니다.



Topic 삭제

# .\bin\windows\kafka-topics.bat --delete --topic test --bootstrap-server localhost:9092
  • --delete
    • Topic을 삭제하기 위해서는 server.properties 파일에서 delete.topic.enable=true 설정을 추가해줘야 합니다. ( 서버 재시작 필요 )





2) Producer

⭐ Producer 관련 옵션 한번에 보기 (help 명령어)

# .\bin\windows\kafka-console-producer.bat --help


Topic을 다시 생성한 상태에서 해당 Topic으로 메시지를 보냅니다. ( 메시지 생산 )

# .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

>hello kafka >victolee

  • 두 개의 메시지를 입력합니다.
    • "hello kafka"
    • "victolee"



3) Consumer

⭐ Consumer관련 옵션 한번에 보기 (help 명령어)

# .\bin\windows\kafka-console-consumer.bat --help


test Topic에 "hello kafka", "victolee" 메시지를 생산했으니 CMD 창을 하나 더 열어서 이를 확인해봅니다. ( 메시지 소비 )

# .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

  • --from-beginning
    • Consumer에게 설정된 offset이 없으므로 가장 최신의 메시지 대신 가장 먼저 도착한 메시지부터 읽도록 하는 옵션입니다.



Producer에서 메시지를 보내면 Consumer에서 바로 확인이 가능합니다.





이상으로 Kafka 설치 및 간단한 기본 명령어에 대해 알아보았습니다.

각 스크립트에서 제공하는 옵션들은 --help 옵션을 통해 확인하시면 도움이 됩니다.


[참고자료]

https://kafka.apache.org/quickstart


'OpenSource > Kafka' 카테고리의 다른 글

[Kafka] 기본 개념잡기  (14) 2020.03.12