12.2. Kafka 클러스터 스케일링


Kafka 클러스터에서 브로커를 추가하거나 제거할 수 있습니다. ZooKeeper 클러스터에서 노드를 추가하거나 제거할 수도 있습니다.

브로커를 추가하거나 제거할 때 kafka-reassign-partitions.sh 를 사용하여 파티션을 할당할 수 있습니다.

Kafka 클러스터를 재조정할 때 Cruise Control을 사용하여 브로커 수에 대한 변경 사항을 통합할 수도 있습니다. 새 브로커를 설치하고 리밸런스에 포함시킬 수 있습니다. 제거하기 전에 리밸런스에서 브로커를 제외하는 리밸런스를 수행할 수 있습니다. 자세한 내용은 14장. 클러스터 재조정에 Cruise Control 사용의 내용을 참조하십시오.

12.2.1. Kafka 클러스터에서 브로커 추가 및 제거

항목에 대한 처리량을 높이는 주요 방법은 해당 주제의 파티션 수를 늘리는 것입니다. 파티션을 사용하면 클러스터의 브로커 간에 해당 항목에 대한 로드를 공유할 수 있습니다. 브로커가 리소스(일반적으로 I/O)로 제한되면 더 많은 파티션을 사용하면 처리량이 증가하지 않습니다. 대신 클러스터에 브로커를 추가해야 합니다.

클러스터에 추가 브로커를 추가하면 AMQ Streams에서 파티션을 자동으로 할당하지 않습니다. 기존 브로커에서 새 브로커로 이동할 파티션을 결정해야 합니다. 모든 브로커 간에 파티션을 재배포하면 각 브로커에 리소스 사용률이 낮아야 합니다.

클러스터에서 브로커를 제거하기 전에 파티션에 할당되지 않았는지 확인해야 합니다. 브로커의 각 파티션에 대해 어떤 나머지 브로커가 책임이 있는지 결정해야합니다. 브로커에 할당된 파티션이 없으면 중지할 수 있습니다.

12.2.2. 파티션 재할당

kafka-reassign-partitions.sh 유틸리티는 다른 브로커에 파티션을 다시 할당하는 데 사용됩니다.

세 가지 모드가 있습니다.

--generate
일련의 주제와 브로커를 가져와서 JSON 파일을 다시 할당하면 해당 주제의 파티션이 해당 브로커에 할당됩니다. 이 JSON 파일을 쉽게 생성할 수 있지만 전체 주제에서 작동하며 사용이 항상 적합한 것은 아닙니다.
--execute
JSON 파일을 다시 할당하고 클러스터의 파티션과 브로커에 적용합니다. 파티션을 얻는 브로커는 파티션 리더의 전구자가됩니다. 지정된 파티션에 대해 새 브로커가 ISR에 가입하면 이전 브로커가 후속 조치가되고 해당 복제본을 삭제합니다.
--verify
--execute 단계와 동일한 재 할당 JSON 파일을 사용하여 --verify 는 파일의 모든 파티션이 의도된 브로커로 이동되었는지 확인합니다. 재할당이 완료되면 적용되는 모든 목축 도 제거됩니다. 제거되지 않는 한 throttles는 재할당이 완료된 후에도 클러스터에 계속 영향을 미칩니다.

지정된 시간에 클러스터에서 하나의 재할당을 실행할 수 있으며 실행 중인 재할당을 취소할 수 없습니다. 재할당을 취소해야하는 경우 작업이 완료될 때까지 기다린 다음 다른 재할당을 수행하여 첫 번째 할당의 영향을 취소해야 합니다. kafka-reassign-partitions.sh 는 출력의 일부로 이 reassignment JSON을 출력합니다. 매우 큰 reassignment는 in-progress reassignment를 중지해야 하는 경우 다수의 작은 재할당으로 분류해야 합니다.

12.2.2.1. JSON 파일 다시 할당

reassignment JSON 파일의 구조는 다음과 같습니다.

{
  "version": 1,
  "partitions": [
    <PartitionObjects>
  ]
}

여기서 <ECDHEObjects >는 다음과 같이 쉼표로 구분된 오브젝트 목록입니다.

{
  "topic": <TopicName>,
  "partition": <Partition>,
  "replicas": [ <AssignedBrokerIds> ],
  "log_dirs": [<LogDirs>]
}

"log_dirs" 속성은 선택 사항이며 파티션을 특정 로그 디렉터리로 이동하는 데 사용됩니다.

