6.3. Topic Operator 사용


KafkaTopic 리소스를 사용하여 주제를 생성, 수정 또는 삭제할 때 Topic Operator는 이러한 변경 사항이 Kafka 클러스터에 반영되도록 합니다.

KafkaTopic 리소스에 대한 자세한 내용은 KafkaTopic 스키마 참조를 참조하십시오.

Topic Operator 배포

Cluster Operator를 사용하거나 독립 실행형 Operator로 Topic Operator를 배포할 수 있습니다. Cluster Operator에서 관리하지 않는 Kafka 클러스터와 함께 독립 실행형 Topic Operator를 사용합니다.

배포 지침은 다음을 참조하십시오.

중요

독립 실행형 Topic Operator를 배포하려면 Kafka 클러스터에 연결할 환경 변수를 설정해야 합니다. Cluster Operator에 의해 설정되므로 Topic Operator를 배포하는 경우 이러한 환경 변수를 설정할 필요가 없습니다.

6.3.1. Kafka 주제 리소스

KafkaTopic 리소스는 파티션 및 복제본 수를 포함하여 주제를 구성하는 데 사용됩니다.

KafkaTopic 의 전체 스키마는 KafkaTopic 스키마 참조에 설명되어 있습니다.

6.3.1.1. 주제 처리를 위한 Kafka 클러스터 식별

KafkaTopic 리소스에는 해당 리소스가 속한 Kafka 리소스의 이름에서 파생되는 Kafka 클러스터의 이름을 지정하는 레이블이 포함되어 있습니다.

예를 들면 다음과 같습니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: topic-name-1
  labels:
    strimzi.io/cluster: my-cluster
Copy to Clipboard Toggle word wrap

이 레이블은 Topic Operator에서 KafkaTopic 리소스를 식별하고 새 주제를 생성하고 후속 주제를 처리하는 데 사용됩니다.

라벨이 Kafka 클러스터와 일치하지 않으면 Topic Operator에서 KafkaTopic 을 식별할 수 없으며 주제가 생성되지 않습니다.

6.3.1.2. Kafka 주제 사용 권장 사항

주제로 작업할 때는 일관성을 유지합니다. 항상 OpenShift에서 KafkaTopic 리소스 또는 주제에서 직접 작동합니다. 지정된 항목에 대한 두 방법 모두 정기적으로 전환하지 않도록 합니다.

주제의 특성을 반영하는 주제 이름을 사용하고 나중에 이름을 변경할 수 없습니다.

Kafka에서 주제를 생성하는 경우 유효한 OpenShift 리소스 이름인 이름을 사용합니다. 그러지 않으면 Topic Operator에서 OpenShift 규칙을 준수하는 이름으로 해당 KafkaTopic 을 생성해야 합니다.

참고

OpenShift의 식별자 및 이름에 대한 요구 사항에 대한 자세한 내용은 오브젝트 이름 및 ID 를 참조하십시오.

6.3.1.3. Kafka 주제 이름 지정 규칙

Kafka 및 OpenShift는 Kafka 및 KafkaTopic.metadata.name 의 주제 이름에 대한 자체 검증 규칙을 각각 적용합니다. 각각에 유효한 이름이 있으며 다른 이름에는 유효하지 않습니다.

spec.topicName 속성을 사용하면 OpenShift의 Kafka 주제에서 유효하지 않은 이름으로 Kafka에서 유효한 주제를 생성할 수 있습니다.

spec.topicName 속성은 Kafka 이름 지정 검증 규칙을 상속합니다.

  • 이름은 249자 이상이어야 합니다.
  • Kafka 주제의 유효한 문자는 ASCII 영숫자, . ., _, - 입니다.
  • 이름은 . 또는 . . .. 는 exampleTopic. 또는 .exampleTopic 과 같은 이름으로 사용할 수 없습니다.

spec.topicName 은 변경할 수 없습니다.

예를 들면 다음과 같습니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: topicName-1 
1

  # ...
Copy to Clipboard Toggle word wrap
1
OpenShift에서는 대문자가 잘못되었습니다.

다음과 같이 변경할 수 없습니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: topic-name-1
spec:
  topicName: name-2
  # ...
Copy to Clipboard Toggle word wrap
참고

