본문 바로가기

Programming/Kafka

우분투에 아파치 카프카 서비스 설치하기

아파치 카프카는 링크드인에 의해 제작된 분산 메시지 시스템으로, 대량의 실시간 데이터를 효율적으로 처리하도록 설계되었습니다.  “대량의 실시간 데이터”를 다루는 시스템을 제작하는 개발자들이 테크 회사들은 카프카를 기본적으로 사용한다고 가정해도 무리가 없습니다.

아래 링크 내용을 바탕으로 우분투 16.04에 카프카를 설치하는 방법을 설명합니다.

https://hevodata.com/blog/how-to-install-kafka-on-ubuntu/

한 대의 컴퓨터에 테스트 시스템을 설치하는 상황을 가정합니다.

 

카프카는 원래 Scala 언어로 개발되었지만 바이너리 호환성 문제로 자바로 이식되었습니다.  이것 때문에 카프카 버전은 Scala와 자체 버전 두 가지가 합친 형태를 가집니다. 

터미널을 열고 자바를 설치합니다.

  • sudo apt-get update
  • sudo apt-get install default-jre

다음은 아파치 주키퍼(ZooKeeper) 서비스를 설치합니다.  주키퍼는 구성 정보를 관리하고 분산 동기화를 제공하는 서비스로 카프카 노드는 항상 주키퍼 상에서 실행됩니다.

  • sudo apt-get install zookeeperd

안전한 운용을 위해 카프카 전용 사용자를 추가합니다.  홈디렉토리나 패스워드, 로그인 등은 필요하지 않습니다.

  • sudo adduser --system --no-create-home --disabled-password --disabled-login kafka

이제 wget 명령을 사용하여 최신 버전 카프카를 다운로드 합니다.

binary로 다운받지 않으면 오류가 발생합니다.

/opt/kafka 디렉토리를 생성하여 압축을 해제합니다.

  • sudo mkdir /opt/kafka
  • sudo tar -xvzf kafka_2.12-1.1.0.tgz --directory /opt/kafka --strip-components 1

카프카는 메시지 데이터를 로컬 디스크에 저장합니다.  이를 위한 디렉토리를 생성해 줍니다.

  • sudo mkdir /var/lib/kafka
  • sudo mkdir /var/lib/kafka/data

이 디렉토리를 사용하게끔 properties 파일을 열어서 편집해 줘야 합니다.

  • sudo nano /opt/kafka/config/server.properties

log.dirs 값을 찾아서 아래와 같이 변경하고 파일을 저장합니다.

  • log.dirs=/var/lib/kafka/data

카프카가 사용할 디렉토리들의 권한을 설정해 줍니다.

  • sudo chown -R kafka:nogroup /opt/kafka
  • sudo chown -R kafka:nogroup /var/lib/kafka

컴퓨터가 재시동 될 때 카프카가 자동으로 실행되게끔 systemd 서비스로 등록합니다.  아래와 같이 kafka.service 파일을 생성합니다.

  • sudo nano /etc/systemd/system/kafka.service

파일 내용을 아래와 같이 작성합니다.

  • [Unit]
  • Description=High-available, distributed message broker
  • After=network.target
  • [Service]
  • User=kafka
  • ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
  • [Install]
  • WantedBy=multi-user.target

파일을 저장하고 서비스를 시작합니다.

  • sudo systemctl start kafka.service
  • sudo systemctl enable kafka.service

카프카가 제대로 동작하는지 살펴보기 위해 테스트 토픽을 추가해 보겠습니다.

  • /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

다음 명령을 터미널에 입력하면 현재까지 생성된 두 개의 토픽인 __consumer_offsets와 test를 출력할 것입니다.

  • /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181

이제 테스트 토픽에 메시지를 전송해 보겠습니다.

  • /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

이 명령을 입력하면 문자열 메시지 입력을 기다리는 > 문자가 표시됩니다.  아무 문자열이나 입력해 봅니다.  다른 터미널을 열어 메시지를 수신해 보겠습니다.

  • /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

방금 전송 터미널에 입력한 문자열이 나타날 것입니다.  전송 터미널로 돌아가서 다른 문자열을 입력하면 수신 터미널에 이이서 보여집니다.  이로써 카프카 서비스가 준비되었습니다.

 

zookeeper, server 서비스설정

 

리눅스 개행문자 오류 ^M 문제

해결

sed -i -e 's/\r$//' _DORSearcher.sh

sed -i -e 's/\r$//' _TMSAnalyzer.sh

 

문제 : _DORSearcher.sh: 149: exec:./wrapper: Permission denied

해결 : sudo chmod +x wrapper