다음은 주제 주제 ( a)를 할당하고 4 브로커 2, 4 7 주제를 할당하고, topic-b 파티션 2 를 브로커 1,57 에 할당하는 예제입니다.

{
  "version": 1,
  "partitions": [
    {
      "topic": "topic-a",
      "partition": 4,
      "replicas": [2,4,7]
    },
    {
      "topic": "topic-b",
      "partition": 2,
      "replicas": [1,5,7]
    }
  ]
}

JSON에 포함되지 않은 파티션은 변경되지 않습니다.

12.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-atopic-b 의 모든 파티션을 브로커 47로 이동하려면

/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

where topics-to-be-moved.json has contents:

{
  "version": 1,
  "topics": [
    { "topic": "topic-a"},
    { "topic": "topic-b"}
  ]
}

12.2.2.3. 수동으로 JSON 파일 다시 할당 생성

특정 파티션을 이동하려면 JSON 파일을 수동으로 생성할 수 있습니다.

12.2.3. reassignment throttles

브로커 간에 많은 데이터를 이동해야 할 수 있으므로 파티션을 재할당하는 것은 느린 프로세스일 수 있습니다. 이러한 문제가 클라이언트에 부정적인 영향을 미치지 않도록 하려면 재할당을 줄일 수 있습니다. 목축을 사용하면 재할당 시간이 더 오래 걸릴 수 있습니다. 목축이 너무 작으면 새로 할당된 브로커는 게시중인 레코드를 계속 유지할 수 없으며 재할당은 완료되지 않습니다. 목이 너무 높으면 고객은 영향을 받습니다. 예를 들어 생산자의 경우 이는 일반 대기 시간 승인 대기 시간보다 높은 것으로 나타날 수 있습니다. 소비자의 경우 폴링 간 대기 시간이 길기 때문에 발생하는 처리량이 감소한 것으로 나타날 수 있습니다.

12.2.4. Kafka 클러스터 확장

다음 절차에서는 Kafka 클러스터에서 브로커 수를 늘리는 방법을 설명합니다.

사전 요구 사항

  • 기존 Kafka 클러스터입니다.
  • AMQ 브로커가 설치된 새 시스템 .
  • 클러스터의 브로커에 파티션을 다시 할당하는 방법에 대한 JSON 파일을 지정합니다.

절차

  1. 다른 브로커에서 아직 사용하지 않는 숫자여야 하는 broker.id 를 제외하고 클러스터의 다른 브로커와 동일한 설정을 사용하여 새 브로커에 대한 구성 파일을 생성합니다.
  2. 이전 단계에서 생성한 구성 파일을 kafka-server-start.sh 스크립트에 인수로 전달하는 새 Kafka 브로커를 시작합니다.

    su - kafka
    /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
  3. Kafka 브로커가 실행 중인지 확인합니다.

    jcmd | grep Kafka
  4. 각 새 브로커에 대해 위의 단계를 반복합니다.
  5. 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

    이 명령은 두 개의 reassignment JSON 오브젝트를 출력합니다. 첫 번째는 이동 중인 파티션에 대한 현재 할당을 기록합니다. 나중에 다시 할당해야 하는 경우 파일에 저장해야 합니다. 두 번째 JSON 오브젝트는 reassignment JSON 파일에서 전달된 대상 재할당입니다.

  6. 다시 할당하는 동안 throttle을 변경해야 하는 경우 동일한 명령줄을 다른 제한 비율로 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    /opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 10000000 --execute
  7. 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
  8. --verify 명령이 이동 중인 각 파티션을 완료로 보고하면 재할당이 완료됩니다. 이 마지막 --verify 는 또한 reassignment throttles를 제거하는 효과가 있습니다. 이제 원래 브로커로 할당을 되돌리기 위해 JSON을 저장한 경우 되돌리기 파일을 삭제할 수 있습니다.

12.2.5. Kafka 클러스터 축소

다음 절차에서는 Kafka 클러스터에서 브로커 수를 줄이는 방법을 설명합니다.

사전 요구 사항

  • 기존 Kafka 클러스터입니다.
  • 브로커가 제거되면 클러스터의 브로커에 파티션을 다시 할당하는 방법에 대한 JSON 파일을 지정합니다.

