웹사이트 검색

Ubuntu 14.04에 Apache Kafka를 설치하는 방법


소개

Apache Kafka는 대량의 실시간 데이터를 효율적으로 처리하도록 설계된 널리 사용되는 분산 메시지 브로커입니다. Kafka 클러스터는 확장성이 뛰어나고 내결함성이 있을 뿐만 아니라 ActiveMQ 및 RabbitMQ와 같은 다른 메시지 브로커에 비해 처리량이 훨씬 높습니다. 일반적으로 게시/구독 메시징 시스템으로 사용되지만 게시된 메시지에 대한 영구 저장소를 제공하기 때문에 많은 조직에서 로그 집계에도 사용합니다.

이 튜토리얼에서는 Ubuntu 14.04에 Apache Kafka 0.8.2.1을 설치하고 사용하는 방법을 배웁니다.

전제 조건

따라 하려면 다음이 필요합니다.

  • 우분투 14.04 물방울
  • 최소 4GB의 스왑 공간

1단계 - Kafka용 사용자 생성

Kafka는 네트워크를 통해 요청을 처리할 수 있으므로 전용 사용자를 생성해야 합니다. 이렇게 하면 Kafka 서버가 구성될 경우 Ubuntu 시스템의 손상이 최소화됩니다.

참고: Apache Kafka를 설정한 후 이 서버에서 다른 작업을 수행하려면 루트가 아닌 다른 사용자를 생성하는 것이 좋습니다.

루트로 useradd 명령을 사용하여 kafka라는 사용자를 만듭니다.

  1. useradd kafka -m

passwd를 사용하여 암호를 설정합니다.

  1. passwd kafka

Kafka의 종속성을 설치하는 데 필요한 권한을 갖도록 sudo 그룹에 추가합니다. 이것은 adduser 명령을 사용하여 수행할 수 있습니다.

  1. adduser kafka sudo

이제 Kafka 사용자가 준비되었습니다. su를 사용하여 로그인합니다.

  1. su - kafka

2단계 - 자바 설치

추가 패키지를 설치하기 전에 저장소에서 사용 가능한 최신 버전을 설치하도록 사용 가능한 패키지 목록을 업데이트하십시오.

  1. sudo apt-get update

Apache Kafka에는 Java 런타임 환경이 필요하므로 apt-get을 사용하여 default-jre 패키지를 설치합니다.

  1. sudo apt-get install default-jre

3단계 - ZooKeeper 설치

Apache ZooKeeper는 분산 시스템에 속한 노드의 구성 정보를 조정하고 동기화하기 위해 구축된 오픈 소스 서비스입니다. Kafka 클러스터는 무엇보다도 실패한 노드 감지 및 리더 선출과 같은 작업을 수행하기 위해 ZooKeeper에 의존합니다.

ZooKeeper 패키지는 Ubuntu의 기본 리포지토리에서 사용할 수 있으므로 apt-get을 사용하여 설치합니다.

  1. sudo apt-get install zookeeperd

설치가 완료되면 ZooKeeper가 자동으로 데몬으로 시작됩니다. 기본적으로 포트 2181에서 수신 대기합니다.

작동하는지 확인하려면 Telnet을 통해 연결하십시오.

  1. telnet localhost 2181

Telnet 프롬프트에서 ruok를 입력하고 ENTER를 누릅니다.

모든 것이 정상이면 ZooKeeper는 imok라고 말하고 텔넷 세션을 종료합니다.

4단계 - Kafka 바이너리 다운로드 및 추출

이제 Java와 ZooKeeper가 설치되었으므로 Kafka를 다운로드하고 추출할 차례입니다.

시작하려면 모든 다운로드를 저장할 Downloads라는 디렉터리를 만듭니다.

  1. mkdir -p ~/Downloads

wget을 사용하여 Kafka 바이너리를 다운로드합니다.

  1. wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz

kafka라는 디렉터리를 만들고 이 디렉터리로 변경합니다. 이것은 Kafka 설치의 기본 디렉토리가 됩니다.

  1. mkdir -p ~/kafka && cd ~/kafka

tar 명령을 사용하여 다운로드한 아카이브를 추출하십시오.

  1. tar -xvzf ~/Downloads/kafka.tgz --strip 1

5단계 - Kafka 서버 구성

다음 단계는 Kakfa 서버를 구성하는 것입니다.

vi를 사용하여 server.properties를 엽니다.

  1. vi ~/kafka/config/server.properties

기본적으로 Kafka는 주제 삭제를 허용하지 않습니다. 주제를 삭제할 수 있으려면 파일 끝에 다음 행을 추가하십시오.

delete.topic.enable = true

파일을 저장하고 vi를 종료합니다.

6단계 - Kafka 서버 시작

nohup을 사용하여 kafka-server-start.sh 스크립트를 실행하여 Kafka 서버(Kafka 브로커라고도 함)를 셸 세션과 독립적인 백그라운드 프로세스로 시작합니다.

  1. nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &

시작할 때까지 몇 초 동안 기다리십시오. ~/kafka/kafka.log에 다음 메시지가 표시되면 서버가 성공적으로 시작된 것입니다.


...

[2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)
[2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)

이제 포트 9092에서 수신 대기 중인 Kafka 서버가 있습니다.

7단계 - 설치 테스트

이제 Kafka 서버가 올바르게 작동하는지 확인하기 위해 "Hello World\ 메시지를 게시하고 사용하겠습니다.