Kafka Streams와 같은 일부 Kafka 클라이언트 애플리케이션은 Kafka에서 프로그래밍 방식으로 주제를 생성할 수 있습니다. 이러한 주제의 이름이 잘못된 OpenShift 리소스 이름이 있는 경우 Topic Operator는 Kafka 이름을 기반으로 유효한 metadata.name 을 제공합니다. 잘못된 문자가 교체되고 해시가 이름에 추가됩니다. 예를 들면 다음과 같습니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: mytopic---c55e57fe2546a33f9e603caf57165db4072e827e
spec:
  topicName: myTopic
  # ...
Copy to Clipboard Toggle word wrap

6.3.2. 주제 Operator 주제 저장소

Topic Operator는 Kafka를 사용하여 주제 구성을 키-값 쌍으로 설명하는 주제 메타데이터를 저장합니다. 주제 저장소 는 Kafka 주제를 사용하여 상태를 유지하는 Kafka Streams 키-값 메커니즘을 기반으로 합니다.

주제 메타데이터는 메모리 내 캐시되고 Topic Operator 내에서 로컬에 액세스합니다. 로컬 메모리 내 캐시에 적용된 작업에서 업데이트는 디스크의 백업 주제 저장소에 유지됩니다. 주제 저장소는 Kafka 주제 또는 OpenShift KafkaTopic 사용자 정의 리소스의 업데이트와 지속적으로 동기화됩니다. 주제 저장소가 이러한 방식으로 설정된 상태에서 신속하게 처리되지만 메모리 내 캐시가 충돌하면 영구 스토리지에서 자동으로 다시 채워집니다.

6.3.2.1. 내부 주제 저장소 주제

내부 주제는 주제 저장소의 주제 메타데이터 처리를 지원합니다.

__strimzi_store_topic
주제 메타데이터 저장을 위한 입력 주제
__strimzi-topic-operator-kstreams-topic-store-changelog
컴팩트한 주제 저장소 값의 로그 유지
주의

Topic Operator 실행에 필수이므로 이러한 주제를 삭제하지 마십시오.

6.3.2.2. Zoo Cryostat에서 주제 메타데이터 마이그레이션

이전 버전의 AMQ Streams에서는 주제 메타데이터가 Zoo Cryostat에 저장되었습니다. 새 프로세스에서는 이 요구 사항을 제거하여 Kafka 클러스터에 메타데이터를 가져오고 Topic Operator를 제어합니다.

AMQ Streams 2.2로 업그레이드할 때 주제 저장소에 대한 Topic Operator 제어로 원활하게 전환됩니다. 메타 데이터가 Zoo Cryostat에서 찾아 마이그레이션되고 이전 저장소가 삭제됩니다.

주제 메타데이터 스토리지에 Zoo Cryostat를 사용하는 1.7 이전 버전의 AMQ Streams로 되돌리는 경우 Cluster Operator를 이전 버전으로 다운그레이드한 다음 Kafka 브로커 및 클라이언트 애플리케이션을 표준으로 다운그레이드합니다.

그러나 Kafka 클러스터의 부트스트랩 주소를 지정하여 kafka-admin 명령을 사용하여 주제 저장소에 대해 생성된 주제도 삭제해야 합니다. 예를 들면 다음과 같습니다.

oc run kafka-admin -ti --image=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete
Copy to Clipboard Toggle word wrap

명령은 Kafka 클러스터에 액세스하는 데 사용되는 리스너 및 인증 유형에 해당해야 합니다.

Topic Operator는 Kafka의 주제 상태에서 Zoo Cryostat 주제 메타데이터를 재구성합니다.

6.3.2.4. Operator 주제 복제 및 스케일링

Topic Operator에서 관리하는 항목에 권장되는 구성은 3가지의 복제 요소이며 최소 2개의 in-sync 복제본입니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster
spec:
  partitions: 10 
1

  replicas: 3 
2

  config:
    min.insync.replicas: 2 
3

  #...
Copy to Clipboard Toggle word wrap
1
주제의 파티션 수입니다.
2
복제본 주제 파티션 수입니다. 현재는 KafkaTopic 리소스에서 변경할 수 없지만 kafka-reassign-partitions.sh 도구를 사용하여 변경할 수 있습니다.
3
메시지를 성공적으로 작성해야 하는 최소 복제본 파티션 수 또는 예외가 발생합니다.
참고

