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:
name: kafkatopics.kafka.strimzi.io
labels:
app: strimzi
spec:
group: kafka.strimzi.io
versions:
v1beta2
scope: Namespaced
names:
# ...
singular: kafkatopic
plural: kafkatopics
shortNames:
- kt
additionalPrinterColumns:
# ...
subresources:
status: {}
validation:
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 kt는oc get kafkatopic대신 약어로 사용할 수 있습니다. - 4
- 사용자 정의 리소스에서
get명령을 사용할 때 표시되는 정보입니다. - 5
- 리소스의 스키마 참조에 설명된 대로 CRD의 현재 상태입니다.
- 6
- openAPIV3Schema 검증에서는 주제 사용자 정의 리소스 생성에 대한 검증을 제공합니다. 예를 들어 항목에는 하나 이상의 파티션과 복제본이 필요합니다.
파일 이름에 인덱스 번호 뒤에 'Crd'가 포함되어 있으므로 Streams for Apache Kafka 설치 파일과 함께 제공되는 CRD YAML 파일을 식별할 수 있습니다.
다음은 KafkaTopic 사용자 정의 리소스의 해당 예입니다.
Kafka 주제 사용자 정의 리소스
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 1
replicas: 1
config:
retention.ms: 7200000
segment.bytes: 1073741824
status:
conditions:
lastTransitionTime: "2019-08-20T11:37:00.706Z"
status: "True"
type: Ready
observedGeneration: 1
/ ...
- 1
kind및apiVersion은 사용자 정의 리소스가 인스턴스인 CRD를 식별합니다.- 2
- 주제 또는 사용자가 속한
Kafka클러스터의 이름( Kafka 리소스 이름과 동일)을 정의하는KafkaTopic및KafkaUser리소스에만 적용되는 레이블입니다. - 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 kafkas 는 oc get kafka 와 동일한 결과를 가져옵니다.
리소스의 짧은 이름을 사용할 수도 있습니다. 짧은 이름을 학습하면 Apache Kafka의 Streams를 관리할 때 시간을 절약할 수 있습니다. Kafka 의 짧은 이름은 k 이므로 oc get k 를 실행하여 모든 Kafka 클러스터를 나열할 수도 있습니다.
Kafka 클러스터 나열
oc get k
NAME READY METADATA STATE WARNINGS
my-cluster True KRaft
| 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 를 참조하십시오.
| Apache Kafka 리소스의 스트림 | 스키마 참조 | …에 상태 정보를 게시합니다. |
|---|---|---|
|
|
| Kafka 클러스터, 리스너, 노드 풀, 확장 시 자동 재조정 |
|
|
| 노드 풀, 해당 역할 및 관련 Kafka 클러스터의 노드 |
|
|
| Kafka 클러스터의 Kafka 주제 |
|
|
| Kafka 클러스터의 Kafka 사용자 |
|
|
| Kafka Connect 클러스터 및 커넥터 플러그인 |
|
|
| KafkaConnector 리소스 |
|
|
| Kafka MirrorMaker 2 클러스터 및 내부 커넥터 |
|
|
| Kafka 브리지 |
|
|
| 리밸런스의 상태 및 결과 |
|
|
| 현재 버전 및 준비 상태의 Pod 수 |
리소스의 status 속성은 리소스 상태에 대한 정보를 제공합니다. status.conditions 및 status.observedGeneration 속성은 모든 리소스에 공통입니다.
status.conditions-
상태 조건은 리소스의 현재 상태를 설명합니다. 상태 조건 속성은
사양에지정된 구성에 정의된 대로 원하는 상태를 달성하는 리소스와 관련된 진행 상황을 추적하는 데 유용합니다. 상태 조건 속성은 리소스 상태가 변경된 시간 및 이유와 Operator가 원하는 상태를 실현하지 못하도록 하는 이벤트 세부 정보를 제공합니다. status.observedGeneration-
마지막으로 관찰된 생성은 Cluster Operator의 리소스의 최신 조정을 나타냅니다.
observedGeneration의 값이metadata.generation(현재 배포 버전) 값과 다른 경우 Operator에서 리소스에 대한 최신 업데이트를 아직 처리하지 않았습니다. 이러한 값이 동일한 경우 상태 정보는 리소스에 대한 최신 변경 사항을 반영합니다.
상태 속성은 리소스 관련 정보도 제공합니다. 예를 들어 KafkaStatus 는 리스너 주소 및 Kafka 클러스터의 ID에 대한 정보를 제공합니다.
KafkaStatus 는 사용 중인 Apache Kafka 버전의 Kafka 및 Streams에 대한 정보도 제공합니다. operatorLastSuccessfulVersion 및 kafkaVersion 의 값을 확인하여 Apache Kafka 또는 Kafka의 스트림 업그레이드가 완료되었는지 확인할 수 있습니다.
Apache Kafka의 스트림은 사용자 지정 리소스의 상태를 생성 및 유지 관리하고, 사용자 정의 리소스의 현재 상태를 주기적으로 평가하고 그에 따라 상태를 업데이트합니다. oc edit 를 사용하여 사용자 정의 리소스에서 업데이트를 수행할 때 (예: 해당 상태 ) 편집할 수 없습니다. 또한 상태를 변경하면 Kafka 클러스터 구성에 영향을 미치지 않습니다.
여기에서 Kafka 사용자 정의 리소스의 상태 속성이 표시됩니다.
Kafka 사용자 정의 리소스 상태
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
spec:
# ...
status:
clusterId: XP9FP2P-RByvEy0W4cOEUA
conditions:
- lastTransitionTime: '2023-01-20T17:56:29.396588Z'
status: 'True'
type: Ready
kafkaMetadataState: KRaft
kafkaVersion: 4.0.0
kafkaNodePools:
- name: broker
- name: controller
listeners:
- 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
operatorLastSuccessfulVersion: 3.0
- 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 구문 분석 툴 을 사용하면 출력을 더 쉽게 읽을 수 있습니다.