절차

  1. 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

    이 명령은 두 개의 reassignment JSON 오브젝트를 출력합니다. 첫 번째는 이동 중인 파티션에 대한 현재 할당을 기록합니다. 나중에 다시 할당해야 하는 경우 파일에 저장해야 합니다. 두 번째 JSON 오브젝트는 reassignment JSON 파일에서 전달된 대상 재할당입니다.

  2. 다시 할당하는 동안 throttle을 변경해야 하는 경우 동일한 명령줄을 다른 제한 비율로 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    /opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --throttle 10000000 --execute
  3. 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
  4. --verify 명령이 이동 중인 각 파티션을 완료로 보고하면 재할당이 완료됩니다. 이 마지막 --verify 는 또한 reassignment throttles를 제거하는 효과가 있습니다. 이제 원래 브로커로 할당을 되돌리기 위해 JSON을 저장한 경우 되돌리기 파일을 삭제할 수 있습니다.
  5. 제거 중인 각 브로커에 해당 로그에 라이브 파티션이 없는지 확인합니다(log.dirs).

    ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'

    로그 디렉터리가 정규식 \.[a-z0-9]-delete$ 와 일치하지 않는 경우에도 활성 파티션이 계속 있습니다. 활성 파티션이 있는 경우 재할당이 완료되었는지 또는 재할당 JSON 파일의 구성을 확인합니다. 다시 할당을 실행할 수 있습니다. 다음 단계로 이동하기 전에 활성 파티션이 없는지 확인합니다.

  6. 브로커를 중지합니다.

    su - kafka
    /opt/kafka/bin/kafka-server-stop.sh
  7. Kafka 브로커가 중지되었는지 확인합니다.

    jcmd | grep kafka

12.2.6. ZooKeeper 클러스터 확장

다음 절차에서는 서버(노드)를 ZooKeeper 클러스터에 추가하는 방법을 설명합니다. ZooKeeper의 동적 재구성 기능은 확장 프로세스 중에 안정적인 ZooKeeper 클러스터를 유지 관리합니다.

사전 요구 사항

  • 동적 재구성은 ZooKeeper 구성 파일에서 활성화됩니다(reconfigEnabled=true).
  • zookeeper 인증이 활성화되며 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.

절차

각 ZooKeeper 서버에 대해 한 번에 하나씩 다음 단계를 수행하십시오.

  1. 4.1절. “다중 노드 ZooKeeper 클러스터 실행” 에 설명된 대로 ZooKeeper 클러스터에 서버를 추가한 다음 ZooKeeper를 시작합니다.
  2. 새 서버의 IP 주소와 구성된 액세스 포트를 기록해 둡니다.
  3. 서버에 대한 zookeeper-shell 세션을 시작합니다. 클러스터에 액세스할 수 있는 머신에서 다음 명령을 실행합니다(이는 ZooKeeper 노드 또는 로컬 머신 중 하나일 수 있음, 액세스 권한이 있는 경우).

    su - kafka
    /opt/kafka/bin/zookeeper-shell.sh <ip-address>:<zk-port>
  4. 쉘 세션에서 ZooKeeper 노드가 실행되고 있는 상태에서 다음 줄을 입력하여 쿼럼에 투표 멤버로 새 서버를 추가합니다.

    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;는 새로운 서버 ID 4 입니다.

    두 포트의 경우 < port1 > 2888 은 ZooKeeper 서버 간의 통신을 위한 것이며 < port2 > 3888 은 리더 선택을 위한 것입니다.

    새 구성은 ZooKeeper 클러스터의 다른 서버로 전파됩니다. 새 서버는 이제 쿼럼의 전체 멤버입니다.

  5. 추가할 다른 서버에 대해 1-4단계를 반복합니다.

12.2.7. ZooKeeper 클러스터 축소

다음 절차에서는 ZooKeeper 클러스터에서 서버 (노드)를 제거하는 방법을 설명합니다. ZooKeeper의 동적 재구성 기능은 스케일 다운 프로세스 중에 안정적인 ZooKeeper 클러스터를 유지 관리합니다.

사전 요구 사항

  • 동적 재구성은 ZooKeeper 구성 파일에서 활성화됩니다(reconfigEnabled=true).
  • zookeeper 인증이 활성화되며 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.

절차

각 ZooKeeper 서버에 대해 한 번에 하나씩 다음 단계를 수행하십시오.

  1. 축소 후 유지되는 서버 중 하나에서 zookeeper-shell 에 로그인합니다(예: 서버 1).

    참고

    ZooKeeper 클러스터에 대해 구성된 인증 메커니즘을 사용하여 서버에 액세스합니다.

  2. 서버를 제거합니다(예: 서버 5).

    reconfig -remove 5
  3. 제거한 서버를 비활성화합니다.
  4. 클러스터 크기를 줄이기 위해 1-3 단계를 반복합니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.