동기화 내 복제본은 생산자 애플리케이션에 대한 acks 구성과 함께 사용됩니다. acks 구성에 따라 메시지가 성공적으로 수신되는 것으로 확인되기 전에 메시지를 복제해야 하는 후속 파티션 수가 결정됩니다. Topic Operator는 acks=all 과 함께 실행됩니다. 여기서by 메시지는 모든 동기화 복제본에서 승인해야 합니다.

브로커를 추가하거나 제거하여 Kafka 클러스터를 스케일링하는 경우 복제 요인 구성이 변경되지 않고 복제본이 자동으로 다시 할당되지 않습니다. 그러나 kafka-reassign-partitions.sh 툴을 사용하여 복제 요소를 변경하고 브로커에 복제본을 수동으로 다시 할당할 수 있습니다.

또는 Cruise Control for AMQ Streams의 통합은 주제의 복제 요소를 변경할 수 없지만 Kafka 재조정을 위해 생성하는 최적화 제안에는 파티션 복제본을 전송하고 파티션 리더십을 변경하는 명령이 포함됩니다.

6.3.2.5. 주제에 대한 변경 사항 처리

Topic Operator가 해결해야 하는 근본적인 문제는 단일 정보 소스가 없다는 것입니다. KafkaTopic 리소스와 Kafka 주제는 Topic Operator와는 별도로 수정할 수 있습니다. 이에 따라 Topic Operator가 매번 변경 사항을 실시간으로 관찰하지 못할 수 있습니다. 예를 들어 Topic Operator가 다운된 경우입니다.

이 문제를 해결하기 위해 Topic Operator는 주제 저장소의 각 항목에 대한 정보를 유지 관리합니다. Kafka 클러스터 또는 OpenShift에서 변경이 발생하면 모든 항목을 동기화 상태로 유지하기 위해 다른 시스템과 주제 저장소의 상태를 모두 확인합니다. Topic Operator가 시작될 때마다 동일한 상황이 발생하고 실행 중에 주기적으로 발생합니다.

예를 들어 Topic Operator가 실행되지 않고 my-topic 이라는 KafkaTopic 이 생성되었다고 가정합니다. Topic Operator가 시작되면 주제 저장소에 my-topic에 대한 정보가 포함되어 있지 않으므로 KafkaTopic 이 마지막으로 실행된 후 생성되었음을 추측할 수 있습니다. Topic Operator는 my-topic에 해당하는 주제를 생성하고 주제 저장소에 my-topic의 메타데이터도 저장합니다.

Kafka 주제 구성을 업데이트하거나 KafkaTopic 사용자 정의 리소스를 통해 변경 사항을 적용하는 경우 Kafka 클러스터가 조정된 후 주제 저장소가 업데이트됩니다.

또한 주제 저장소를 통해 Topic Operator는 변경 사항이 호환되지 않는 한 Kafka 주제에서 주제 구성이 변경되고 OpenShift KafkaTopic 사용자 정의 리소스를 통해 업데이트되는 시나리오를 관리할 수 있습니다. 예를 들어 동일한 주제 구성 키를 다른 값으로 변경할 수 있습니다. 호환되지 않는 변경의 경우 Kafka 구성이 우선하며 KafkaTopic 이 적절하게 업데이트됩니다.

참고

KafkaTopic 리소스를 사용하여 oc delete -f KAFKA-TOPIC-CONFIG-FILE 명령을 사용하여 주제를 삭제할 수도 있습니다. 이 작업을 수행하려면 Kafka 리소스의 spec.kafka.config 에서 delete.topic.enabletrue (기본값)로 설정해야 합니다.

6.3.3. Kafka 주제 구성

KafkaTopic 리소스의 속성을 사용하여 Kafka 주제를 구성합니다.

oc apply 를 사용하여 주제를 만들거나 수정하고 oc delete 를 사용하여 기존 주제를 삭제할 수 있습니다.

예를 들면 다음과 같습니다.

  • oc apply -f <topic_config_file>
  • oc delete KafkaTopic <topic_name>

다음 절차에서는 10개의 파티션과 2개의 복제본이 있는 주제를 생성하는 방법을 설명합니다.

시작하기 전

