19.2. 파티션을 다시 할당하기 위한 JSON 파일 재 할당 생성


kafka-reassign-partitions.sh 도구를 사용하여 JSON 파일을 다시 할당하여 Kafka 클러스터를 확장한 후 파티션을 다시 할당합니다. 브로커를 추가하거나 제거해도 기존 파티션을 자동으로 재배포하지 않습니다. 파티션 배포의 균형을 조정하고 새 브로커를 최대한 활용하기 위해 kafka-reassign-partitions.sh 도구를 사용하여 파티션을 다시 할당할 수 있습니다.

Kafka 클러스터에 연결된 대화형 Pod 컨테이너에서 툴을 실행합니다.

다음 절차에서는 mTLS를 사용하는 보안 재 할당 프로세스를 설명합니다. TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터가 필요합니다.

연결을 설정하려면 다음이 필요합니다.

  • Kafka 클러스터가 생성될 때 Cluster Operator가 생성한 클러스터 CA 인증서 및 암호
  • Kafka 클러스터에 대한 클라이언트 액세스를 위해 사용자가 생성할 때 User Operator가 생성한 사용자 CA 인증서 및 암호

이 절차에서는 CA 인증서 및 해당 암호가 PKCS #12(.p12.password) 형식으로 포함된 사용자 시크릿과 클러스터에서 추출됩니다. 암호를 사용하면 인증서가 포함된 .p12 저장소에 액세스할 수 있습니다. .p12 저장소를 사용하여 Kafka 클러스터에 대한 연결을 인증하는 신뢰 저장소 및 키 저장소를 지정합니다.

사전 요구 사항

  • 실행 중인 Cluster Operator가 있어야 합니다.
  • 내부 TLS 암호화 및 mTLS 인증으로 구성된 Kafka 리소스를 기반으로 실행 중인 Kafka 클러스터가 있습니다.

    TLS 암호화 및 mTLS 인증을 통한 Kafka 구성

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
    spec:
      kafka:
        # ...
        listeners:
          # ...
          - name: tls
            port: 9093
            type: internal
            tls: true 
    1
    
            authentication:
              type: tls 
    2
    
        # ...

    1
    내부 리스너에 대한 TLS 암호화를 활성화합니다.
    2
    상호 tls 로 지정된 리스너 인증 메커니즘
  • 실행 중인 Kafka 클러스터에는 재배치할 주제와 파티션 세트가 포함되어 있습니다.

    my-topic에 대한 주제 구성 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: my-topic
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 10
      replicas: 3
      config:
        retention.ms: 7200000
        segment.bytes: 1073741824
        # ...

  • Kafka 브로커에서 주제를 생성하고 사용할 수 있는 권한을 지정하는 ACL 규칙으로 KafkaUser 가 구성되어 있습니다.

    my-topicmy-cluster에 대한 작업을 허용하는 ACL 규칙이 있는 Kafka 사용자 구성의 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      authentication: 
    1
    
        type: tls
      authorization:
        type: simple 
    2
    
        acls:
          # access to the topic
          - resource:
              type: topic
              name: my-topic
            operations:
              - Create
              - Describe
              - Read
              - AlterConfigs
            host: "*"
          # access to the cluster
          - resource:
              type: cluster
            operations:
              - Alter
              - AlterConfigs
            host: "*"
          # ...
      # ...

    1
    상호 tls 로 정의된 사용자 인증 메커니즘.
    2
    간단한 권한 부여 및 ACL 규칙 목록.

