1장. 배포 개요


Apache Kafka 스트림은 OpenShift 클러스터 내에서 Apache Kafka 를 실행하는 프로세스를 간소화합니다.

이 가이드에서는 Apache Kafka용 스트림 배포 및 관리를 위한 지침을 제공합니다. 배포 옵션 및 단계는 Apache Kafka용 Streams에 포함된 설치 파일 예제를 사용하여 다룹니다. 이 가이드에서는 중요한 구성 고려 사항을 강조하지만 사용 가능한 모든 옵션을 다루지는 않습니다. Kafka 구성 요소 구성 옵션을 자세히 이해하려면 Streams for Apache Kafka 사용자 정의 리소스 API 참조를 참조하십시오.

이 가이드에서는 배포 지침 외에도 사전 및 배포 후 지침을 제공합니다. Kafka 클러스터에 대한 클라이언트 액세스 설정 및 보안을 설명합니다. 또한 메트릭 통합, 분산 추적 및 Cruise Control과 같은 클러스터 관리 도구 및 Apache Kafka DrainCleaner용 Streams와 같은 추가 배포 옵션을 살펴봅니다. 또한 최적의 성능을 위해 Streams for Apache Kafka 관리 및 Kafka 구성 세부 조정에 대한 권장 사항을 찾을 수 있습니다.

배포를 최신 상태로 유지하는 데 도움이 되도록 Apache Kafka 및 Kafka용 Streams에 대한 업그레이드 지침이 제공됩니다.

Apache Kafka용 스트림은 배포에 관계없이 모든 유형의 OpenShift 클러스터와 호환되도록 설계되었습니다. 배포에 공용 클라우드 또는 프라이빗 클라우드가 포함되었는지, 로컬 개발 환경을 설정하는 경우 이 가이드의 지침을 모든 경우에 적용할 수 있습니다.

1.1. Apache Kafka 사용자 정의 리소스의 스트림

Apache Kafka용 Streams를 사용하여 OpenShift 클러스터에 Kafka 구성 요소를 배포하는 것은 사용자 정의 리소스를 사용하여 구성할 수 있습니다. 이러한 리소스는 OpenShift 리소스를 확장하는 CRD(Custom Resource Definitions)에서 도입한 API 인스턴스로 생성됩니다.

CRD는 OpenShift 클러스터의 사용자 정의 리소스를 설명하는 구성 지침으로 작동하며 배포에 사용되는 각 Kafka 구성 요소와 사용자 및 주제에 대해 Streams for Apache Kafka에 제공됩니다. CRD 및 사용자 정의 리소스는 YAML 파일로 정의됩니다. YAML 파일의 예는 Apache Kafka 배포를 위한 스트림과 함께 제공됩니다.

CRD를 사용하면 Apache Kafka 리소스의 Streams가 CLI 접근성 및 구성 검증과 같은 기본 OpenShift 기능을 활용할 수 있습니다.

1.1.1. Apache Kafka 사용자 정의 리소스 스트림 예

CRD는 Apache Kafka 관련 리소스의 스트림을 인스턴스화하고 관리하는 데 사용되는 스키마를 정의하려면 클러스터에 일회성 설치가 필요합니다.

CRD를 설치하여 새 사용자 정의 리소스 유형을 클러스터에 추가한 후 사양에 따라 리소스의 인스턴스를 생성할 수 있습니다.

클러스터 설정에 따라 설치에는 일반적으로 클러스터 관리자 권한이 필요합니다.

참고

사용자 정의 리소스 관리에 대한 액세스는 Apache Kafka 관리자의 Streams로 제한됩니다. 자세한 내용은 6.5절. “Apache Kafka 관리자용 Streams 지정”의 내용을 참조하십시오.

CRD는 OpenShift 클러스터 내에서 kind:Kafka 와 같은 새로운 유형의 리소스를 정의합니다.

Kubernetes API 서버를 사용하면 유형에 따라 사용자 정의 리소스를 생성할 수 있으며 OpenShift 클러스터에 추가할 때 사용자 정의 리소스를 검증하고 저장하는 방법을 CRD에서 이해할 수 있습니다.

Apache Kafka 관련 사용자 정의 리소스의 각 Streams는 리소스 종류의 CRD에서 정의한 스키마를 준수합니다. Apache Kafka 구성 요소의 Streams에 대한 사용자 정의 리소스에는 spec 에서 정의되는 일반적인 구성 속성이 있습니다.

CRD와 사용자 정의 리소스 간의 관계를 이해하려면 Kafka 주제의 CRD 샘플을 살펴보겠습니다.

