$ cd kafka_2.13-4.0.0/config $ vi server.properties
... # kafka 노드를 식별하는 ID node.id=1 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:9092,CONTROLLER://:9093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:9092,CONTROLLER://{EC2 Public IP}:9093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-1 ...
$ cp server.properties server2.properties $ cp server.properties server3.properties
... # kafka 노드를 식별하는 ID node.id=2 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:19092,CONTROLLER://:19093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:19092,CONTROLLER://{EC2 Public IP}:19093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-2 ...
... # kafka 노드를 식별하는 ID node.id=3 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:29092,CONTROLLER://:29093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:29092,CONTROLLER://{EC2 Public IP}:29093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-3 ...
cd .. # kafka 디렉터리로 이동 # kafka 종료하기 $ bin/kafka-server-stop.sh # 처음 실행하는 kafka 노드는 아래 명령어로 실행 $ KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)" $ KAFKA_CONTROLLER_ID="$(bin/kafka-storage.sh random-uuid)" $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server.properties \ --initial-controllers "1@localhost:9093:$KAFKA_CONTROLLER_ID" # 추가로 연동시킬 kafka 노드는 아래 명령어로 실행 # 주의 : server.properties가 아니라 server2.properties를 사용해야 한다. $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server2.properties \ --no-initial-controllers # 추가로 연동시킬 kafka 노드는 아래 명령어로 실행 # 주의 : server.properties가 아니라 server3.properties를 사용해야 한다. $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server3.properties \ --no-initial-controllers
# kafka 노드 3대 실행하기 $ bin/kafka-server-start.sh config/server.properties $ bin/kafka-server-start.sh config/server2.properties $ bin/kafka-server-start.sh config/server3.properties
# kafka 노드들의 브로커 실행 확인 $ lsof -i:9092 # 노드 1의 브로커 $ lsof -i:19092 # 노드 2의 브로커 $ lsof -i:29092 # 노드 3의 브로커 # kafka 노드들의 컨트롤러 실행 확인 $ lsof -i:9093 # 노드 1의 컨트롤러 $ lsof -i:19093 # 노드 2의 컨트롤러 $ lsof -i:29093 # 노드 3의 컨트롤러
$ bin/kafka-metadata-quorum.sh \ --command-config config/server2.properties \ --bootstrap-server localhost:9092 \ add-controller $ bin/kafka-metadata-quorum.sh \ --command-config config/server3.properties \ --bootstrap-server localhost:9092 \ add-controller
$ bin/kafka-metadata-quorum.sh \ --bootstrap-server localhost:9092 describe \ --status

CurrentVoters에 3개의 컨트롤러 정보가 찍히면 클러스터에 3개의 컨트롤러가 정상적으로 잘 등록된 것이다.