저번 포스팅에서 Kafka 를 Docker 에 설치해봣는데

로컬에 바로 설치하자는 의견이 있어 예제를 만들어봅니다.

 

Apache Kafka 는 자바와 스칼라로 작성되었습니다.

 

먼저 자바를 설치해봅시다.

 

$ sudo dnf install java-11-openjdk wget vim

 

 

 

설치가 완료되었으면 Apache Kafka 를 다운받아 봅시다.

kafka-manager 도 연동하기위해 최신버전은 피해주겠습니다.

 

$ wget http://www-us.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz

 

저는 우분투에서 위 버전을 테스트 해봤기 때문에 해당 버전으로 선정했습니다.

 

 

이제 wget 을 실행했던 경로에 kafka.tgz 파일이 생성되었습니다.

해당 파일을 압축해제해서 작업경로에 옮겨줍시다.

 

$ tar xzf kafka_2.12-2.4.0.tgz

$ sudo mv kafka_2.12-2.4.0 /usr/local/kafka

 

/usr/local/kafka 폴더 안에는

kafka 와 zookeeper 가 모두 깔려있습니다.

 

 

kafka 와 zookeeper 를 서비스에 등록해봅시다.

 

zookeeper 등록

$ vi /etc/systemd/system/zookeeper.service

 

#!/bin/bash
[Unit]
Description=Apache Zookeeper server
Documentation=http://zookeeper.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/jre-11-openjdk"
ExecStart=/bin/sh -c "/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties > /usr/local/kafka/logs/zookeeper.log 2>&1"
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

 

 

옵션에 대해 궁금해서 찾아봤는데..

 

# Restart=on-abnormal
If set to on-abnormal, the service will be restarted when the process is terminated by a signal (including on core dump, excluding the aforementioned four signals), when an operation times out, or when the watchdog timeout is triggered.

비정상적인 종료 시 재시작 옵션.


WantedBy=multi-user.target
multi-user.target normally defines a system state where all network services are started up and the system will accept logins, but a local GUI is not started. This is the typical default system state for server systems, which might be rack-mounted headless systems in a remote server room.

네트워크가 연결되면 시작. GUI 가 로딩되지 않아도 시작됨.

 

대충 이런 내용이였습니다.

 

 

kafka 등록

 

#!/bin/bash
[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/jre-11-openjdk"
ExecStart=/bin/sh -c "/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /usr/local/kafka/logs/kafka.log 2>&1"
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target

 

 

작성완료 후 

systemctl reload
$ systemctl daemon-reload

 

 

실행테스트

 

$ sudo systemctl start zookeeper
$ sudo systemctl start kafka
$ sudo systemctl status zookeeper
$ sudo systemctl status kafka

두 서비스를 부팅 시 실행할 수 있게 설정해줍시다.

 

$ systemctl enable zookeeper kafka

 

 

kafka 가 실행되었으니 topic 을 만들고 메세지가 전달되는지 확인해봅시다.

 

$ cd /usr/local/kafka/bin

$ ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testTopic

 

testTopic 이 생성되었습니다.

 

testTopic 으로 메세지 전달이 잘 되는지 테스트 해봅시다.

먼저 producer 실행

 

$ ./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic

 

다른 세션에 consumer 도 실행해줍시다.

$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testTopic --from-beginning

 

메세징 테스트!

 

 

잘되네요 :)

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기