Kafka 주제 CRD

apiVersion: kafka.strimzi.io/v1beta2
kind: CustomResourceDefinition
metadata: 
1

  name: kafkatopics.kafka.strimzi.io
  labels:
    app: strimzi
spec: 
2

  group: kafka.strimzi.io
  versions:
    v1beta2
  scope: Namespaced
  names:
    # ...
    singular: kafkatopic
    plural: kafkatopics
    shortNames:
    - kt 
3

  additionalPrinterColumns: 
4

      # ...
  subresources:
    status: {} 
5

  validation: 
6

    openAPIV3Schema:
      properties:
        spec:
          type: object
          properties:
            partitions:
              type: integer
              minimum: 1
            replicas:
              type: integer
              minimum: 1
              maximum: 32767
      # ...

1
CRD를 식별하는 주제 CRD의 메타데이터, 이름 및 레이블입니다.
2
주제의 API에 액세스하는 데 사용되는 그룹(도메인) 이름, 복수 이름 및 지원되는 스키마 버전을 포함하여 이 CRD의 사양입니다. 다른 이름은 CLI에서 인스턴스 리소스를 식별하는 데 사용됩니다. 예를 들어 oc get kafkatopic my-topic 또는 oc get kafkatopics.
3
단축 이름은 CLI 명령에서 사용할 수 있습니다. 예를 들어 oc get ktoc get kafkatopic 대신 약어로 사용할 수 있습니다.
4
사용자 정의 리소스에서 get 명령을 사용할 때 표시되는 정보입니다.
5
리소스의 스키마 참조에 설명된 대로 CRD의 현재 상태입니다.
6
openAPIV3Schema 검증에서는 주제 사용자 정의 리소스 생성에 대한 검증을 제공합니다. 예를 들어 항목에는 하나 이상의 파티션과 복제본이 필요합니다.
참고

파일 이름에 인덱스 번호 뒤에 'Crd'가 포함되어 있으므로 Streams for Apache Kafka 설치 파일과 함께 제공되는 CRD YAML 파일을 식별할 수 있습니다.

다음은 KafkaTopic 사용자 정의 리소스의 해당 예입니다.

Kafka 주제 사용자 정의 리소스

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic 
1

metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster 
2

spec: 
3

  partitions: 1
  replicas: 1
  config:
    retention.ms: 7200000
    segment.bytes: 1073741824
status:
  conditions: 
4

    lastTransitionTime: "2019-08-20T11:37:00.706Z"
    status: "True"
    type: Ready
  observedGeneration: 1
  / ...

1
kindapiVersion 은 사용자 정의 리소스가 인스턴스인 CRD를 식별합니다.
2
주제 또는 사용자가 속한 Kafka 클러스터의 이름( Kafka 리소스 이름과 동일)을 정의하는 KafkaTopicKafkaUser 리소스에만 적용되는 레이블입니다.
3
사양은 주제의 파티션 및 복제본 수와 주제 자체의 구성 매개변수를 보여줍니다. 이 예에서는 메시지가 항목에 남아 있고 로그의 세그먼트 파일 크기가 지정됩니다.
4
KafkaTopic 리소스의 상태 상태입니다. 유형 조건이 lastTransitionTime 에서 Ready 로 변경되었습니다.

플랫폼 CLI를 통해 사용자 정의 리소스를 클러스터에 적용할 수 있습니다. 사용자 정의 리소스가 생성되면 Kubernetes API의 기본 제공 리소스와 동일한 검증을 사용합니다.

KafkaTopic 사용자 정의 리소스가 생성되면 Topic Operator에 알림이 표시되고 해당 Kafka 주제는 Apache Kafka용 Streams에서 생성됩니다.

1.1.2. 사용자 정의 리소스에서 oc 작업 수행

oc 명령을 사용하여 Apache Kafka 사용자 정의 리소스의 Streams에서 정보를 검색하고 다른 작업을 수행할 수 있습니다. get,describe,edit 또는 delete 등의 oc 명령을 사용하여 리소스 유형에 대한 작업을 수행합니다. 예를 들어 oc get kafkatopics 는 모든 Kafka 주제 목록을 검색하고 oc get kafkas 는 배포된 모든 Kafka 클러스터를 검색합니다.

리소스 유형을 참조할 때 단일 이름과 복수 이름을 모두 사용할 수 있습니다. oc get kafkasoc get kafka 와 동일한 결과를 가져옵니다.

