本指南探討了如何在 Kube.NETes 上自動(dòng)擴(kuò)展您的 Kinesis Data Streams 消費(fèi)者應(yīng)用程序,以便您可以節(jié)省成本并提高資源效率。
想了解如何在 Kubernetes 上自動(dòng)擴(kuò)展您的 Kinesis Data Streams 消費(fèi)者應(yīng)用程序,以便您可以節(jié)省成本并提高資源效率?該博客提供了有關(guān)如何做到這一點(diǎn)的分步指南。
通過利用 Kubernetes 自動(dòng)擴(kuò)展 Kinesis 消費(fèi)者應(yīng)用程序,您可以受益于其內(nèi)置功能,例如 Horizontal Pod Autoscaler。
什么是 Amazon Kinesis 和 Kinesis Data Streams?
Amazon Kinesis是一個(gè)用于實(shí)時(shí)數(shù)據(jù)處理、攝取和分析的平臺(tái)。Kinesis Data Streams是一種無服務(wù)器流數(shù)據(jù)服務(wù)(Kinesis 流數(shù)據(jù)平臺(tái)的一部分,還有Kinesis Data Firehose、Kinesis Video Streams和Kinesis Data Analytics。
Kinesis Data Streams 可以彈性擴(kuò)展并持續(xù)適應(yīng)數(shù)據(jù)攝取率和流消費(fèi)率的變化。它可用于構(gòu)建實(shí)時(shí)數(shù)據(jù)分析應(yīng)用程序、實(shí)時(shí)儀表板和實(shí)時(shí)數(shù)據(jù)管道。
讓我們首先概述 Kinesis Data Streams 的一些關(guān)鍵概念。
Kinesis Data Streams:高級(jí)架構(gòu)
- Kinesis 數(shù)據(jù)流是一組分片。每個(gè)分片都有一系列數(shù)據(jù)記錄。
- 生產(chǎn)者不斷將數(shù)據(jù)推送到 Kinesis Data Streams,消費(fèi)者實(shí)時(shí)處理數(shù)據(jù)。
- 分區(qū) 鍵用于按流中的分片對(duì)數(shù)據(jù)進(jìn)行分組。
- Kinesis Data Streams 將屬于一個(gè)流的數(shù)據(jù)記錄分成多個(gè)分片。
- 它使用與每個(gè)數(shù)據(jù)記錄關(guān)聯(lián)的分區(qū)鍵來確定給定數(shù)據(jù)記錄屬于哪個(gè)分片。
- 消費(fèi)者從 Amazon Kinesis Data Streams 獲取記錄,對(duì)其進(jìn)行處理,并將結(jié)果存儲(chǔ)在 Amazon DynamoDB、Amazon Redshift、Amazon S3 等中。
- 這些消費(fèi)者也稱為 Amazon Kinesis Data Streams 應(yīng)用程序。
- 開發(fā)可以處理來自 KDS 數(shù)據(jù)流的數(shù)據(jù)的自定義消費(fèi)者應(yīng)用程序的方法之一是使用Kinesis Client Library ( KCL)。
Kinesis 消費(fèi)者應(yīng)用程序如何橫向擴(kuò)展?
Kinesis Client Library 確保有一個(gè)記錄處理器為每個(gè)分片運(yùn)行并處理來自該分片的數(shù)據(jù)。KCL通過處理與分布式計(jì)算和可擴(kuò)展性相關(guān)的許多復(fù)雜任務(wù),幫助您使用和處理來自 Kinesis 數(shù)據(jù)流的數(shù)據(jù)。它連接到數(shù)據(jù)流,枚舉數(shù)據(jù)流中的分片,并使用租約來協(xié)調(diào)分片與其消費(fèi)者應(yīng)用程序的關(guān)聯(lián)。
記錄處理器為其管理的每個(gè)分片實(shí)例化。KCL從數(shù)據(jù)流中拉取數(shù)據(jù)記錄,將記錄推送到相應(yīng)的記錄處理器,檢查點(diǎn)處理記錄。更重要的是,當(dāng)工作實(shí)例計(jì)數(shù)發(fā)生變化或數(shù)據(jù)流重新分片(分片被拆分或合并)時(shí),它會(huì)平衡分片-工作關(guān)聯(lián)(租約)。這意味著您可以通過簡(jiǎn)單地添加更多實(shí)例來擴(kuò)展您的 Kinesis Data Streams 應(yīng)用程序,因?yàn)镵CL它將自動(dòng)平衡實(shí)例之間的分片。
但是,當(dāng)負(fù)載增加時(shí),您仍然需要一種方法來擴(kuò)展您的應(yīng)用程序。當(dāng)然,您可以手動(dòng)執(zhí)行此操作或構(gòu)建自定義解決方案來完成此操作。
這是Kubernetes 事件驅(qū)動(dòng)的自動(dòng)縮放(KEDA) 可以提供幫助的地方。是一個(gè)基于 Kubernetes 的事件驅(qū)動(dòng)的自動(dòng)伸縮組件,可以像 Kinesis 一樣監(jiān)控事件源,并根據(jù)需要處理的事件數(shù)量來KEDA伸縮底層Deployment(和s)。Pod
為見證自動(dòng)縮放的運(yùn)行,您將使用一個(gè) JAVA 應(yīng)用程序,該應(yīng)用程序使用 Kinesis Client Library ( KCL) 2.x 使用來自 Kinesis Data Stream 的數(shù)據(jù)。它將部署到Amazon EKS上的 Kubernetes 集群,并使用KEDA. 該應(yīng)用程序包括ShardRecordProcessor處理來自 Kinesis 流的數(shù)據(jù)并將其保存到 DynamoDB 表的實(shí)現(xiàn)。我們將使用 AWS CLI 為 Kinesis 流生成數(shù)據(jù)并觀察應(yīng)用程序的擴(kuò)展。
之前,我們深入了解,這里是KEDA.
什么是科達(dá)?
KEDA是一個(gè)開源 CNCF 項(xiàng)目,它建立在原生 Kubernetes 原語(yǔ)(例如 Horizontal Pod Autoscaler)之上,可以添加到任何 Kubernetes 集群。以下是其關(guān)鍵組件的高級(jí)概述(您可以參考KEDA 文檔進(jìn)行深入研究):
- 該keda-operator-metrics-apiserver組件KEDA充當(dāng)Kubernetes 指標(biāo)服務(wù)器,為 Horizontal Pod Autoscaler 公開指標(biāo)
- KEDA Scaler與外部系統(tǒng)(例如 redis)集成以獲取這些指標(biāo)(例如,列表的長(zhǎng)度),以根據(jù)需要處理的事件數(shù)量驅(qū)動(dòng) Kubernetes 中任何容器的自動(dòng)縮放。
- 組件的作用keda-operator是activate和deactivateDeployment;即,縮放到零和從零開始。
您將看到Kinesis Stream KEDA 縮放器正在運(yùn)行,它根據(jù) AWS Kinesis Stream 的分片數(shù)進(jìn)行縮放。
現(xiàn)在讓我們繼續(xù)本文的實(shí)際部分。
先決條件
除了 AWS 賬戶外,您還需要安裝AWS CLI、kubectl、Docker、 Java 11 和Maven。
設(shè)置 EKS 集群、創(chuàng)建 DynamoDB 表和 Kinesis 數(shù)據(jù)流
您可以通過多種方式創(chuàng)建Amazon EKS 集群。我更喜歡使用eksctl CLI,因?yàn)樗峁┝吮憷?。使用以下方法?chuàng)建 EKS 集群eksctl非常簡(jiǎn)單:
eksctl create cluster --name <cluster name> --region <region e.g. us-east-1>
有關(guān)詳細(xì)信息,請(qǐng)參閱Amazon EKS 入門 – eksctl文檔。
創(chuàng)建一個(gè) DynamoDB 表來保存應(yīng)用程序數(shù)據(jù)。您可以使用 AWS CLI 通過以下命令創(chuàng)建表:
aws dynamodb create-table --table-name users --attribute-definitions AttributeName=email,AttributeType=S --key-schema AttributeName=email,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
使用 AWS CLI創(chuàng)建一個(gè)包含兩個(gè)分片的 Kinesis 流:
aws kinesis create-stream --stream-name kinesis-keda-demo --shard-count 2
克隆此 Github 存儲(chǔ)庫(kù)并將其更改為正確的目錄:
git clone https://github.com/abhirockzz/kinesis-keda-autoscalingcd kinesis-keda-autoscaling
好的,讓我們開始吧!
在 EKS 上設(shè)置和配置 KEDA
出于本教程的目的,您將使用YAML 文件部署KEDA. 但您也可以使用Helm 圖表。
安裝KEDA:
# update version 2.8.2 if requiredkubectl Apply -f https://github.com/kedacore/keda/releases/download/v2.8.2/keda-2.8.2.yaml
驗(yàn)證安裝:
# check Custom Resource Definitionskubectl get crd# check KEDA Deploymentskubectl get deployment -n keda# check KEDA operator logskubectl logs -f $(kubectl get pod -l=app=keda-operator -o jsnotallow='{.items[0].metadata.name}' -n keda) -n keda
配置 IAM 角色
KEDA 操作員和 Kinesis 消費(fèi)者應(yīng)用程序需要調(diào)用 AWS API。由于兩者都將作為 EKS 中的 s 運(yùn)行Deployment,我們將使用IAM 服務(wù)賬戶角色 (IRSA)來提供必要的權(quán)限。
在這種特殊情況下:
- KEDA運(yùn)算符需要能夠獲取 Kinesis 流的分片計(jì)數(shù):它通過使用DescribeStreamSummaryAPI 來實(shí)現(xiàn)。
- 應(yīng)用程序(具體來說是 KCL 庫(kù))需要與 Kinesis 和 DynamoDB 交互:它需要一堆IAM 權(quán)限才能這樣做。
為 KEDA 操作員配置 IRSA
將您的 AWS 賬戶 ID 和 OIDC 身份提供商設(shè)置為環(huán)境變量:
ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)#update the cluster name and region as requiredexport EKS_CLUSTER_NAME=demo-eks-clusterexport AWS_REGION=us-east-1OIDC_PROVIDER=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:////")
JSON為角色創(chuàng)建一個(gè)包含可信實(shí)體的文件:
read -r -d '' TRust_RELATIONSHIP <<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:aud": "sts.amazonaws.com", "${OIDC_PROVIDER}:sub": "system:serviceaccount:keda:keda-operator" } } } ]}EOFecho "${TRUST_RELATIONSHIP}" > trust_keda.json
現(xiàn)在,創(chuàng)建 IAM 角色并附加策略(查看policy_kinesis_keda.json文件了解詳細(xì)信息):
export ROLE_NAME=keda-operator-kinesis-roleaws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://trust_keda.json --description "IRSA for kinesis KEDA scaler on EKS"aws iam create-policy --policy-name keda-kinesis-policy --policy-document file://policy_kinesis_keda.jsonaws iam attach-role-policy --role-name $ROLE_NAME --policy-arn=arn:aws:iam::${ACCOUNT_ID}:policy/keda-kinesis-policy
關(guān)聯(lián) IAM 角色和服務(wù)帳戶:
kubectl annotate serviceaccount -n keda keda-operator eks.amazonaws.com/role-arn=arn:aws:iam::${ACCOUNT_ID}:role/${ROLE_NAME}# verify the annotation kubectl describe serviceaccount/keda-operator -n keda
您需要重新啟動(dòng)KEDA操作員Deployment才能生效:
kubectl rollout restart deployment.apps/keda-operator -n keda# to verify, confirm that the KEDA operator has the right environment variableskubectl describe pod -n keda $(kubectl get po -l=app=keda-operator -n keda --output=jsnotallow={.items..metadata.name}) | grep "^s*AWS_"# expected outputAWS_STS_REGIONAL_ENDPOINTS: regionalAWS_DEFAULT_REGION: us-east-1AWS_REGION: us-east-1AWS_ROLE_ARN: arn:aws:iam::<AWS_ACCOUNT_ID>:role/keda-operator-kinesis-roleAWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
為 KCL 消費(fèi)者應(yīng)用程序配置 IRSA
首先創(chuàng)建一個(gè) Kubernetes 服務(wù)帳戶:
kubectl apply -f - <<EOFapiVersion: v1kind: ServiceAccountmetadata: name: kcl-consumer-app-saEOF
JSON為角色創(chuàng)建一個(gè)包含可信實(shí)體的文件:
read -r -d '' TRUST_RELATIONSHIP <<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:aud": "sts.amazonaws.com", "${OIDC_PROVIDER}:sub": "system:serviceaccount:default:kcl-consumer-app-sa" } } } ]}EOFecho "${TRUST_RELATIONSHIP}" > trust.json
現(xiàn)在,創(chuàng)建 IAM 角色并附加策略(查看policy.json文件了解詳細(xì)信息):
export ROLE_NAME=kcl-consumer-app-roleaws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://trust.json --description "IRSA for KCL consumer app on EKS"aws iam create-policy --policy-name kcl-consumer-app-policy --policy-document file://policy.jsonaws iam attach-role-policy --role-name $ROLE_NAME --policy-arn=arn:aws:iam::${ACCOUNT_ID}:policy/kcl-consumer-app-policy
關(guān)聯(lián) IAM 角色和服務(wù)帳戶:
kubectl annotate serviceaccount -n default kcl-consumer-app-sa eks.amazonaws.com/role-arn=arn:aws:iam::${ACCOUNT_ID}:role/${ROLE_NAME}# verify the annotationkubectl describe serviceaccount/kcl-consumer-app-sa
核心基礎(chǔ)設(shè)施現(xiàn)已準(zhǔn)備就緒。讓我們準(zhǔn)備并部署消費(fèi)者應(yīng)用程序。
將 KCL 消費(fèi)者應(yīng)用程序部署到 EKS
您首先需要構(gòu)建 Docker 鏡像并將其推送到Amazon Elastic Container Registry (ECR)(有關(guān)Dockerfile詳細(xì)信息,請(qǐng)參閱 )。
構(gòu)建 Docker 鏡像并將其推送到 ECR
# create runnable JAR filemvn clean compile assembly:single# build docker imagedocker build -t kcl-consumer-app .AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)# create a private ECR repoaws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.comaws ecr create-repository --repository-name kcl-consumer-app --region us-east-1# tag and push the imagedocker tag kcl-consumer-app:latest $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/kcl-consumer-app:latestdocker push $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/kcl-consumer-app:latest
部署消費(fèi)者應(yīng)用程序
更新consumer.yaml以包含您剛剛推送到 ECR 的 Docker 映像。清單的其余部分保持不變:
apiVersion: apps/v1kind: Deploymentmetadata: name: kcl-consumerspec: replicas: 1 selector: matchLabels: app: kcl-consumer template: metadata: labels: app: kcl-consumer spec: serviceAccountName: kcl-consumer-app-sa containers: - name: kcl-consumer image: AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/kcl-consumer-app:latest imagePullPolicy: Always env: - name: STREAM_NAME value: kinesis-keda-demo - name: TABLE_NAME value: users - name: APPLICATION_NAME value: kinesis-keda-demo - name: AWS_REGION value: us-east-1 - name: INSTANCE_NAME valueFrom: fieldRef: fieldPath: metadata.name
創(chuàng)建Deployment:
kubectl apply -f consumer.yaml# verify Pod transition to Running statekubectl get pods -w
KCL 應(yīng)用程序自動(dòng)縮放在 KEDA 中的應(yīng)用
現(xiàn)在您已經(jīng)部署了消費(fèi)者應(yīng)用程序,KCL庫(kù)應(yīng)該開始行動(dòng)了。它要做的第一件事是在 DynamoDB 中創(chuàng)建一個(gè)“控制表”——這應(yīng)該與 KCL 應(yīng)用程序的名稱相同(在本例中為 )kinesis-keda-demo。
進(jìn)行初始協(xié)調(diào)和創(chuàng)建表可能需要幾分鐘時(shí)間。您可以檢查消費(fèi)者應(yīng)用程序的日志以跟蹤進(jìn)度。
kubectl logs -f $(kubectl get po -l=app=kcl-consumer --output=jsnotallow={.items..metadata.name})
租約分配完成后,檢查表并記下leaseowner屬性:
aws dynamodb describe-table --table-name kinesis-keda-demoaws dynamodb scan --table-name kinesis-keda-demo
現(xiàn)在,讓我們使用 AWS CLI 將一些數(shù)據(jù)發(fā)送到 Kinesis 流。
export KINESIS_STREAM=kinesis-keda-demoaws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user1@foo.com --data $(echo -n '{"name":"user1", "city":"new york"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user2@foo.com --data $(echo -n '{"name":"user2", "city":"tel aviv"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user3@foo.com --data $(echo -n '{"name":"user3", "city":"new delhi"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user4@foo.com --data $(echo -n '{"name":"user4", "city":"seattle"}' | base64)
KCL 應(yīng)用程序?qū)⒚織l記錄保存到目標(biāo)DynamoDB表(在本例中已命名users)。您可以檢查表格以驗(yàn)證記錄。
aws dynamodb scan --table-name users
注意到processed_by屬性的值了嗎?它與 KCL 消費(fèi)者相同Pod。這將使我們更容易驗(yàn)證端到端的自動(dòng)縮放過程。
為 Kinesis 創(chuàng)建 KEDA 定標(biāo)器
這是ScaledObject定義。請(qǐng)注意,它的目標(biāo)是kcl-consumer Deployment(我們剛剛創(chuàng)建的那個(gè))并且shardCount設(shè)置為1:
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: aws-kinesis-stream-scaledobjectspec: scaleTargetRef: name: kcl-consumer triggers: - type: aws-kinesis-stream metadata: # Required streamName: kinesis-keda-demo # Required awsRegion: "us-east-1" shardCount: "1" identityOwner: "operator"
創(chuàng)建KEDAKinesis 縮放器:
kubectl apply -f keda-kinesis-scaler.yaml
驗(yàn)證 KCL 應(yīng)用程序自動(dòng)縮放
Pod我們從我們的一個(gè) KCL 應(yīng)用程序開始。但是,多虧了KEDA,我們現(xiàn)在應(yīng)該看到第二次Pod出現(xiàn)了。
kubectl get pods -l=app=kcl-consumer -w# check logs of the new podkubectl logs -f <enter Pod name>
我們的應(yīng)用程序能夠自動(dòng)縮放到兩個(gè),因?yàn)槲覀冊(cè)诙x中Pods指定了。這意味著Kinesis 流中的每個(gè)分片都會(huì)有一個(gè)。shardCount: "1"ScaledObjectPod
檢查kinesis-keda-demo控制表DynamoDB:您應(yīng)該看到leaseOwner.
讓我們向 Kinesis 流發(fā)送更多數(shù)據(jù)。
export KINESIS_STREAM=kinesis-keda-demoaws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user5@foo.com --data $(echo -n '{"name":"user5", "city":"new york"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user6@foo.com --data $(echo -n '{"name":"user6", "city":"tel aviv"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user7@foo.com --data $(echo -n '{"name":"user7", "city":"new delhi"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user8@foo.com --data $(echo -n '{"name":"user8", "city":"seattle"}' | base64)
驗(yàn)證屬性的值processed_by。由于我們已經(jīng)擴(kuò)展到兩個(gè)Pods,每個(gè)記錄的值應(yīng)該不同,因?yàn)槊總€(gè)記錄都Pod將處理來自 Kinesis 流的記錄子集。
增加 Kinesis 流容量
讓我們將分片數(shù)量從兩個(gè)擴(kuò)展到三個(gè),并繼續(xù)監(jiān)控KCL應(yīng)用程序的自動(dòng)擴(kuò)展。
aws kinesis update-shard-count --stream-name kinesis-keda-demo --target-shard-count 3 --scaling-type UNIFORM_SCALING
一旦 Kinesis 重新分片完成,KEDA縮放器將開始行動(dòng)并將 KCL 應(yīng)用程序擴(kuò)展到三個(gè)Pods。
kubectl get pods -l=app=kcl-consumer -w
kinesis-keda-demo和之前一樣,在控制表中確認(rèn)Kinesis shard lease已經(jīng)更新DynamoDB。檢查leaseOwner屬性。
繼續(xù)向 Kinesis 流發(fā)送更多數(shù)據(jù)。正如預(yù)期的那樣,Pods 將共享記錄處理,這將反映在表processed_by中的屬性中users。
export KINESIS_STREAM=kinesis-keda-demoaws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user9@foo.com --data $(echo -n '{"name":"user9", "city":"new york"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user10@foo.com --data $(echo -n '{"name":"user10", "city":"tel aviv"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user11@foo.com --data $(echo -n '{"name":"user11", "city":"new delhi"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user12@foo.com --data $(echo -n '{"name":"user12", "city":"seattle"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user14@foo.com --data $(echo -n '{"name":"user14", "city":"tel aviv"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user15@foo.com --data $(echo -n '{"name":"user15", "city":"new delhi"}' | base64)aws kinesis put-record --stream-name $KINESIS_STREAM --partition-key user16@foo.com --data $(echo -n '{"name":"user16", "city":"seattle"}' | base64)
縮小
到目前為止,我們只在一個(gè)方向上進(jìn)行了擴(kuò)展。當(dāng)我們減少 Kinesis 流的分片容量時(shí)會(huì)發(fā)生什么?親自嘗試一下:將分片數(shù)從三個(gè)減少到兩個(gè),看看 KCL 應(yīng)用程序會(huì)發(fā)生什么。
驗(yàn)證端到端解決方案后,您應(yīng)該清理資源以避免產(chǎn)生任何額外費(fèi)用。
刪除資源
刪除 EKS 集群、Kinesis 流和 DynamoDB 表。
eksctl delete cluster --name keda-kinesis-demoaws kinesis delete-stream --stream-name kinesis-keda-demoaws dynamodb delete-table --table-name users
結(jié)論
在本文中,您學(xué)習(xí)了如何使用KEDA自動(dòng)縮放KCL使用來自 Kinesis 流的數(shù)據(jù)的應(yīng)用程序。
您可以根據(jù)您的應(yīng)用要求配置 KEDA 定標(biāo)器。例如,您可以將Kinesis 流中的每三個(gè)分片設(shè)置為shardCount一個(gè)3。Pod然而,如果你想維護(hù)一個(gè)一對(duì)一的映射,你可以設(shè)置為shardCount并1會(huì)KCL處理分布式協(xié)調(diào)和租約分配,從而確保每個(gè)Pod記錄處理器都有一個(gè)實(shí)例。這是一種有效的方法,可讓您擴(kuò)展 Kinesis 流處理管道以滿足應(yīng)用程序的需求。