

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon MSK 클러스터에서 브로커 제거
<a name="msk-remove-broker"></a>

Amazon Managed Streaming for Apache Kafka(MSK) 프로비저닝 클러스터에서 브로커를 제거하려 할 때 이 Amazon MSK 작업을 사용합니다. 가용성 영향, 데이터 내구성 위험 또는 데이터 스트리밍 애플리케이션의 중단 없이 브로커 세트를 제거하여 클러스터의 스토리지 및 컴퓨팅 용량을 줄일 수 있습니다.

클러스터에 브로커를 더 추가하여 트래픽 증가를 처리하고 트래픽이 줄어들 때 브로커를 제거할 수 있습니다. 브로커 추가 및 제거 기능을 사용하여 클러스터 용량을 최대한 활용하고 MSK 인프라 비용을 최적화할 수 있습니다. 브로커를 제거하면 워크로드 요구 사항에 맞게 기존 클러스터 용량을 브로커 수준에서 제어하고 다른 클러스터로 마이그레이션하지 않아도 됩니다.

 AWS 콘솔, 명령줄 인터페이스(CLI), SDK 또는 CloudFormation 를 사용하여 프로비저닝된 클러스터의 브로커 수를 줄입니다. MSK는 파티션이 없는 브로커(카나리 주제 제외)를 선택하고 애플리케이션이 해당 브로커에 데이터를 생성하지 못하도록 방지하는 동시에 클러스터에서 해당 브로커를 안전하게 제거합니다.

클러스터의 스토리지 및 컴퓨팅을 줄이려면 가용 영역당 1개의 브로커를 제거해야 합니다. 예를 들어 단일 브로커 제거 작업에서 2개의 가용 영역 클러스터에서 2개의 브로커를 제거하거나 3개의 가용 영역 클러스터에서 3개의 브로커를 제거할 수 있습니다.