리소스의 짧은 이름을 사용할 수도 있습니다. 짧은 이름을 학습하면 Apache Kafka의 Streams를 관리할 때 시간을 절약할 수 있습니다. Kafka 의 짧은 이름은 k 이므로 oc get k 를 실행하여 모든 Kafka 클러스터를 나열할 수도 있습니다.

Kafka 클러스터 나열

oc get k

NAME         READY   METADATA STATE   WARNINGS
my-cluster   True    KRaft

Expand
표 1.1. Apache Kafka 리소스의 각 Streams에 대한 긴 이름 및 짧은 이름
Apache Kafka 리소스의 스트림긴 이름짧은 이름

Kafka

kafka

k

Kafka 노드 풀

kafkanodepool

knp

Kafka 주제

kafkatopic

kt

Kafka 사용자

kafkauser

ku

Kafka Connect

kafkaconnect

kc

Kafka 커넥터

kafkaconnector

kctr

Kafka MirrorMaker 2

kafkamirrormaker2

kmm2

Kafka 브리지

kafkabridge

kb

Kafka 리밸런스

kafkarebalance

kr

Apache Kafka Pod 세트의 스트림

strimzipodset

SPS

1.1.2.1. 리소스 카테고리

사용자 정의 리소스의 카테고리는 oc 명령에서도 사용할 수 있습니다.

Apache Kafka 사용자 정의 리소스의 모든 Streams는 strimzi 카테고리에 속하므로 strimzi 를 사용하여 하나의 명령으로 Apache Kafka 리소스의 모든 Streams를 가져올 수 있습니다.

예를 들어 oc get strimzi 를 실행하면 지정된 네임스페이스에서 Apache Kafka 사용자 정의 리소스의 모든 Streams가 나열됩니다.

모든 사용자 정의 리소스 나열

oc get strimzi

NAME                                                   PODS   READY PODS   CURRENT PODS   AGE
strimzipodset.core.strimzi.io/my-cluster-brokers       3      3            3              6h11m
strimzipodset.core.strimzi.io/my-cluster-controllers   3      3            3              6h11m

NAME                                         DESIRED REPLICAS   ROLES            NODEIDS
kafkanodepool.kafka.strimzi.io/brokers       3                  ["broker"]       [3,4,5]
kafkanodepool.kafka.strimzi.io/controllers   3                  ["controller"]   [0,1,2]

NAME                                READY   METADATA STATE   WARNINGS
kafka.kafka.strimzi.io/my-cluster   True    KRaft

NAME                                   PARTITIONS REPLICATION FACTOR
kafkatopic.kafka.strimzi.io/kafka-apps 3          3

NAME                                   AUTHENTICATION AUTHORIZATION
kafkauser.kafka.strimzi.io/my-user     tls            simple

oc get strimzi -o name 명령은 모든 리소스 유형 및 리소스 이름을 반환합니다. -o name 옵션은 유형/이름 형식으로 출력을 가져옵니다.

모든 리소스 유형 및 이름 나열

oc get strimzi -o name

strimzipodset.core.strimzi.io/my-cluster-brokers
strimzipodset.core.strimzi.io/my-cluster-controllers
kafkanodepool.kafka.strimzi.io/brokers
kafkanodepool.kafka.strimzi.io/controllers
kafka.kafka.strimzi.io/my-cluster
kafkatopic.kafka.strimzi.io/kafka-apps
kafkauser.kafka.strimzi.io/my-user

strimzi 명령을 다른 명령과 결합할 수 있습니다. 예를 들어 oc delete 명령에 전달하여 단일 명령의 모든 리소스를 삭제할 수 있습니다.

모든 사용자 정의 리소스 삭제

oc delete $(oc get strimzi -o name)

strimzipodset.core.strimzi.io "my-cluster-brokers" deleted
strimzipodset.core.strimzi.io "my-cluster-controllers" deleted
kafkanodepool.kafka.strimzi.io "brokers" deleted
kafkanodepool.kafka.strimzi.io "controllers" deleted
kafka.kafka.strimzi.io "my-cluster" deleted
kafkatopic.kafka.strimzi.io "kafka-apps" deleted
kafkauser.kafka.strimzi.io "my-user" deleted

예를 들어 Apache Kafka 기능에 대해 새 Streams를 테스트할 때 단일 작업에서 모든 리소스를 삭제하는 것이 유용할 수 있습니다.

1.1.2.2. 하위 리소스의 상태 쿼리

-o 옵션으로 전달할 수 있는 다른 값이 있습니다. 예를 들어 -o yaml 을 사용하면 YAML 형식으로 출력을 얻을 수 있습니다. -o json 을 사용하면 JSON으로 반환됩니다.