메시지를 게시하려면 Kafka 프로듀서를 만들어야 합니다. kafka-console-producer.sh 스크립트를 사용하여 명령줄에서 쉽게 생성할 수 있습니다. 카프카 서버의 호스트 이름과 포트, 주제 이름을 인수로 예상합니다.

다음을 입력하여 TutorialTopic이라는 주제에 문자열 "Hello, World\를 게시합니다.

  1. echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

주제가 존재하지 않기 때문에 Kafka가 자동으로 생성합니다.

메시지를 사용하려면 kafka-console-consumer.sh 스크립트를 사용하여 Kafka 소비자를 만들 수 있습니다. 주제 이름과 함께 ZooKeeper 서버의 호스트 이름 및 포트를 인수로 예상합니다.

다음 명령은 게시한 주제의 메시지를 사용합니다. 소비자가 시작되기 전에 게시된 메시지를 소비하려고 하기 때문에 존재하는 --from-beginning 플래그 사용에 유의하십시오.

  1. ~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

구성 문제가 없으면 이제 출력에 Hello, World가 표시되어야 합니다.

스크립트는 계속 실행되며 더 많은 메시지가 주제에 게시될 때까지 기다립니다. 자유롭게 새 터미널을 열고 생산자를 시작하여 몇 가지 메시지를 더 게시하십시오. 소비자의 출력에서 즉시 모두 볼 수 있어야 합니다.

테스트를 마치면 CTRL+C를 눌러 소비자 스크립트를 중지합니다.

8단계 - KafkaT 설치(선택 사항)

KafkaT는 Kafka 클러스터에 대한 세부 정보를 보다 쉽게 확인하고 명령줄에서 몇 가지 관리 작업을 수행할 수 있도록 하는 Airbnb의 편리한 작은 도구입니다. Ruby gem이므로 사용하려면 Ruby가 필요합니다. 의존하는 다른 gem을 빌드하려면 build-essential 패키지도 필요합니다. apt-get을 사용하여 설치하십시오.

  1. sudo apt-get install ruby ruby-dev build-essential

이제 gem 명령을 사용하여 KafkaT를 설치할 수 있습니다.

  1. sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc

vi를 사용하여 .kafkatcfg라는 새 파일을 만듭니다.

  1. vi ~/.kafkatcfg

이것은 KafkaT가 Kafka 서버의 설치 및 로그 디렉토리를 결정하는 데 사용하는 구성 파일입니다. 또한 KafkaT가 ZooKeeper 인스턴스를 가리켜야 합니다. 따라서 다음 줄을 추가하십시오.

{
  "kafka_path": "~/kafka",
  "log_path": "/tmp/kafka-logs",
  "zk_path": "localhost:2181"
}

이제 KafkaT를 사용할 준비가 되었습니다. 먼저 모든 Kafka 파티션에 대한 세부 정보를 보는 데 사용하는 방법은 다음과 같습니다.

  1. kafkat partitions

다음 출력이 표시되어야 합니다.

Topic		    Partition	Leader		Replicas		ISRs	
TutorialTopic	0		      0		      [0]			[0]

KafkaT에 대한 자세한 내용은 GitHub 리포지토리를 참조하십시오.

9단계 - 다중 노드 클러스터 설정(선택 사항)

더 많은 Ubuntu 14.04 시스템을 사용하여 다중 브로커 클러스터를 생성하려면 각 새 시스템에서 1단계, 3단계, 4단계 및 5단계를 반복해야 합니다. 또한 각각의 server.properties 파일에서 다음과 같이 변경해야 합니다.

  • broker.id 속성의 값은 클러스터 전체에서 고유하도록 변경되어야 합니다.
  • 모든 노드가 동일한 ZooKeeper 인스턴스를 가리키도록 zookeeper.connect 속성 값을 변경해야 합니다.

클러스터에 대해 여러 ZooKeeper 인스턴스를 사용하려는 경우 각 노드의 zookeeper.connect 속성 값은 모든 ZooKeeper의 IP 주소와 포트 번호를 나열하는 쉼표로 구분된 동일한 문자열이어야 합니다. 인스턴스.

10단계 - Kafka 사용자 제한

모든 설치가 완료되었으므로 kafka 사용자의 관리자 권한을 제거할 수 있습니다. 그렇게 하기 전에 루트가 아닌 다른 sudo 사용자로 로그아웃했다가 다시 로그인하십시오. 이 자습서를 시작한 것과 동일한 셸 세션을 계속 실행 중인 경우 exit를 입력하면 됩니다.

kafka 사용자의 관리자 권한을 제거하려면 sudo 그룹에서 제거하십시오.

  1. sudo deluser kafka sudo

Kafka 서버의 보안을 더욱 강화하려면 passwd 명령을 사용하여 kafka 사용자의 암호를 잠급니다. 이렇게 하면 아무도 직접 로그인할 수 없습니다.

  1. sudo passwd kafka -l

이 시점에서 루트 또는 sudo 사용자만 다음 명령을 입력하여 kafka로 로그인할 수 있습니다.

  1. sudo su - kafka

나중에 잠금을 해제하려면 -u 옵션과 함께 passwd를 사용하십시오.

  1. sudo passwd kafka -u

결론

이제 Ubuntu 서버에서 실행되는 안전한 Apache Kafka가 있습니다. 문서를 사용하여 Kafka 생산자 및 소비자를 생성하여 프로젝트에서 쉽게 사용할 수 있습니다.