클러스터에서 브로커를 제거한 후 파티션을 재조정하는 방법은 [파티션 재할당](bestpractices.md#bestpractices-balance-cluster) 단원을 참조하세요.

인스턴스 크기에 관계없이 모든 M5 및 M7g 기반 MSK 프로비저닝 클러스터에서 브로커를 제거할 수 있습니다.

브로커 제거는 KRaft 모드 클러스터를 비롯하여 Kafka 버전 2.8.1 이상에서 가능합니다.

**Topics**
+ [브로커 파티션 제거](#msk-remove-broker-partitions)
+ [콘솔을 사용하여 브로커 제거](#msk-remove-broker-console)
+ [CLI를 사용하여 브로커 제거](#msk-remove-broker-cli)
+ [API를 사용하여 브로커 제거](#msk-remove-broker-api)

## 모든 파티션을 제거하여 브로커 제거 준비
<a name="msk-remove-broker-partitions"></a>

브로커 제거 프로세스를 시작하기 전에 먼저 제거하려는 브로커의 주제 `__amazon_msk_canary` 및 `__amazon_msk_canary_state`에 대한 파티션을 제외한 모든 파티션을 이동합니다. 이는 Amazon MSK가 클러스터 상태 및 진단 지표에 대해 생성하는 내부 주제입니다.

Kafka 관리자 API 또는 Cruise Control을 사용하여 클러스터에 유지하려는 다른 브로커로 파티션을 이동할 수 있습니다. [파티션 재할당](https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html#bestpractices-balance-cluster)을 참조하세요.

### 파티션을 제거하는 예제 프로세스
<a name="msk-remove-broker-partitions-example"></a>

이 섹션은 제거하려는 브로커에서 파티션을 제거하는 방법의 예제입니다. 각 AZ에 브로커 2개씩, 브로커 6개가 있는 클러스터가 있고 다음 네 가지 주제가 있다고 가정해 보겠습니다.
+ `__amazon_msk_canary`
+ `__consumer_offsets`
+ `__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2`
+ `msk-brk-rmv`

1. [클라이언트 머신 생성](https://docs.aws.amazon.com/msk/latest/developerguide/create-client-machine.html)에 설명된 대로 클라이언트 머신을 생성합니다.

1. 클라이언트 머신을 구성한 후 다음 명령을 실행하여 클러스터에서 사용 가능한 모든 주제를 나열합니다.

   ```
   ./bin/kafka-topics.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --list
   ```

   이 예제에서는 `__amazon_msk_canary`, `__consumer_offsets`, `__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2`, `msk-brk-rmv`의 4개의 주제 이름을 볼 수 있습니다.

1. 클라이언트 머신에서 `topics.json`이라는 json 파일을 생성하고 다음 코드 예제와 같이 모든 사용자 주제 이름을 추가합니다. 이 `__amazon_msk_canary` 주제는 필요할 때 자동으로 이동되는 서비스 관리형 주제이므로 주제 이름을 포함할 필요가 없습니다.

   ```
   {
   "topics": [
   {"topic": "msk-brk-rmv"},
   {"topic": "__consumer_offsets"},
   {"topic": "__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2"}
   ],
   "version":1
   }
   ```

1. 다음 명령을 실행하여 클러스터의 브로커 6개 중 브로커 3개의 브로커로만 파티션을 이동하는 제안을 생성합니다.

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --topics-to-move-json-file topics.json --broker-list 1,2,3 --generate
   ```

1. `reassignment-file.json`이라는 파일을 생성하고 위 명령에서 가져온 `proposed partition reassignment configuration`을 복사합니다.

1. 다음 명령을 실행하여 `reassignment-file.json`에서 지정한 파티션을 이동합니다.

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --execute
   ```

   출력 결과는 다음과 비슷합니다:

   ```
   Successfully started partition reassignments for morpheus-test-topic-1-0,test-topic-1-0
   ```

1. 다음 명령을 실행하여 모든 파티션이 이동했는지 확인합니다.

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --verify
   ```

   출력 결과는 다음과 비슷합니다. 요청한 주제의 모든 파티션이 성공적으로 재할당될 때까지 상태를 모니터링합니다.

   ```
   Status of partition reassignment:
   Reassignment of partition msk-brk-rmv-0 is completed.
   Reassignment of partition msk-brk-rmv-1 is completed.
   Reassignment of partition __consumer_offsets-0 is completed.
   Reassignment of partition __consumer_offsets-1 is completed.
   ```

1. 상태가 각 파티션에 대한 파티션 재할당이 완료되었음을 나타내면 5분 동안 `UserPartitionExists` 지표를 모니터링하여 파티션을 이동한 브로커에 대해 `0`이 표시되는지 확인합니다. 이 값을 확인한 후 클러스터에서 브로커를 제거할 수 있습니다.

## AWS Management Console을 사용하여 브로커 제거
<a name="msk-remove-broker-console"></a>

**AWS Management Console을 사용하여 브로커를 제거하려면**

1. [https://console.aws.amazon.com/msk/](https://console.aws.amazon.com/msk/)에서 Amazon MSK 콘솔을 엽니다.

1. 제거하려는 브로커가 포함된 MSK 클러스터를 선택합니다.

1. 클러스터 세부 정보 페이지에서 **작업** 버튼을 선택하고 **브로커 수 편집** 옵션을 선택합니다.

1. 가용 영역당 클러스터에 보유할 브로커 수를 입력합니다. 콘솔에는 제거할 가용 영역의 브로커 수가 요약되어 있습니다. 이 값이 원하는 수치인지 확인합니다.

1. **변경 사항 저장**을 선택합니다.

실수로 브로커가 제거되지 않도록 콘솔에서 브로커를 삭제할지 확인하도록 요청하는 메시지가 표시됩니다.

## AWS CLI를 사용하여 브로커 제거
<a name="msk-remove-broker-cli"></a>

다음 명령을 실행하여 `ClusterArn`을 클러스터 생성 후 받은 Amazon 리소스 이름(ARN)으로 바꿉니다. 클러스터에 대한 ARN이 없는 경우, 모든 클러스터를 나열하여 찾을 수 있습니다. 자세한 내용은 [Amazon ECS 클러스터 나열](https://docs.aws.amazon.com/msk/latest/developerguide/msk-list-clusters.html)을 참조하세요. `Current-Cluster-Version`을 클러스터의 버전으로 바꿉니다.

**중요**  
클러스터 버전은 단순한 정수가 아닙니다. 클러스터의 현재 버전을 찾으려면 [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) 작업 또는 [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 명령을 사용합니다. 버전의 예를 들면 `KTVPDKIKX0DER`입니다.

*Target-Number-of-Brokers* 파라미터는 이 작업을 성공적으로 완료하여 클러스터에 포함하고자 하는 총 브로커 노드 수를 나타냅니다. *Target-Number-of-Brokers*에 지정하는 값은 클러스터의 현재 브로커 수보다 작은 정수여야 합니다. 또한 가용 영역 수의 배수여야 합니다.

```
aws kafka update-broker-count --cluster-arn ClusterArn --current-version Current-Cluster-Version --target-number-of-broker-nodes Target-Number-of-Brokers
```

이 `update-broker-count` 작업의 출력은 다음 JSON과 같습니다.

```
{
"ClusterOperationInfo": {
"ClientRequestId": "c0b7af47-8591-45b5-9c0c-909a1a2c99ea",
        "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
        "CreationTime": "2019-09-25T23:48:04.794Z",
        "OperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef",
        "OperationState": "UPDATE_COMPLETE",
        "OperationType": "DECREASE_BROKER_COUNT",
        "SourceClusterInfo": {
"NumberOfBrokerNodes": 12
        },
        "TargetClusterInfo": {
"NumberOfBrokerNodes": 9
        }
    }
}
```

이 출력에서 `OperationType`은 `DECREASE_BROKER_COUNT`입니다. `OperationState` 값이 `UPDATE_IN_PROGRESS`인 경우, 잠시 기다린 다음 `describe-cluster-operation` 명령을 다시 실행합니다.

## AWS API를 사용하여 브로커 제거
<a name="msk-remove-broker-api"></a>

API를 사용하여 클러스터에서 브로커를 제거하려면 **Amazon Managed Streaming for Apache Kafka API 참조의 [UpdateBrokerCount](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-nodes-count.html#clusters-clusterarn-nodes-count-url)를 참조하세요.