oc get --help 에서 모든 옵션을 볼 수 있습니다.

가장 유용한 옵션 중 하나는 JSONPath 지원 이므로 JSONPath 표현식을 전달하여 Kubernetes API를 쿼리할 수 있습니다. JSONPath 표현식은 리소스의 특정 부분을 추출하거나 탐색할 수 있습니다.

예를 들어 JSONPath 표현식 {.status.listeners[?(@.name=="tls")].bootstrapServers} 를 사용하여 Kafka 사용자 정의 리소스의 상태에서 부트스트랩 주소를 가져와서 Kafka 클라이언트에서 사용할 수 있습니다.

여기에서 이 명령은 tls:이라는 리스너의 bootstrapServers 값을 검색합니다.

부트스트랩 주소 검색

oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="tls")].bootstrapServers}{"\n"}'

my-cluster-kafka-bootstrap.myproject.svc:9093

이름 조건을 변경하면 다른 Kafka 리스너의 주소를 가져올 수도 있습니다.

jsonpath 를 사용하여 사용자 정의 리소스에서 다른 속성 또는 속성 그룹을 추출할 수 있습니다.

1.1.3. Apache Kafka 사용자 정의 리소스 상태 정보 스트림

상태 속성은 특정 사용자 정의 리소스에 대한 상태 정보를 제공합니다.

다음 표에는 상태 정보(배포 시) 및 상태 속성을 정의하는 스키마를 제공하는 사용자 지정 리소스가 나열되어 있습니다.

스키마에 대한 자세한 내용은 Streams for Apache Kafka Custom Resource API Reference 를 참조하십시오.

Expand
표 1.2. 상태 정보를 제공하는 사용자 정의 리소스
Apache Kafka 리소스의 스트림스키마 참조…​에 상태 정보를 게시합니다.

Kafka

KafkaStatus
ListenerStatus
UsedNodePoolStatus
KafkaAutoRebalanceStatus

Kafka 클러스터, 리스너, 노드 풀, 확장 시 자동 재조정

KafkaNodePool

KafkaNodePoolStatus

노드 풀, 해당 역할 및 관련 Kafka 클러스터의 노드

KafkaTopic

KafkaTopicStatus

Kafka 클러스터의 Kafka 주제

KafkaUser

KafkaUserStatus

Kafka 클러스터의 Kafka 사용자

KafkaConnect

KafkaConnectStatus

Kafka Connect 클러스터 및 커넥터 플러그인

KafkaConnector

KafkaConnectorStatus

KafkaConnector 리소스

KafkaMirrorMaker2

KafkaMirrorMaker2Status

Kafka MirrorMaker 2 클러스터 및 내부 커넥터

KafkaBridge

KafkaBridgeStatus

Kafka 브리지

KafkaRebalance

KafkaRebalanceStatus

리밸런스의 상태 및 결과

StrimziPodSet

StrimziPodSetStatus

현재 버전 및 준비 상태의 Pod 수

리소스의 status 속성은 리소스 상태에 대한 정보를 제공합니다. status.conditionsstatus.observedGeneration 속성은 모든 리소스에 공통입니다.

status.conditions
상태 조건은 리소스의 현재 상태를 설명합니다. 상태 조건 속성은 사양에 지정된 구성에 정의된 대로 원하는 상태를 달성하는 리소스와 관련된 진행 상황을 추적하는 데 유용합니다. 상태 조건 속성은 리소스 상태가 변경된 시간 및 이유와 Operator가 원하는 상태를 실현하지 못하도록 하는 이벤트 세부 정보를 제공합니다.
status.observedGeneration
마지막으로 관찰된 생성은 Cluster Operator의 리소스의 최신 조정을 나타냅니다. observedGeneration 의 값이 metadata.generation (현재 배포 버전) 값과 다른 경우 Operator에서 리소스에 대한 최신 업데이트를 아직 처리하지 않았습니다. 이러한 값이 동일한 경우 상태 정보는 리소스에 대한 최신 변경 사항을 반영합니다.

상태 속성은 리소스 관련 정보도 제공합니다. 예를 들어 KafkaStatus 는 리스너 주소 및 Kafka 클러스터의 ID에 대한 정보를 제공합니다.

KafkaStatus 는 사용 중인 Apache Kafka 버전의 Kafka 및 Streams에 대한 정보도 제공합니다. operatorLastSuccessfulVersionkafkaVersion 의 값을 확인하여 Apache Kafka 또는 Kafka의 스트림 업그레이드가 완료되었는지 확인할 수 있습니다.

