[Kafka] 다운로드 및 Quick Start
이 글에서는 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 ***
입력 줄이 너무 깁니다.
명령 구문이 올바르지 않습니다.
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