Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure Kubernetes Service'te (AKS) Strimzi Küme operatörü ve yüksek oranda kullanılabilir bir Kafka kümesi dağıtacaksınız.
Uyarı
Bu dağıtım için gerekli altyapıyı oluşturmadıysanız, kurulumu yapmak için Azure Kubernetes Service'te (AKS) Kafka dağıtımı için altyapıyı hazırlama başlığındaki adımları izleyin ve sonra bu makaleye dönebilirsiniz.
Strimzi dağıtımı
Strimzi Küme operatörü kendi ad alanında strimzi-operatordağıtılır ve Kafka küme bileşenlerinin kafka dağıtıldığı ad alanını izleyecek şekilde yapılandırılır. Yüksek kullanılabilirlik için operatör şunları kullanır:
- Lider seçimiyle birden çok çoğaltma: Bir çoğaltma, dağıtılan kaynakları yöneten çalışan lider görevini görürken, diğerleri beklemede kalır. Lider başarısız olursa, yedek kopya devralır.
- Bölgesel dağıtım: Üç kopya (her kullanılabilirlik alanında birer tane), bölge kesintilerine karşı dayanıklılık sağlar. Pod anti-bağımlılık kuralları, aynı bölgede birden çok çoğaltmanın zamanlanmasını engeller.
- Pod Kesintisi Bütçesi: Operatör dağıtımı tarafından otomatik olarak oluşturulan bu bütçe, gönüllü kesintiler sırasında en az bir kopyanın kullanılabilir durumda kalmasını sağlar.
Bu mimari, altyapı bakımı veya kısmi kesintiler sırasında bile Strimzi Cluster Operator'ın yüksek oranda kullanılabilir kalmasını sağlar.
Helm kullanarak Strimzi Cluster Operator'ı yükleme
komutunu kullanarak
kubectl create namespaceStrimzi Cluster Operator ve Kafka kümesi için ad alanlarını oluşturun.kubectl create namespace strimzi-operator kubectl create namespace kafkaAşağıdaki betiği kullanarak Helm grafiği için belirli yapılandırmalar sağlamak üzere bir
values.yamldosya oluşturun:cat <<EOF > values.yaml replicas: 3 watchNamespaces: - kafka leaderElection: enabled: true podDisruptionBudget: enabled: true affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: name operator: In values: - strimzi-cluster-operator topologyKey: topology.kubernetes.io/zone EOFkomutunu kullanarak Strimzi Küme İşleci'ni
helm installyükleyin.helm install strimzi-cluster-operator oci://quay.io/strimzi-helm/strimzi-kafka-operator \ --namespace strimzi-operator \ --values values.yamlKomutunu kullanarak
kubectl getStrimzi Cluster Operator'ın başarıyla dağıtıldığından ve tüm podların çalışır durumda olduğundan emin olun.kubectl get pods -n strimzi-operatorÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME READY STATUS RESTARTS AGE strimzi-cluster-operator-6f7588bb79-bvfdp 1/1 Running 0 1d22h strimzi-cluster-operator-6f7588bb79-lfcp6 1/1 Running 0 1d22h strimzi-cluster-operator-6f7588bb79-qdlm8 1/1 Running 0 1d22h
Helm kullanarak Strimzi Drain Cleaner'ı yükleme
Strimzi Drain Cleaner, broker podları için boşaltma isteklerini keserek sorunsuz Kubernetes düğüm boşaltması sağlar. Bu sayede Kafka bölüm çoğaltmalarının eksik çoğaltılmasını önler ve küme sağlığını ve güvenilirliğini korur.
Yüksek kullanılabilirlik için, kullanılabilirlik bölgeleri arasında birden fazla kopya ile Drain Cleaner'ı dağıtın ve bölge kesintileri veya küme güncellemeleri sırasında işlevsel kalmasını sağlamak için pod kesinti bütçeleriyle yapılandırın.
Strimzi Drain Cleaner kurulumu için bir Helm grafiği mevcuttur:
komutunu kullanarak Drain Cleaner için ad alanını
kubectl create namespaceoluşturun.kubectl create namespace strimzi-drain-cleanerAşağıdaki betiği kullanarak Helm grafiği için belirli yapılandırmaları geçersiz kılmak için bir
values.yamldosya oluşturun:cat <<EOF > values.yaml replicaCount: 3 namespace: create: false podDisruptionBudget: create: true affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - strimzi-drain-cleaner topologyKey: topology.kubernetes.io/zone EOFkomutunu kullanarak Strimzi Drain Cleaner'ı
helm installyükleyin.helm install strimzi-drain-cleaner oci://quay.io/strimzi-helm/strimzi-drain-cleaner \ --namespace strimzi-drain-cleaner \ --values values.yamlStrimzi Drain Cleaner'ın başarıyla dağıtıldığını ve komutunu kullanarak
kubectl gettüm podların çalışır durumda olduğunu doğrulayın.kubectl get pods -n strimzi-drain-cleanerÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME READY STATUS RESTARTS AGE strimzi-drain-cleaner-6d694bd55b-dshkp 1/1 Running 0 1d22h strimzi-drain-cleaner-6d694bd55b-l8cbf 1/1 Running 0 1d22h strimzi-drain-cleaner-6d694bd55b-wj6xx 1/1 Running 0 1d22h
Kafka kümesi mimarisi ve dikkat edilmesi gerekenler
Strimzi Küme Operatörü, özel kaynak tanımlarını kullanarak AKS'de bildirim temelli Kafka dağıtımını etkinleştirir. Strimzi 0.46'dan başlayarak Kafka kümeleri ZooKeeper yerine Kafka içinde KRaft kullanır.
Strimzi, her bir havuza KafkaNodePool tanımlanmış bir rol (broker, denetleyici veya her ikisi) atandığı özel kaynağı kullanır.
- Kafka aracıları iletilerin işlenmesini ve depolanmasını işler.
- Kafka denetleyicileri , Raft konsensüs protokolunu kullanarak Kafka meta verilerini yönetir.
Yüksek kullanılabilirlik için hedef mimari şu şekilde tanımlanır:
- Aracılar ve denetleyiciler için, her birinin üçer çoğaltması olan ayrı
KafkaNodePools. - Podları kullanılabilirlik alanları ve düğümler arasında dağıtan Topoloji Yayma Kısıtlamaları.
- Belirli düğüm havuzlarıyla kaynak kullanımını en iyi duruma getiren düğüm bağıntısı kuralları.
- Aracı iletileri ve meta veriler için ayrı birimlere sahip Azure Disk CSI sürücüsünden kalıcı birimler.
Bu mimari ölçeklenebilirliği ve hataya dayanıklılığı artırırken, aracıların ve denetleyicilerin iş yükü gereksinimlerini karşılayacak şekilde bağımsız olarak ölçeklendirilmesine olanak sağlar.
Üretim Kafka kümeleri için JVM yapılandırması
Java Sanal Makinesi'nin (JVM) ayarlanması, özellikle üretim ortamlarında en iyi Kafka aracısı ve denetleyici performansı için kritik öneme sahiptir. Düzgün yapılandırılmış JVM ayarları, her bir aracının ağır yük altında kararlılığını sağlamaya, verimliliği en üst düzeye çıkarmaya ve gecikme süresini en aza indirmeye yardımcı olur.
Kafka'nın oluşturucusu LinkedIn, en yoğun kümelerinden birinde Java'da Kafka çalıştırmak için önerilen parametrelerini paylaştı: Apache Kafka Java Yapılandırması. Bu kılavuz, Kafka aracıları için temel olarak bu yapılandırmayı kullanır. Belirli iş yükü gereksinimlerinizi karşılayacak değişiklikler yapabilirsiniz.
jvmOptions:
# Sets initial and maximum heap size to 6GB - critical for memory-intensive Kafka operations
# Equal sizing prevents resizing pauses
"-Xms": "6g"
"-Xmx": "6g"
"-XX":
# Initial metaspace size (class metadata storage area) at 96MB
"MetaspaceSize": "96m"
# Enables the Garbage-First (G1) garbage collector, optimized for better predictability and lower pause times
"UseG1GC": "true"
# Targets maximum GC pause time of 20ms - keeps latency predictable
"MaxGCPauseMillis": "20"
# Starts concurrent GC cycle when heap is 35% full - balances CPU overhead and frequency
"InitiatingHeapOccupancyPercent": "35"
# Sets G1 heap region size to 16MB - affects collection efficiency and pause times
"G1HeapRegionSize": "16M"
# Keeps at least 50% free space after metaspace GC - prevents frequent resizing
"MinMetaspaceFreeRatio": "50"
# Limits expansion to allow up to 80% free space in metaspace after GC
"MaxMetaspaceFreeRatio": "80"
# Makes explicit System.gc() calls run concurrently instead of stopping all threads
"ExplicitGCInvokesConcurrent": "true"
Kafka düğüm havuzlarını dağıtın
Bu bölümde, biri aracılar ve diğeri denetleyiciler için olmak üzere iki Kafka düğüm havuzu oluşturacaksınız.
komutunu kullanarak iki Kafka düğüm havuzu oluşturmak için YAML bildirimini
kubectl applyuygulayın.kubectl apply -n kafka -f - <<EOF --- apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: controller labels: strimzi.io/cluster: kafka-aks-cluster spec: replicas: 3 roles: - controller resources: requests: memory: 4Gi limits: memory: 6Gi template: pod: metadata: labels: kafkaRole: controller affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: app operator: In values: - kafka podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: kafkaRole: broker topologyKey: kubernetes.io/hostname topologySpreadConstraints: - labelSelector: matchLabels: kafkaRole: controller maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway - labelSelector: matchLabels: kafkaRole: controller maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway storage: type: jbod volumes: - id: 0 type: persistent-claim size: 25Gi kraftMetadata: shared deleteClaim: false class: kafka-premium-ssd-v2 jvmOptions: "-Xms": "3g" "-Xmx": "3g" "-XX": "MetaspaceSize": "96m" "UseG1GC": "true" "MaxGCPauseMillis": "20" "InitiatingHeapOccupancyPercent": "35" "G1HeapRegionSize": "16M" "MinMetaspaceFreeRatio": "50" "MaxMetaspaceFreeRatio": "80" "ExplicitGCInvokesConcurrent": "true" --- apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: broker labels: strimzi.io/cluster: kafka-aks-cluster spec: replicas: 3 roles: - broker resources: requests: memory: 8Gi limits: memory: 10Gi template: pod: metadata: labels: kafkaRole: broker affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: app operator: In values: - kafka podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: kafkaRole: controller topologyKey: kubernetes.io/hostname topologySpreadConstraints: - labelSelector: matchLabels: kafkaRole: broker maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway - labelSelector: matchLabels: kafkaRole: broker maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway storage: type: jbod volumes: - id: 0 type: persistent-claim size: 50Gi deleteClaim: false class: kafka-premium-ssd-v2 - id: 1 type: persistent-claim size: 25Gi kraftMetadata: shared deleteClaim: false class: kafka-premium-ssd-v2 jvmOptions: "-Xms": "6g" "-Xmx": "6g" "-XX": "MetaspaceSize": "96m" "UseG1GC": "true" "MaxGCPauseMillis": "20" "InitiatingHeapOccupancyPercent": "35" "G1HeapRegionSize": "16M" "MinMetaspaceFreeRatio": "50" "MaxMetaspaceFreeRatio": "80" "ExplicitGCInvokesConcurrent": "true" EOF
Kafka düğüm havuzlarını oluşturduktan sonra, sonraki adım bu havuzları işleyen bir Kafka ekosistemine bağlayan bir Kafka kümesi özel kaynağı tanımlamaktır. Bu mimari, Kafka düğüm havuzlarının altyapı yönlerini yönetirken, Kafka küme kaynağının uygulama düzeyi yapılandırmalarını ele aldığı bir sorumluluk ayrımı deseni izler.
Kafka kümesini dağıt
Kafka kümesini oluşturmadan önce,
kubectl applykomutunu kullanarak JMX Prometheus Exporter yapılandırmasını içeren bir ConfigMap oluşturun. Bu ConfigMap, Kafka'nın iç JMX ölçümlerinin Prometheus biçiminde nasıl dönüştürüldüğünü ve kullanıma sunulduğunı tanımlar ve Kafka ekosisteminizin kapsamlı bir şekilde izlenmesini sağlar. Bu yapılandırmada tanımlanan desenler, JMX ölçüm yollarını uygun tür ve etiketlerle düzgün biçimlendirilmiş Prometheus ölçümleriyle eşler.kubectl apply -n kafka -f - <<'EOF' --- apiVersion: v1 kind: ConfigMap metadata: name: kafka-metrics labels: app: strimzi data: kafka-metrics-config.yaml: | # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics lowercaseOutputName: true rules: # Special cases and very specific rules - pattern: kafka.server<type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)><>Value name: kafka_server_$1_$2 type: GAUGE labels: clientId: "$3" topic: "$4" partition: "$5" - pattern: kafka.server<type=(.+), name=(.+), clientId=(.+), brokerHost=(.+), brokerPort=(.+)><>Value name: kafka_server_$1_$2 type: GAUGE labels: clientId: "$3" broker: "$4:$5" - pattern: kafka.server<type=(.+), cipher=(.+), protocol=(.+), listener=(.+), networkProcessor=(.+)><>connections name: kafka_server_$1_connections_tls_info type: GAUGE labels: cipher: "$2" protocol: "$3" listener: "$4" networkProcessor: "$5" - pattern: kafka.server<type=(.+), clientSoftwareName=(.+), clientSoftwareVersion=(.+), listener=(.+), networkProcessor=(.+)><>connections name: kafka_server_$1_connections_software type: GAUGE labels: clientSoftwareName: "$2" clientSoftwareVersion: "$3" listener: "$4" networkProcessor: "$5" - pattern: "kafka.server<type=(.+), listener=(.+), networkProcessor=(.+)><>(.+-total):" name: kafka_server_$1_$4 type: COUNTER labels: listener: "$2" networkProcessor: "$3" - pattern: "kafka.server<type=(.+), listener=(.+), networkProcessor=(.+)><>(.+):" name: kafka_server_$1_$4 type: GAUGE labels: listener: "$2" networkProcessor: "$3" - pattern: kafka.server<type=(.+), listener=(.+), networkProcessor=(.+)><>(.+-total) name: kafka_server_$1_$4 type: COUNTER labels: listener: "$2" networkProcessor: "$3" - pattern: kafka.server<type=(.+), listener=(.+), networkProcessor=(.+)><>(.+) name: kafka_server_$1_$4 type: GAUGE labels: listener: "$2" networkProcessor: "$3" # Some percent metrics use MeanRate attribute # Ex) kafka.server<type=(KafkaRequestHandlerPool), name=(RequestHandlerAvgIdlePercent)><>MeanRate - pattern: kafka.(\w+)<type=(.+), name=(.+)Percent\w*><>MeanRate name: kafka_$1_$2_$3_percent type: GAUGE # Generic gauges for percents - pattern: kafka.(\w+)<type=(.+), name=(.+)Percent\w*><>Value name: kafka_$1_$2_$3_percent type: GAUGE - pattern: kafka.(\w+)<type=(.+), name=(.+)Percent\w*, (.+)=(.+)><>Value name: kafka_$1_$2_$3_percent type: GAUGE labels: "$4": "$5" # Generic per-second counters with 0-2 key/value pairs - pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+), (.+)=(.+)><>Count name: kafka_$1_$2_$3_total type: COUNTER labels: "$4": "$5" "$6": "$7" - pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+)><>Count name: kafka_$1_$2_$3_total type: COUNTER labels: "$4": "$5" - pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*><>Count name: kafka_$1_$2_$3_total type: COUNTER # Generic gauges with 0-2 key/value pairs - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Value name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" "$6": "$7" - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Value name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" - pattern: kafka.(\w+)<type=(.+), name=(.+)><>Value name: kafka_$1_$2_$3 type: GAUGE # Emulate Prometheus 'Summary' metrics for the exported 'Histogram's. # Note that these are missing the '_sum' metric! - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Count name: kafka_$1_$2_$3_count type: COUNTER labels: "$4": "$5" "$6": "$7" - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*), (.+)=(.+)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" "$6": "$7" quantile: "0.$8" - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Count name: kafka_$1_$2_$3_count type: COUNTER labels: "$4": "$5" - pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" quantile: "0.$6" - pattern: kafka.(\w+)<type=(.+), name=(.+)><>Count name: kafka_$1_$2_$3_count type: COUNTER - pattern: kafka.(\w+)<type=(.+), name=(.+)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: quantile: "0.$4" # KRaft overall related metrics # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics - pattern: "kafka.server<type=raft-metrics><>(.+-total|.+-max):" name: kafka_server_raftmetrics_$1 type: COUNTER - pattern: "kafka.server<type=raft-metrics><>(current-state): (.+)" name: kafka_server_raftmetrics_$1 value: 1 type: UNTYPED labels: $1: "$2" - pattern: "kafka.server<type=raft-metrics><>(.+):" name: kafka_server_raftmetrics_$1 type: GAUGE # KRaft "low level" channels related metrics # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics - pattern: "kafka.server<type=raft-channel-metrics><>(.+-total|.+-max):" name: kafka_server_raftchannelmetrics_$1 type: COUNTER - pattern: "kafka.server<type=raft-channel-metrics><>(.+):" name: kafka_server_raftchannelmetrics_$1 type: GAUGE # Broker metrics related to fetching metadata topic records in KRaft mode - pattern: "kafka.server<type=broker-metadata-metrics><>(.+):" name: kafka_server_brokermetadatametrics_$1 type: GAUGE --- apiVersion: v1 kind: ConfigMap metadata: name: cruise-control-metrics labels: app: strimzi data: metrics-config.yaml: | # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics lowercaseOutputName: true rules: - pattern: kafka.cruisecontrol<name=(.+)><>(\w+) name: kafka_cruisecontrol_$1_$2 type: GAUGE EOFKomutunu kullanarak daha önce oluşturulan düğüm havuzlarını eksiksiz bir Kafka ekosistemine bağlayan Kafka küme kaynağını dağıtın
kubectl apply. Bu özel kaynak aşağıdaki kritik bileşenleri yapılandırıyor:- Kafka çekirdek yapılandırması: Çoğaltma faktörlerini, dinleyici ayarlarını ve Kafka'ya özgü diğer parametreleri tanımlar.
- Cruise Control: Otomatik küme dengeleme ve izleme özellikleri sağlar.
- Varlık İşleci: Kubernetes kaynakları aracılığıyla Kafka konularını ve kullanıcılarını bildirimli olarak yöneten Konu başlığını ve Kullanıcı İşleçlerini dağıtır.
- JMX ölçümleri: Önceden tanımlanmış ConfigMap'leri kullanarak ölçümlerin açığa çıkarılmasını yapılandırır.
kubectl apply -n kafka -f - <<EOF --- apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: kafka-aks-cluster annotations: strimzi.io/node-pools: enabled strimzi.io/kraft: enabled spec: kafka: version: 3.9.0 metadataVersion: 3.9-IV0 rack: topologyKey: topology.kubernetes.io/zone template: podDisruptionBudget: maxUnavailable: 2 listeners: - name: internal port: 9092 type: internal tls: true config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 default.replication.factor: 3 min.insync.replicas: 2 log.segment.bytes: 1073741824 log.retention.hours: 168 log.retention.check.interval.ms: 300000 metricsConfig: type: jmxPrometheusExporter valueFrom: configMapKeyRef: name: kafka-metrics key: kafka-metrics-config.yaml cruiseControl: metricsConfig: type: jmxPrometheusExporter valueFrom: configMapKeyRef: name: cruise-control-metrics key: metrics-config.yaml entityOperator: topicOperator: {} userOperator: {} EOFDağıtıldıktan sonra,
kubectl getkomutunu kullanarak tüm KafkaNodePools, Kafka küme kaynakları ve bunlara karşılık gelen podların oluşturulup oluşturulmadığını ve çalışır durumda olup olmadığını kontrol ederek Kafka dağıtımınızı doğrulayın.kubectl get pods,kafkanodepool,kafka -n kafkaÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME READY STATUS RESTARTS AGE pod/kafka-aks-cluster-broker-0 1/1 Running 0 1d22h pod/kafka-aks-cluster-broker-1 1/1 Running 0 1d22h pod/kafka-aks-cluster-broker-2 1/1 Running 0 1d22h pod/kafka-aks-cluster-controller-3 1/1 Running 0 1d22h pod/kafka-aks-cluster-controller-4 1/1 Running 0 1d22h pod/kafka-aks-cluster-controller-5 1/1 Running 0 1d22h pod/kafka-aks-cluster-cruise-control-844b69848-87rf6 1/1 Running 0 1d22h pod/kafka-aks-cluster-entity-operator-6f949f6774-t8wql 2/2 Running 0 1d22h NAME DESIRED REPLICAS ROLES NODEIDS kafkanodepool.kafka.strimzi.io/broker 3 ["broker"] [0,1,2] kafkanodepool.kafka.strimzi.io/controller 3 ["controller"] [3,4,5] NAME DESIRED KAFKA REPLICAS DESIRED ZK REPLICAS READY METADATA STATE WARNINGS kafka.kafka.strimzi.io/kafka-aks-cluster
Kafka Kullanıcısı ve Konusu Oluşturma
Kafka kümesi özel kaynağıyla dağıtılan Strimzi Varlık İşleci, Kubernetes özel kaynaklarını (KafkaTopic ve KafkaUser) gerçek Kafka kaynaklarına çevirir. Bu, GitOps iş akışlarını ve tutarlı yapılandırma yönetimini etkinleştirir.
Uyarı
Varlık İşleci'ni kullanarak Kafka Konuları ve Kullanıcıları bildirimli olarak oluşturmak isteğe bağlıdır. Bunları geleneksel Kafka CLI araçlarını veya API'lerini kullanarak da oluşturabilirsiniz. Ancak bildirim temelli yaklaşım, sürüm denetimi, denetim izleri ve ortamlar arasında tutarlı yönetim gibi avantajlar sunar.
komutunu kullanarak
kubectl applyKonu İşleci ile bir Kafka Konusu oluşturun.kubectl apply -n kafka -f - << EOF apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: test-topic labels: strimzi.io/cluster: kafka-aks-cluster spec: replicas: 3 partitions: 4 config: retention.ms: 7200000 segment.bytes: 1073741824 EOFKafka konusunun başarıyla oluşturulduğunu
kubectl getkomutunu kullanarak doğrulayın.kubectl get kafkatopic -n kafkaÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME CLUSTER PARTITIONS REPLICATION FACTOR READY test-topic kafka-aks-cluster 4 3 TrueDaha fazla bilgi için bkz . Kafka konularını yönetmek için Konu İşleci'ni kullanma.
komutunu kullanarak
kubectl applyKullanıcı İşleci ile bir Kafka Kullanıcısı oluşturun.kubectl apply -f - <<EOF apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: test-user labels: strimzi.io/cluster: kafka-aks-cluster spec: authentication: type: tls authorization: type: simple acls: - resource: type: topic name: test-topic patternType: literal operations: - Describe - Read host: "*" - resource: type: group name: test-group patternType: literal operations: - Read host: "*" - resource: type: topic name: test-topic patternType: literal operations: - Create - Describe - Write host: "*" EOFDaha fazla bilgi için bkz. Kafka kullanıcılarını yönetmek için Kullanıcı operatörünü kullanma.
Sonraki adım
Katkıda Bulunanlar
Microsoft bu makaleyi korur. Başlangıçta aşağıdaki katkıda bulunanlar yazdı:
- Sergio Navar | Kıdemli Müşteri Mühendisi
- Erin Schaffer | İçerik Geliştirici 2