Kafka 설치하기
이벤트 스트림을 제공하는 브로커 이다. 더블어 메시지 스트림도 지원한다. Scala 로 제작되었으며 JVM 위에서 동작한다. 따라서 Java 가 있어야 한다.
환경
서버는 3대로 준비했다. Production 에서는 적어도 3대의 Broker 를 권장대로 설치한 것이다. 서버 3대는 다음과 같다.
- klab-master1.systemv.local(192.168.96.60)
- klab-worker1.systemv.local(192.168.96.61)
- klab-worker2.systemv.local(192.168.96.62)
배포판은 Rocky Linux 9.3 최신 버전이다.
요구사항
Apache Kafka 를 실행하기 위해 JVM 이 필요하다. Kafka 버전에 따라서 Java 버전도 선택해야 한다. 최신의 Kafka 는 Java 11 을 필요로 한다.
Java 11 을 설치는 패키지로 설치 했다.
1 |
sudo dnf install java-11-openjdk-headless.x86_64 |
Kafka 다운로드 및 설치
Apache Kafka 는 AWS 의 MSK 에 버전과 동일하게 선택했다.
1 |
curl -LJO https://downloads.apache.org/kafka/3.5.2/kafka_2.13-3.5.2.tgz |
다음과 같이 /app 디렉토리에 압축해제로 설치를 완료 한다.
1 2 3 4 |
sudo tar xvzf kafka_2.13-3.5.2.tgz -C /app cd /app sudo chown -R systemv: kafka_2.13-3.5.2/ sudo ln -s /app/kafka_2.13-3.5.2 kafka |
Zookeeper 설정
kafka 에 zookeeper 가 내장되어 있다. 설정은 /app/kafka/config 디렉토리에 zookeeper.properties 파일이다. 다음은 예시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# zookeeper.properties tickTime=2000 # 다른 zookeeper 의 heartbeats 시간으로 millisec dataDir=/app/kafka/data/zookeeper # 데이터 디렉토리. dataLogDir 를 정의하지 않으면 이 디렉토리에 로그도 함께 쌓인다. clientPort=2181 # client 접속을 받기 위한 포트. Broker 의 접속을 받기 위한 포트 maxClientCnxns=60 # client 의 접속을 받을 수 있는 최대 접속개수. 기본값 60, unlimited 는 0 이다. initLimit=20 syncLimit=5 # server.<myid> = <hostname>:<leaderport>:<electionport> server.1=klab-master1.systemv.local:2888:3888 server.2=klab-worker1.systemv.local:2888:3888 server.3=klab-worker2.systemv.local:2888:3888 admin.enableServer=false |
systemd Unit을 작성해서 관리한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[Unit] Description=Zookeeper Daemon Documentation=https://zookeeper.apache.org Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple User=systemv Group=systemv WorkingDirectory=/app/kafka ExecStart=/app/kafka/bin/zookeeper-server-start.sh /app/kafka/config/zookeeper.properties ExecStop=/app/kafka/bin/zookeeper-server-stop.sh Restart=on-abnormal StandardOutput=append:/app/kafka/logs/zookeeper.log StandardError=append:/app/kafka/logs/zookeeper.log [Install] WantedBy=multi-user.target |
Kafka 설정
kafka 의 설정은 /app/kafka/conf/server.properties 파일이다. 주요한 설정은 다음과 같다.
1 2 3 4 5 6 7 8 |
broker.id=1 listeners=PLAINTEXT://klab-master1.systemv.local:9092 advertised.listeners=PLAINTEXT://klab-master1.systemv.local:9092 log.dirs=/app/kafka/data/kafka zookeeper.connect=klab-master1.systemv.local:2181,klab-worker1.systemv.local:2181,klab-worker2.systemv.local:2181/kafka_znode log.retention.hours=72 delete.topic.enable=true allow.auto.create.topics=false |
systemd Unit을 작성해서 관리한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[Unit] Description=Apache Kafka server (broker) Requires=network.target remote-fs.target zookeeper.service After=network.target remote-fs.target zookeeper.service [Service] Type=simple User=systemv Group=systemv #Environment='KAFKA_HEAP_OPTS=-Xms500m -Xmx500m' WorkingDirectory=/app/kafka ExecStart=/app/kafka/bin/kafka-server-start.sh /app/kafka/config/server.properties ExecStop=/app/kafka/bin/kafka-server-stop.sh LimitNOFILE=16384:163840 Restart=on-abnormal StandardOutput=append:/app/kafka/logs/kafka-server.log StandardError=append:/app/kafka/logs/kafka-server.log [Install] WantedBy=multi-user.target |
토픽 테스트
이제 토픽을 생성해 테스트를 해본다. 다음과 같이 Topic 을 생성한다.
1 2 |
/app/kafka/bin/kafka-topics.sh --bootstrap-server klab-master1.systemv.local:9092 --create --topic test-overview01 --partitions 1 --replication-factor 3 Created topic test-overview01. |
파티션 1개 복제는 3개로 토픽이 생성되었다. consumer 명령어를 이용해서 토픽에 접속한다.
1 |
/app/kafka/bin/kafka-console-consumer.sh --bootstrap-server klab-worker1.systemv.local:9092 --topic test-overview01 |
접속을 하면 아무런 일도 발생하지 않는다.
이제 producer 를 이용해서 메시지를 생산한다.
1 2 |
/app/kafka/bin/kafka-console-producer.sh --bootstrap-server klab-worker2.systemv.local:9092 --topic test-overview01 >First message |
이렇게 메시지를 생성하면 앞서 접속한 consumer 화면에 똑같이 내용이 나와야 한다.
topic 의 통계 정보를 다음과 같이 확인해 볼 수 있다.
1 2 3 |
/app/kafka/bin/kafka-topics.sh --bootstrap-server klab-worker2.systemv.local:9092 --topic test-overview01 --describe Topic: test-overview01 TopicId: nKyjCrdyQN6AGtaT4IWs7w PartitionCount: 1 ReplicationFactor: 3 Configs: Topic: test-overview01 Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 |