절차

  1. Kafka 클러스터의 <cluster _name> -cluster-ca-cert 시크릿에서 클러스터 CA 인증서 및 암호를 추출합니다.

    oc get secret <cluster_name>-cluster-ca-cert -o jsonpath='{.data.ca\.p12}' | base64 -d > ca.p12
    oc get secret <cluster_name>-cluster-ca-cert -o jsonpath='{.data.ca\.password}' | base64 -d > ca.password

    & lt;cluster_name >을 Kafka 클러스터 이름으로 바꿉니다. Kafka 리소스를 사용하여 Kafka를 배포하면 Kafka 클러스터 이름( <cluster_name> -cluster-ca-cert )을 사용하여 클러스터CA 인증서가 있는 보안이 생성됩니다. 예: my-cluster-cluster-ca-cert.

  2. AMQ Streams Kafka 이미지를 사용하여 새 대화형 Pod 컨테이너를 실행하여 실행 중인 Kafka 브로커에 연결합니다.

    oc run --restart=Never --image=registry.redhat.io/amq-streams/kafka-35-rhel8:2.5.1 <interactive_pod_name> -- /bin/sh -c "sleep 3600"

    & lt;interactive_pod_name& gt;을 Pod 이름으로 바꿉니다.

  3. 클러스터 CA 인증서를 대화형 Pod 컨테이너에 복사합니다.

    oc cp ca.p12 <interactive_pod_name>:/tmp
  4. Kafka 브로커에 액세스할 수 있는 권한이 있는 Kafka 사용자의 시크릿에서 사용자 CA 인증서 및 암호를 추출합니다.

    oc get secret <kafka_user> -o jsonpath='{.data.user\.p12}' | base64 -d > user.p12
    oc get secret <kafka_user> -o jsonpath='{.data.user\.password}' | base64 -d > user.password

    & lt;kafka_user >를 Kafka 사용자의 이름으로 바꿉니다. KafkaUser 리소스를 사용하여 Kafka 사용자를 생성하면 Kafka 사용자 이름으로 사용자 CA 인증서가 있는 시크릿이 생성됩니다. 예를 들면 my-user 입니다.

  5. 사용자 CA 인증서를 대화형 Pod 컨테이너에 복사합니다.

    oc cp user.p12 <interactive_pod_name>:/tmp

    CA 인증서를 사용하면 대화형 Pod 컨테이너가 TLS를 사용하여 Kafka 브로커에 연결할 수 있습니다.

  6. config.properties 파일을 생성하여 Kafka 클러스터에 대한 연결을 인증하는 데 사용되는 신뢰 저장소 및 키 저장소를 지정합니다.

    이전 단계에서 추출한 인증서와 암호를 사용합니다.

    bootstrap.servers=<kafka_cluster_name>-kafka-bootstrap:9093 
    1
    
    security.protocol=SSL 
    2
    
    ssl.truststore.location=/tmp/ca.p12 
    3
    
    ssl.truststore.password=<truststore_password> 
    4
    
    ssl.keystore.location=/tmp/user.p12 
    5
    
    ssl.keystore.password=<keystore_password> 
    6
    1
    Kafka 클러스터에 연결할 부트스트랩 서버 주소입니다. 고유한 Kafka 클러스터 이름을 사용하여 < kafka_cluster_name>을 바꿉니다.
    2
    암호화에 TLS를 사용할 때 보안 프로토콜 옵션입니다.
    3
    신뢰 저장소 위치에는 Kafka 클러스터의 공개 키 인증서(ca.p12)가 포함됩니다.
    4
    신뢰 저장소에 액세스하기 위한 암호(ca.password)입니다.
    5
    키 저장소 위치에는 Kafka 사용자의 공개 키 인증서(user.p12)가 포함됩니다.
    6
    키 저장소에 액세스하기 위한 암호(user.password)
  7. config.properties 파일을 대화형 Pod 컨테이너에 복사합니다.

    oc cp config.properties <interactive_pod_name>:/tmp/config.properties
  8. 이동할 주제를 지정하는 topics.json 이라는 JSON 파일을 준비합니다.

    주제 이름을 쉼표로 구분된 목록으로 지정합니다.

    my-topic의 모든 파티션을 다시 할당할 JSON 파일의 예

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

    이 파일을 사용하여 주제의 복제 요소를 변경할 수도 있습니다.

  9. topics.json 파일을 대화형 Pod 컨테이너에 복사합니다.

    oc cp topics.json <interactive_pod_name>:/tmp/topics.json
  10. 대화형 Pod 컨테이너에서 쉘 프로세스를 시작합니다.

    oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash

    & lt;namespace& gt;를 Pod가 실행 중인 OpenShift 네임스페이스로 바꿉니다.

  11. kafka-reassign-partitions.sh 명령을 사용하여 reassignment JSON을 생성합니다.

    my-topic 의 파티션을 지정된 브로커로 이동하는 명령의 예

    bin/kafka-reassign-partitions.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --topics-to-move-json-file /tmp/topics.json \
      --broker-list 0,1,2,3,4 \
      --generate

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동