Apache Kafka의 스트림은 사용자 지정 리소스의 상태를 생성 및 유지 관리하고, 사용자 정의 리소스의 현재 상태를 주기적으로 평가하고 그에 따라 상태를 업데이트합니다. oc edit 를 사용하여 사용자 정의 리소스에서 업데이트를 수행할 때 (예: 해당 상태 ) 편집할 수 없습니다. 또한 상태를 변경하면 Kafka 클러스터 구성에 영향을 미치지 않습니다.

여기에서 Kafka 사용자 정의 리소스의 상태 속성이 표시됩니다.

Kafka 사용자 정의 리소스 상태

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
spec:
  # ...
status:
  clusterId: XP9FP2P-RByvEy0W4cOEUA 
1

  conditions: 
2

    - lastTransitionTime: '2023-01-20T17:56:29.396588Z'
      status: 'True'
      type: Ready 
3

  kafkaMetadataState: KRaft 
4

  kafkaVersion: 4.0.0 
5

  kafkaNodePools: 
6

    - name: broker
    - name: controller
  listeners: 
7

    - addresses:
        - host: my-cluster-kafka-bootstrap.prm-project.svc
          port: 9092
      bootstrapServers: 'my-cluster-kafka-bootstrap.prm-project.svc:9092'
      name: plain
    - addresses:
        - host: my-cluster-kafka-bootstrap.prm-project.svc
          port: 9093
      bootstrapServers: 'my-cluster-kafka-bootstrap.prm-project.svc:9093'
      certificates:
        - |
          -----BEGIN CERTIFICATE-----

          -----END CERTIFICATE-----
      name: tls
    - addresses:
        - host: >-
            2054284155.us-east-2.elb.amazonaws.com
          port: 9095
      bootstrapServers: >-
        2054284155.us-east-2.elb.amazonaws.com:9095
      certificates:
        - |
          -----BEGIN CERTIFICATE-----

          -----END CERTIFICATE-----
      name: external3
    - addresses:
        - host: ip-10-0-172-202.us-east-2.compute.internal
          port: 31644
      bootstrapServers: 'ip-10-0-172-202.us-east-2.compute.internal:31644'
      certificates:
        - |
          -----BEGIN CERTIFICATE-----

          -----END CERTIFICATE-----
      name: external4
  observedGeneration: 3 
8

  operatorLastSuccessfulVersion: 3.0 
9

1
Kafka 클러스터 ID입니다.
2
상태 조건은 Kafka 클러스터의 현재 상태를 설명합니다.
3
Ready 조건은 Cluster Operator가 트래픽을 처리할 수 있는 Kafka 클러스터를 간주함을 나타냅니다.
4
KRaft를 표시하는 Kafka 메타데이터 상태는 Kafka 메타데이터 및 조정 작업을 관리하고 있습니다.
5
Kafka 클러스터에서 사용하는 Kafka 버전입니다.
6
Kafka 클러스터에 속하는 노드 풀입니다.
7
리스너 는 유형별로 Kafka 부트스트랩 주소를 설명합니다.
8
observedGeneration 값은 Cluster Operator의 Kafka 사용자 정의 리소스의 마지막 조정을 나타냅니다.
9
마지막 조정을 성공적으로 완료한 Operator의 버전입니다.
참고

상태에 나열된 Kafka 부트스트랩 주소는 해당 끝점 또는 Kafka 클러스터가 Ready 상태에 있음을 표시하지 않습니다.

1.1.4. 사용자 정의 리소스의 상태 찾기

oc 를 사용자 정의 리소스의 status 하위 리소스와 함께 사용하여 리소스에 대한 정보를 검색합니다.

사전 요구 사항

  • OpenShift 클러스터입니다.
  • Cluster Operator가 실행 중입니다.

프로세스

  • 사용자 정의 리소스를 지정하고 -o jsonpath 옵션을 사용하여 표준 JSONPath 표현식을 적용하여 status 속성을 선택합니다.

    oc get kafka <kafka_resource_name> -o jsonpath='{.status}' | jq

    이 표현식은 지정된 사용자 정의 리소스에 대한 모든 상태 정보를 반환합니다. status.listeners 또는 status.observedGeneration 과 같은 점 표기법을 사용하여 표시하려는 상태 정보를 미세 조정할 수 있습니다.

    jq 명령줄 JSON 구문 분석 툴 을 사용하면 출력을 더 쉽게 읽을 수 있습니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동