카프카는 커멘드 라인 툴을 지원하는데,카프카 브로커 운영에 가장 많이 접하는 도구이다.
브로커를 운영할 때 다양한 명령어를 내릴 수 있다.
커멘드 라인 툴을 사용하는 방법은 SSH를 통하여 사용하는 방법과 카프카를 사용하기 위해 열어논 포트로 접속할 수 있는 컴퓨터로 접속 하여 사용하는 방법이 있다.
카프카 라인 툴은 토픽(Topic)과 관련된 명령을 실행 할 수 있다.
카프카에서 데이터를 구분하는 가장 기본적인 단위이다.
카프카 클러스터에는 여러개의 토픽이 존재할 수 있다.
토픽에는 파티션(Partition)이 존재 하는데, 파티션의 최소 1개부터 시작한다.
파티션은 한번에 처리할 수 있는 데이터 양을 늘릴 수 있고, 토픽 내부의 파티션을 통해 데이터를 종류 별로 나누어 처리하는 것도 가능하다.
일반적으로 2개의 방법이 존재한다.
1. 카프카 컨슈머, 프로듀서가 카프카 브로커에 생성하지 않은 토픽에 대한 데이터를 요청할 때 생성된다.
2. 커멘드 라인 툴을 사용하여 직접 명시하여 생성하는 방법이다.
토픽을 생성 할 때는 유지보수를 위하여 어떠한 역할, 옵션을 지정하였는지 명시적으로 생성하는 것이 좋다.
토픽마다 처리해야하는 데이터 특성이 다르기 때문이다.
kafka-topics.sh를 사용하여 토픽 관련 명령을 실행 할 수 있다.
토픽 생성은 --create 옵션을 사용하여 생성한다.
bin/kafka-topics.sh \
--create \
--bootstrap-server {aws IP}:9092 \
--topic hello.kafka
마지막 줄에는 --topic 옵션을 통해 토픽의 이름을 지정한다. 내부 데이터가 어떻게 정의 되어 있는지 유추할 수 있도록 명시를 해주는 것이 좋다.
이처럼 이름만으로 토픽을 생성할 수도 있으며, 위 와 같이 설정을 하면 파티션 개수, 복제 개수 등과 같은 옵션들은 기본 값으로 처리가 된다.
옵션들을 지정하여 처리하기 위해서 하단의 예시 처럼 설정 할 수 있다.
bin/kafka-topics.sh \
--create \
--bootstrap-server {aws IP}:9092 \
--partitions 3 \
--replication-factor 1 \
--config retention.ms=172800000 \
--topic hello.kafka.2
--partitions 옵션은 파티션 개수를 지정하는 옵션으로 최소 개수는 1개이다.
해당 옵션을 사용하지 않을 경우에는 config/server.properties에서 있는 num.partitions 파티션 옵션 값을 따라 생성된다.
--replication-factor 옵션은 토픽의 파티션을 복제할 복제 개수를 의미한다. 1은 복제를 하지 않는다는 뜻이고, 2이면 1개의 복제본을 사용한다는 의미이다. 해당 옵션은 브로커의 개수에 따라 움직인다.
파티션의 데이터는 각 브로커 마다 저장되는데, 한 개의 브로커에 장애가 발생 하더라도 나머지 한개의 브로커에 저장된 데이터를 사용하여 데이터 처리를 지속적으로 할 수 있다.
복제 개수의 최소 설정은 1이고 최대 설정은 카프카 클러스터의 브로커 개수이다.
해당 옵션을 지정하지 않을 시 카프카 브로커 설정에 있는 default.replication.factor 옵션값에 따라 생성된다.
--config를 통해 kafka-topics.sh 명령에 포함되지 않은 추가적인 설정을 할 수 있다.
retention.ms는 토픽의 데이터를 유지하는 기간을 뜻한다.
bin/kafka-topics.sh --bootstrap-server {aws IP}:9092 --list
bin/kafka-topics.sh --bootstrap-server {aws IP}:9092 --describe --topic hello.kafka.2
--describe 옵션을 통하여 토픽의 상태를 확인 할 수 있다., 토픽이 가진 파티션의 리더가 현재 어디 브로커에 존재 하는 지도 확인 할 수 있다.
해당 명령은 토픽의 리더 파티션 쏠림 현상(클러스터 부하가 특정 브로커로 몰림)을 확인 할 때 유용하게 사용된다.
토픽 옵션을 수정하기 위해서는 kafka-topics.sh, kafka-config.sh 두 개를 사용한다.
파티션 개수를 변경하기 위해서는 kafka-topics.sh를 사용하고, 토픽 삭제 정책 리텐션 기간을 변경하려면 kafka-config.sh를 사용하면 된다.
bin/kafka-topics.sh --bootstrap-server 54.177.151.126:9092 \
--topic hello.kafka \
--alter \
--partitions 4
bin/kafka-topics.sh --bootstrap-server 54.177.151.126:9092 \
> --topic hello.kafka \
> --describe
--alter 옵션을 사용하여 수정을 할 수 있으며 하단의 옵션(--partitions)을 통해 파티션을 변경 할 수 있다.
bin/kafka-configs.sh --bootstrap-server 54.177.151.126:9092 \
--entity-type topics \
--entity-name hello.kafka \
--alter --add-config retention.ms=86400000
bin/kafka-configs.sh --bootstrap-server 54.177.151.126:9092 \
--entity-type topics \
--entity-name hello.kafka \
--describe
retention.ms를 수정하기 위해서는 kafka-configs.sh를 사용하며 옵션으로는 --alter, --add-config를 사용한다.
--add-config 옵션을 사용하면 이미 존재하는 설정 값은 변경하고, 존재하지 않는 설정 값은 신규로 추가한다.
kafka-configs.sh 명령과 --describe 옵션을 통해 변경사항을 확인 할 수 있다.