변경하기 전에 다음을 고려해야 합니다.

  • Kafka는 파티션 수 감소를 지원하지 않습니다.
  • 키가 있는 주제의 spec.partitions 를 늘리면 레코드가 분할되는 방식이 변경됩니다. 이는 주제에서 의미 체계 파티셔닝 을 사용하는 경우 특히 문제가 될 수 있습니다.
  • AMQ Streams는 KafkaTopic 리소스를 통해 다음과 같은 변경을 수행하는 것을 지원하지 않습니다.

    • spec.replicas 를 사용하여 처음에 지정된 복제본 수 변경
    • spec.topicName을 사용하여 주제 이름 변경

사전 요구 사항

절차

  1. KafkaTopic 리소스를 구성합니다.

    Kafka 주제 구성의 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: orders
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 10
      replicas: 2
    Copy to Clipboard Toggle word wrap

    작은 정보

    주제를 수정할 때 oc get kafkatopic orders -o yaml 을 사용하여 현재 버전의 리소스를 가져올 수 있습니다.

  2. OpenShift에서 KafkaTopic 리소스를 생성합니다.

    oc apply -f <topic_config_file>
    Copy to Clipboard Toggle word wrap
  3. 주제의 준비 상태가 True 로 변경될 때까지 기다립니다.

    oc get kafkatopics -o wide -w -n <namespace>
    Copy to Clipboard Toggle word wrap

    Kafka 주제 상태

    NAME         CLUSTER     PARTITIONS  REPLICATION FACTOR READY
    my-topic-1   my-cluster  10          3                  True
    my-topic-2   my-cluster  10          3
    my-topic-3   my-cluster  10          3                  True
    Copy to Clipboard Toggle word wrap

    READY 출력에 True 가 표시되면 주제 생성이 성공합니다.

  4. READY 열이 비어 있는 경우 리소스 YAML 또는 Topic Operator 로그에서 상태에 대한 자세한 정보를 가져옵니다.

    메시지는 현재 상태의 이유에 대한 세부 정보를 제공합니다.

    oc get kafkatopics my-topic-2 -o yaml
    Copy to Clipboard Toggle word wrap

    NotReady 상태의 주제 세부 정보

    # ...
    status:
      conditions:
      - lastTransitionTime: "2022-06-13T10:14:43.351550Z"
        message: Number of partitions cannot be decreased
        reason: PartitionDecreaseException
        status: "True"
        type: NotReady
    Copy to Clipboard Toggle word wrap

    이 예에서 주제가 준비되지 않은 이유는 KafkaTopic 구성에서 원래 파티션 수가 감소되었기 때문입니다. Kafka는 이를 지원하지 않습니다.

    주제 구성을 재설정한 후 상태에 주제가 준비됨으로 표시됩니다.

    oc get kafkatopics my-topic-2 -o wide -w -n <namespace>
    Copy to Clipboard Toggle word wrap

    주제의 상태 업데이트

    NAME         CLUSTER     PARTITIONS  REPLICATION FACTOR READY
    my-topic-2   my-cluster  10          3                  True
    Copy to Clipboard Toggle word wrap

    세부 정보 가져오기에 메시지가 표시되지 않음

    oc get kafkatopics my-topic-2 -o yaml
    Copy to Clipboard Toggle word wrap

    READY 상태의 주제 세부 정보

    # ...
    status:
      conditions:
      - lastTransitionTime: '2022-06-13T10:15:03.761084Z'
        status: 'True'
        type: Ready
    Copy to Clipboard Toggle word wrap

6.3.4. 리소스 요청 및 제한을 사용하여 Topic Operator 구성

CPU 및 메모리와 같은 리소스를 Topic Operator에 할당하고 사용할 수 있는 리소스 양에 제한을 설정할 수 있습니다.

사전 요구 사항

  • Cluster Operator가 실행 중입니다.

절차

  1. 필요에 따라 편집기에서 Kafka 클러스터 구성을 업데이트합니다.

    oc edit kafka MY-CLUSTER
    Copy to Clipboard Toggle word wrap
  2. Kafka 리소스의 spec.entityOperator.topicOperator.resources 속성에서 Topic Operator에 대한 리소스 요청 및 제한을 설정합니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    spec:
      # Kafka and ZooKeeper sections...
      entityOperator:
        topicOperator:
          resources:
            requests:
              cpu: "1"
              memory: 500Mi
            limits:
              cpu: "1"
              memory: 500Mi
    Copy to Clipboard Toggle word wrap
  3. 새 구성을 적용하여 리소스를 생성하거나 업데이트합니다.

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동