10.2. Kafka 클러스터 스케일링
Kafka 클러스터에서 브로커를 추가하거나 제거할 수 있습니다. Zoo Cryostat 클러스터에서 노드를 추가하거나 제거할 수도 있습니다.
브로커를 추가하거나 제거할 때 kafka-reassign-partitions.sh
를 사용하여 파티션을 할당할 수 있습니다.
또한 Cruise Control을 사용하여 Kafka 클러스터 재조정 시 브로커 수에 대한 변경 사항을 통합할 수도 있습니다. 새 브로커를 설치하고 리밸런스에 포함할 수 있습니다. 제거하기 전에 리밸런스에서 브로커를 제외하는 리밸런스를 수행할 수 있습니다. 자세한 내용은 14장. 클러스터 재조정에 Cruise Control 사용의 내용을 참조하십시오.
10.2.1. Kafka 클러스터에서 브로커 추가 및 제거
주제의 처리량을 늘리는 기본 방법은 해당 항목의 파티션 수를 늘리는 것입니다. 파티션을 사용하면 해당 항목에 대한 로드를 클러스터의 브로커 간에 공유할 수 있습니다. 브로커를 리소스로 제한하면 (일반적으로 I/O) 더 많은 파티션을 사용하면 처리량이 증가되지 않습니다. 대신 클러스터에 브로커를 추가해야 합니다.
클러스터에 브로커를 추가하면 AMQ Streams에서 자동으로 파티션을 할당하지 않습니다. 기존 브로커에서 새 브로커로 이동할 파티션을 결정해야 합니다. 모든 브로커 간에 파티션을 재배포하면 각 브로커는 리소스 사용률이 작아야 합니다.
클러스터에서 브로커를 제거하기 전에 파티션이 할당되지 않았는지 확인해야 합니다. 브로커의 각 파티션에 대해 어떤 남아 있는 브로커가 해제되는지 결정해야합니다. 브로커에 파티션이 할당되지 않으면 이를 중지할 수 있습니다.
10.2.2. 파티션 재할당
kafka-reassign-partitions.sh
유틸리티는 파티션을 다른 브로커에 다시 할당하는 데 사용됩니다.
여기에는 세 가지 모드가 있습니다.
--generate
- 주제 및 브로커 세트를 가져와서 재할당 JSON 파일을 생성하여 해당 브로커에 해당 주제의 파티션이 할당됩니다. JSON 파일을 다시 할당 하는 쉬운 방법이지만 전체 주제에서 작동하므로 사용이 항상 적합한 것은 아닙니다.
--execute
- JSON 파일을 다시 할당 하여 클러스터의 파티션 및 브로커에 적용합니다. 파티션을 얻는 브로커는 파티션 리더의 팔로우가 될 것입니다. 지정된 파티션의 경우 새 브로커가 ISR에 가입하고 가입하면 이전 브로커가 팔로워가 되는 것을 중지하고 복제본을 삭제합니다.
--verify
-
--execute
단계와 동일한 재할당 JSON 파일을 사용하여--verify
는 파일의 모든 파티션이 의도한 브로커로 이동되었는지 확인합니다. 재할당이 완료되면 적용되는 모든 제한도 제거됩니다. 제거되지 않으면 제한은 재할당이 완료된 후에도 클러스터에 계속 영향을 미칩니다.
지정된 시간에 클러스터에서 하나의 재할당을 실행할 수 있으며 실행 중인 재할당을 취소할 수 없습니다. 재할당을 취소해야 하는 경우 재할당이 완료될 때까지 기다린 다음 다른 재할당을 수행하여 첫 번째 효과를 되돌려야 합니다. kafka-reassign-partitions.sh
는 이 재버전에 대한 재할당 JSON을 출력 출력의 일부로 출력합니다. 매우 큰 재할당은 진행 중인 재할당을 중지해야 하는 경우 다수의 작은 재할당으로 분류되어야 합니다.
10.2.2.1. JSON 파일 다시 할당
JSON 파일의 재할당 에는 특정 구조가 있습니다.
{
"version": 1,
"partitions": [
<PartitionObjects>
]
}
여기서 & lt; CryostatObjects >는 다음과 같이 쉼표로 구분된 오브젝트 목록입니다.
{ "topic": <TopicName>, "partition": <Partition>, "replicas": [ <AssignedBrokerIds> ], "log_dirs": [<LogDirs>] }
"log_dirs"
속성은 선택 사항이며 파티션을 특정 로그 디렉터리로 이동하는 데 사용됩니다.
다음은 주제 주제( a
, 파티션 4
를 브로커 2 ,4
및 7
에 할당) 및 주제 주제-b
파티션
를 브로커 2
1
,5
및 7
에 할당하는 예제 JSON 파일입니다.
{ "version": 1, "partitions": [ { "topic": "topic-a", "partition": 4, "replicas": [2,4,7] }, { "topic": "topic-b", "partition": 2, "replicas": [1,5,7] } ] }
JSON에 포함되지 않은 파티션은 변경되지 않습니다.
10.2.2.2. JSON 파일 다시 할당 생성
지정된 주제 집합에 대한 모든 파티션을 지정된 브로커 세트에 할당하는 가장 쉬운 방법은 kafka-reassign-partitions.sh --generate
명령을 사용하여 JSON 파일을 다시 할당하는 것입니다.
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_address> --topics-to-move-json-file <topics_file> --broker-list <broker_list> --generate
& lt;topics_file
>은 이동할 주제를 나열하는 JSON 파일입니다. 다음과 같은 구조가 있습니다.
{
"version": 1,
"topics": [
<topic_objects>
]
}
여기서 <topic_objects >는 다음과 같이 쉼표로 구분된 오브젝트 목록입니다.
{
"topic": <TopicName>
}
예를 들어, topic-a
및 topic-b
의 모든 파티션을 브로커 4
및 7
로 이동하려면
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --topics-to-move-json-file topics-to-be-moved.json --broker-list 4,7 --generate
topic-to-be-moved.json
의 내용은 다음과 같습니다.
{ "version": 1, "topics": [ { "topic": "topic-a"}, { "topic": "topic-b"} ] }
10.2.2.3. 수동으로 JSON 파일 재할당 생성
특정 파티션을 이동하려는 경우 재할당 JSON 파일을 수동으로 생성할 수 있습니다.
10.2.3. Reassignment throttles
파티션 재할당은 브로커 간에 많은 데이터를 이동해야 할 수 있으므로 속도가 느린 프로세스일 수 있습니다. 이로 인해 클라이언트에 부정적인 영향을 미치지 않도록 하려면 재할당을 중단할 수 있습니다. 스로틀을 사용하면 재할당 시간이 더 오래 걸릴 수 있습니다. 스로틀이 너무 낮으면 새로 할당된 브로커는 게시되는 레코드를 유지할 수 없으며 재할당이 완료되지 않습니다. 스로틀이 너무 높으면 고객에게 영향을 미칩니다. 예를 들어 프로듀서의 경우 이는 승인을 기다리는 일반 대기 시간보다 높을 수 있습니다. 소비자의 경우 폴링 간에 대기 시간이 길기 때문에 처리량이 저하될 수 있습니다.
10.2.4. Kafka 클러스터 확장
다음 절차에서는 Kafka 클러스터의 브로커 수를 늘리는 방법을 설명합니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
- AMQ 브로커가 설치된 새 머신입니다.
- 확대된 클러스터의 브로커에 파티션을 다시 할당하는 방법에 대한 JSON 파일을 다시 할당합니다.
프로세스
-
다른 브로커에서 아직 사용하지 않는 숫자여야 하는
broker.id
를 제외하고 클러스터의 다른 브로커와 동일한 설정을 사용하여 새 브로커에 대한 구성 파일을 생성합니다. 이전 단계에서 생성한 구성 파일을 인수로
kafka-server-start.sh
스크립트에 전달하는 새 Kafka 브로커를 시작합니다.su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Kafka 브로커가 실행 중인지 확인합니다.
jcmd | grep Kafka
- 각 새 브로커에 대해 위의 단계를 반복합니다.
kafka-reassign-partitions.sh
명령줄 도구를 사용하여 파티션 재할당을 실행합니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_address> --reassignment-json-file <reassignment_json_file> --execute
복제를 제한하려면 브로어링된 속도가 초당 바이트 단위로
--throttle
옵션을 전달할 수도 있습니다. 예를 들면 다음과 같습니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 5000000 --execute
이 명령은 두 개의 재할당 JSON 오브젝트를 출력합니다. 첫 번째는 이동 중인 파티션에 대한 현재 할당을 기록합니다. 나중에 다시 할당해야 하는 경우 이 값을 파일에 저장해야 합니다. 두 번째 JSON 오브젝트는 재할당 JSON 파일에 전달된 대상 재할당입니다.
재할당하는 동안 throttle을 변경해야하는 경우 다른 제한 속도로 동일한 명령줄을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 10000000 --execute
kafka-reassign-partitions.sh
명령줄 도구를 사용하여 재할당이 완료되었는지 주기적으로 확인합니다. 이 명령은 이전 단계와 동일하지만--execute
옵션 대신--verify
옵션을 사용합니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_address> --reassignment-json-file <reassignment_json_file> --verify
예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --verify
-
--verify
명령이 이동 중인 각 파티션을 완료된 것으로 보고하면 재할당이 완료되었습니다. 이 마지막--verify
는 또한 reassignment throttles를 제거하는 효과가 있습니다. 원래 브로커로 할당을 되돌리기 위해 JSON을 저장한 경우 revert 파일을 삭제할 수 있습니다.
10.2.5. Kafka 클러스터 축소
다음 절차에서는 Kafka 클러스터의 브로커 수를 줄이는 방법을 설명합니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
- 브로커가 제거되면 파티션의 브로커를 다시 할당하는 방법에 대한 JSON 파일을 클러스터의 브로커에 다시 할당합니다.
프로세스
kafka-reassign-partitions.sh
명령줄 도구를 사용하여 파티션 재할당을 실행합니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_address> --reassignment-json-file <reassignment_json_file> --execute
복제를 제한하려면 브로어링된 속도가 초당 바이트 단위로
--throttle
옵션을 전달할 수도 있습니다. 예를 들면 다음과 같습니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 5000000 --execute
이 명령은 두 개의 재할당 JSON 오브젝트를 출력합니다. 첫 번째는 이동 중인 파티션에 대한 현재 할당을 기록합니다. 나중에 다시 할당해야 하는 경우 이 값을 파일에 저장해야 합니다. 두 번째 JSON 오브젝트는 재할당 JSON 파일에 전달된 대상 재할당입니다.
재할당하는 동안 throttle을 변경해야하는 경우 다른 제한 속도로 동일한 명령줄을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 10000000 --execute
kafka-reassign-partitions.sh
명령줄 도구를 사용하여 재할당이 완료되었는지 주기적으로 확인합니다. 이 명령은 이전 단계와 동일하지만--execute
옵션 대신--verify
옵션을 사용합니다./opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_address> --reassignment-json-file <reassignment_json_file> --verify
예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --verify
-
--verify
명령이 이동 중인 각 파티션을 완료된 것으로 보고하면 재할당이 완료되었습니다. 이 마지막--verify
는 또한 reassignment throttles를 제거하는 효과가 있습니다. 원래 브로커로 할당을 되돌리기 위해 JSON을 저장한 경우 revert 파일을 삭제할 수 있습니다. 제거 중인 각 브로커에 해당 로그에 라이브 파티션이 없는지 확인합니다(
log.dirs
).ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'
로그 디렉터리가 정규식과 일치하지 않는 경우
\.[a-z0-9]-delete$
, 활성 파티션이 여전히 존재합니다. 활성 파티션이 있는 경우 재할당이 완료되었는지 또는 재할당 JSON 파일의 구성을 확인합니다. 재할당을 다시 실행할 수 있습니다. 다음 단계로 이동하기 전에 활성 파티션이 없는지 확인합니다.브로커를 중지합니다.
su - kafka /opt/kafka/bin/kafka-server-stop.sh
Kafka 브로커가 중지되었는지 확인합니다.
jcmd | grep kafka
10.2.6. Zoo Cryostat 클러스터 확장
다음 절차에서는 Zoo Cryostat 클러스터에 서버(노드)를 추가하는 방법을 설명합니다. Zoo Cryostat의 동적 재구성 기능은 확장 프로세스 중에 안정적인 Zoo Cryostat 클러스터를 유지합니다.
사전 요구 사항
-
동적 재구성은 Zoo Cryostat 구성 파일(
reconfigEnabled=true
)에서 활성화됩니다. - Zookeeper 인증이 활성화되고 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.
프로세스
한 번에 하나씩 각 Zoo Cryostat 서버에 대해 다음 단계를 수행합니다.
- 3.1절. “다중 노드 Zoo Cryostat 클러스터 실행” 에 설명된 대로 Zoo Cryostat 클러스터에 서버를 추가한 다음 Zoo Cryostat를 시작합니다.
- 새 서버의 IP 주소 및 구성된 액세스 포트를 확인합니다.
서버에
대한 Zookeeper-shell
세션을 시작합니다. 클러스터에 액세스할 수 있는 머신에서 다음 명령을 실행합니다(액세스 권한이 있는 경우 Zoo Cryostat 노드 또는 로컬 시스템 중 하나일 수 있습니다).su - kafka /opt/kafka/bin/zookeeper-shell.sh <ip-address>:<zk-port>
쉘 세션에서 Zoo Cryostat 노드가 실행 중인 상태에서 다음 행을 입력하여 새 서버를 쿼럼에 투표 멤버로 추가합니다.
reconfig -add server.<positive-id> = <address1>:<port1>:<port2>[:role];[<client-port-address>:]<client-port>
예를 들면 다음과 같습니다.
reconfig -add server.4=172.17.0.4:2888:3888:participant;172.17.0.4:2181
여기서 &
lt;positive-id&
gt;는 새로운 서버 ID4
입니다.두 포트의 경우 <
port1
> 2888 은 Zoo Cryostat 서버 간 통신용이며 <port2
> 3888 은 리더 선택을 위한 것입니다.새 구성은 Zoo Cryostat 클러스터의 다른 서버로 전파됩니다. 새 서버는 이제 쿼럼의 전체 멤버입니다.
- 추가하려는 다른 서버에 대해 1-4단계를 반복합니다.
10.2.7. Zoo Cryostat 클러스터 축소
다음 절차에서는 Zoo Cryostat 클러스터에서 서버(노드)를 제거하는 방법을 설명합니다. Zoo Cryostat의 동적 재구성 기능은 축소 프로세스 중에 안정적인 Zoo Cryostat 클러스터를 유지합니다.
사전 요구 사항
-
동적 재구성은 Zoo Cryostat 구성 파일(
reconfigEnabled=true
)에서 활성화됩니다. - Zookeeper 인증이 활성화되고 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.
프로세스
한 번에 하나씩 각 Zoo Cryostat 서버에 대해 다음 단계를 수행합니다.
축소 후 유지됩니다 (예: 서버 1).
참고Zoo Cryostat 클러스터에 대해 구성된 인증 메커니즘을 사용하여 서버에 액세스합니다.
서버 5와 같이 서버를 제거합니다.
reconfig -remove 5
- 삭제한 서버를 비활성화합니다.
- 클러스터 크기를 줄이기 위해 1~3단계를 반복합니다.
추가 리소스
- Zoo Cryostat 문서에서 서버 제거