Kafka kotaları çok kiracılı Kafka kümelerinin ayrılmaz bir parçasıdır. Kafka küme performansının, küme kaynaklarını aşırı tüketen kötü davranışlı uygulamalardan olumsuz etkilenmesini önler. Ayrıca, merkezi akışlı veri platformunun çok kiracılı bir platform olarak çalıştırılmasına ve birden fazla iş kolundaki aşağı ve yukarı akış uygulamaları tarafından kullanılmasına olanak tanır. Kafka iki tür kotayı destekler: ağ bant genişliği kotaları ve talep oranı kotaları. Ağ bant genişliği kotaları, saniyede bayt cinsinden ölçülen, Kafka kümesindeki her bir aracıya istemci uygulamalarının ne kadar veri üretebileceği ve her bir aracıdan ne kadar veri tüketebileceği gibi bayt hızı eşiklerini tanımlar. Talep oranı kotaları, her bir aracının istemci uygulama isteklerini işlemek için harcadığı sürenin yüzdesini sınırlar. Yapılandırmanıza bağlı olarak Kafka kotaları belirli kullanıcılar, belirli istemci kimlikleri veya her ikisi için ayarlanabilir.
In Bölüm 1 Bu iki bölümlük seride Kafka kotalarının nasıl uygulanacağına ilişkin kavramları tartıştık. Apache Kafka için Amazon Tarafından Yönetilen Akış (Amazon MSK) kümeleri kullanılırken AWS Kimlik ve Erişim Yönetimi (IAM) erişim kontrolü.
Bu yazıda, IAM erişim kontrolünü kullanırken bir MSK kümesinde Kafka kotalarını ayarlama ve bunları örnek istemci uygulamaları aracılığıyla test etme konusunda adım adım uygulama konusunda size yol göstereceğiz.
Çözüme genel bakış
İlk olarak tanıttığımız aşağıdaki şekil Bölüm 1, Kafka istemci uygulamalarının (ProducerApp-1
, ConsumerApp-1
, ve ConsumerApp-2
) erişim Topic-B
MSK kümesinde yazma ve okuma IAM rollerini üstlenerek. Her üretici ve tüketici istemci uygulamasının bayt/saniye cinsinden ne kadar veri üretebileceğini veya tüketebileceğini belirleyen bir kotası vardır. ProducerApp-1
kota, aracı başına 1024 bayt/saniyeye kadar üretim yapmasına olanak tanır. Benzer şekilde, ConsumerApp-1
ve ConsumerApp-2
kotalar aracı başına sırasıyla 5120 ve 1024 bayt/saniye tüketmelerine olanak tanır. Aşağıda mimari diyagramda gösterilen akışın kısa bir açıklaması bulunmaktadır:
- P1 -
ProducerApp-1
(üzerindenProducerApp-1-Role
IAM rolü)Topic-B-Write-Role
İleti göndermek için IAM rolüTopic-B
- P2 - İle
Topic-B-Write-Role
IAM rolü üstlendi,ProducerApp-1
mesaj göndermeye başlarTopic-B
- C1 -
ConsumerApp-1
(üzerindenConsumerApp-1-Role
IAM rolü) veConsumerApp-2
(üzerindenConsumerApp-2-Role
IAM rolü)Topic-B-Read-Role
Gelen mesajları okumak için IAM rolüTopic-B
- C2 - İle
Topic-B-Read-Role
IAM rolü üstlendi,ConsumerApp-1
veConsumerApp-2
gelen mesajları tüketmeye başlaTopic-B
Bu yazının şunu kullandığını unutmayın: AWS Komut Satırı Arayüzü (AWS CLI), AWS CloudFormation şablonlar ve AWS Yönetim Konsolu AWS kaynaklarının sağlanması ve değiştirilmesi için gerekli olan kaynaklar ve sağlanan kaynaklar AWS hesabınıza fatura edilecektir.
Üst düzey adımlar aşağıdaki gibidir:
- IAM erişim kontrolüne sahip bir MSK kümesi sağlayın ve Amazon Elastik Bilgi İşlem Bulutu İstemci uygulamaları için (Amazon EC2) bulut sunucuları.
- oluşturmak
Topic-B
MSK kümesinde. - İstemci uygulamalarının erişmesi için IAM rolleri oluşturun
Topic-B
. - Üretici ve tüketici uygulamalarını kota belirlemeden çalıştırın.
- İstemci uygulamaları için üretim ve tüketim kotalarını yapılandırın.
- Kotaları ayarladıktan sonra uygulamaları yeniden çalıştırın.
Önkoşullar
Okumanız tavsiye edilir Bölüm 1 Devam etmeden önce bu serinin. Başlamak için aşağıdakilere ihtiyacınız vardır:
- Hesap kimliğinin şu şekilde olduğu varsayılarak, bu yazıda demo hesabı olarak anılacak bir AWS hesabı
1111 1111 1111
- Demo hesabında AWS kaynaklarını oluşturma, silme ve değiştirme izinleri
IAM erişim kontrolü ve EC2 örnekleriyle bir MSK kümesi sağlayın
Bu adım, demo hesabındaki bir VPC'de IAM erişim kontrolüne sahip bir MSK kümesinin sağlanmasını içerir. Ek olarak, MSK kümesinde ve ana bilgisayar üreticisi ve tüketici istemci uygulamalarında yapılandırma değişiklikleri yapmak için dört EC2 bulut sunucusu oluşturuyoruz.
CloudFormation yığınını dağıtın
- klonlamak GitHub deposu CloudFormation şablon dosyalarını ve örnek istemci uygulamalarını indirmek için:
- AWS CloudFormation konsolunda şunu seçin: Yığınları Gezinti bölmesinde.
- Klinik Yığın oluştur.
- İçin Şablon hazırlaseçin Şablon hazır.
- İçin Şablon kaynağıseçin Bir şablon dosyası yükleyin.
- Yükle
cfn-msk-stack-1.yaml
dosyasınıamazon-msk-kafka-quotas/cfn-templates
dizini seçin ve ardından Sonraki. - İçin Yığın adı, girmek
MSKStack
. - Parametreleri varsayılan olarak bırakın ve Sonraki.
- En alta kaydır Yığın seçeneklerini yapılandırma sayfa ve seç Sonraki Devam etmek.
- En alta kaydır Değerlendirme sayfasında onay kutusunu seçin CloudFormation'un IAM kaynakları oluşturabileceğini kabul ediyorum, ve Seç Gönder.
Yığının tamamlanması yaklaşık 30 dakika sürecektir. Yığın başarıyla oluşturulduktan sonra aşağıdaki kaynaklar oluşturulacaktır:
- Üç özel alt ağa ve bir genel alt ağa sahip bir VPC
- IAM erişim kontrolünün etkin olduğu üç aracıya sahip bir MSK kümesi
- Bir EC2 örneği çağrıldı
MSKAdminInstance
MSK kümesi ayarlarını değiştirmek ve AWS kaynaklarını oluşturmak ve değiştirmek için - EC2 örnekleri
ProducerApp-1
,ConsumerApp-1
, veConsumerApp-2
, her istemci uygulaması için bir tane - Mimari şemasında gösterildiği gibi, istemci uygulamasını barındıran her EC2 bulut sunucusu için ayrı bir IAM rolü
- Yığından Çıkışlar sekmesine dikkat edin
MSKClusterArn
değeri.
MSK kümesinde bir konu oluşturun
Yaratmak Topic-B
MSK kümesinde aşağıdaki adımları tamamlayın:
- Amazon EC2 konsolunda çalışan EC2 bulut sunucuları listenize gidin.
- seçmek
MSKAdminInstance
EC2 örneği ve seçin Sosyal medya. - Üzerinde Oturum Yöneticisi sekmesini seçin Sosyal medya.
- Tarayıcınızda açılan yeni sekmede aşağıdaki komutları çalıştırın:
- Ortam değişkenini MSK Küme aracılarının IAM uç noktasını işaret edecek şekilde ayarlayın:
- Değerine dikkat edin
BOOTSTRAP_BROKERS_IAM
. - Oluşturmak için aşağıdaki Kafka CLI komutunu çalıştırın
Topic-B
MSK kümesinde:
MSK kümesinin temel hazırlığı IAM erişim denetimiyle sağlandığı için bu seçenek --command-config
işaret config_iam.properties
tarafından oluşturulan, IAM erişim kontrolü için gerekli özellikleri içeren MSKStack
CloudFormation yığını.
Kafka CLI komutlarını çalıştırdığınızda aşağıdaki uyarılar görünebilir ancak bunları göz ardı edebilirsiniz:
- Bunu doğrulamak için
Topic-B
oluşturulduysa tüm konuları listeleyin:
İstemci uygulamalarının Konu B'ye erişmesi için IAM rolleri oluşturun
Bu adım oluşturmayı içerir Topic-B-Write-Role
ve Topic-B-Read-Role
mimari şemasında gösterildiği gibi. Topic-B-Write-Role
üzerinde yazma işlemlerine olanak sağlar Topic-B
tarafından varsayılabilir ve ProducerApp-1
. Benzer şekilde, ConsumerApp-1
ve ConsumerApp-2
varsayabilir Topic-B-Read-Role
üzerinde okuma işlemlerini gerçekleştirmek için Topic-B
. Okuma işlemlerini gerçekleştirmek için Topic-B
, ConsumerApp-1
ve ConsumerApp-2
aynı zamanda belirtilen tüketici gruplarına da ait olmalıdır. MSKStack
sonraki adımda yığın güncellemesi.
Aşağıdaki adımlarla rolleri oluşturun:
- AWS CloudFormation konsolunda şunu seçin: Yığınları Gezinti bölmesinde.
- seç
MSKStack
Ve seç Güncelleme. - İçin Şablon hazırla, Geçerli şablonu değiştir'i seçin.
- İçin Şablon kaynağıseçin Bir şablon dosyası yükleyin.
- Yükle
cfn-msk-stack-2.yaml
dosyasınıamazon-msk-kafka-quotas/cfn-templates
dizini seçin ve ardından Sonraki. - Aşağıdaki ek yığın parametrelerini sağlayın:
-
- İçin Konu B ARN, giriş
Topic-B
RNA.
- İçin Konu B ARN, giriş
ARN şu şekilde biçimlendirilmelidir: arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Daha önce not ettiğiniz MSK kümesi ARN'sindeki küme adını ve küme UUID'sini kullanın ve AWS Bölgenizi sağlayın. Daha fazla bilgi için bkz. Amazon MSK için IAM erişim kontrolü.
-
- İçin ConsumerApp-1 Tüketici Grubu adı, girmek
ConsumerApp-1
tüketici grubu ARN.
- İçin ConsumerApp-1 Tüketici Grubu adı, girmek
Olarak biçimlendirilmelidir arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- İçin ConsumerApp-2 Tüketici Grubu adı, girmek
ConsumerApp-2
tüketici grubu ARN.
- İçin ConsumerApp-2 Tüketici Grubu adı, girmek
Önceki ARN'ye benzer bir format kullanın.
- Klinik Sonraki Devam etmek.
- En alta kaydır Yığını yapılandır seçenekler sayfasına gidin ve seçin Sonraki Devam etmek.
- En alta kaydır Değerlendirme sayfasında onay kutusunu seçin CloudFormation'un IAM kaynakları oluşturabileceğini kabul ediyorum, ve Seç Yığını güncelle.
Yığının güncellenmesi yaklaşık 3 dakika sürecektir. Yığın başarıyla güncellendikten sonra aşağıdaki kaynaklar oluşturulacaktır:
- Konu-B-Yazma-Rol – Yazma işlemlerini gerçekleştirme iznine sahip bir IAM rolü
Topic-B
. Güven politikası şunları sağlar:ProducerApp-1-Role
IAM rolünü üstlenecek. - Konu-B-Okuma-Rolü – Üzerinde okuma işlemleri gerçekleştirme iznine sahip bir IAM rolü
Topic-B
. Güven politikası şunları sağlar:ConsumerApp-1-Role
veConsumerApp-2-Role
Bunu üstlenecek IAM rolleri. Üstelik,ConsumerApp-1
veConsumerApp-2
aynı zamanda okuma işlemlerini gerçekleştirmek için yığını güncellerken belirttiğiniz tüketici gruplarına da ait olmalıdır.Topic-B
.
- Yığından Çıkışlar sekmesine dikkat edin
TopicBReadRoleARN
veTopicBWriteRoleARN
değerleri.
Üretici ve tüketici uygulamalarını kota belirlemeden çalıştırın
İşte koşuyoruz ProducerApp-1
, ConsumerApp-1
, ve ConsumerApp-2
kotalarını ayarlamadan. Önceki adımlardan ihtiyacınız olacak BOOTSTRAP_BROKERS_IAM
değer, kıymet, Topic-B-Write-Role
ARN ve Topic-B-Read-Role
ARN. İstemci uygulamalarının kaynak kodları ve paketlenmiş versiyonları şu adreste mevcuttur: GitHub deposu.
ConsumerApp-1 uygulamasını çalıştırın
çalıştırmak için ConsumerApp-1
başvuru için aşağıdaki adımları tamamlayın:
- Amazon EC2 konsolunda şunu seçin:
ConsumerApp-1
EC2 örneği ve seçin Sosyal medya. - Üzerinde Oturum Yöneticisi sekmesini seçin Sosyal medya.
- Tarayıcınızda açılan yeni sekmede aşağıdaki komutları çalıştırın:
- Çalıştır
ConsumerApp-1
mesajları tüketmeye başlamak için uygulamaTopic-B
:
Sen bulabilirsiniz kaynak kodu referansınız için GitHub'da. Komut satırı parametre ayrıntıları aşağıdaki gibidir:
- –önyükleme sunucuları – MSK kümesi önyükleme aracıları IAM uç noktası.
- –rolü üstlen-arn -
Topic-B-Read-Role
IAM rolü ARN. Bu rolü üstlenerek,ConsumerApp-1
Konudaki mesajları okuyacaktır. - -bölge – Kullandığınız bölge.
- -Konu adı – Konunun adı
ConsumerApp-1
mesajları okuyacak. Varsayılan:Topic-B
. - –tüketici grubu – Tüketici grubu adı
ConsumerApp-1
Yığın güncellemesi sırasında belirtildiği gibi. - –rol-oturum-adı -
ConsumerApp-1
varsayarTopic-B-Read-Role
ile AWS Security Token Hizmeti (AWS STS) SDK'sı.ConsumerApp-1
çağrılırken bu rol oturumu adını kullanacakassumeRole
fonksiyonu. - -Müşteri Kimliği – Müşteri Kimliği
ConsumerApp-1
. - –baskı-tüketici-kota-metrikleri – İstemci ölçümlerinin terminalde yazdırılıp yazdırılmayacağını belirten bayrak
ConsumerApp-1
. - –cw-boyut-adı - Amazon Bulut İzleme istemci kısıtlama metriklerini yayınlamak için kullanılacak boyut adı
ConsumerApp-1
. - –cw-boyut-değeri – İstemci azaltma ölçümlerini yayınlamak için kullanılacak CloudWatch boyut değeri
ConsumerApp-1
. - –cw-ad alanı – Ad alanı nerede
ConsumerApp-1
azaltmayı izlemek için CloudWatch ölçümlerini yayınlayacak.
- Geri kalan parametrelerden memnunsanız aşağıdaki komutu kullanın ve değiştirin
--assume-role-arn
ve--region
ortamınıza göre:
The fetch-throttle-time-avg
ve fetch-throttle-time-max
istemci metrikleri 0.0 değerini göstermelidir; bu, herhangi bir kısıtlamanın meydana gelmediğini gösterir ConsumerApp-1
. Şunun için tüketim kotasını ayarlamadığımızı unutmayın: ConsumerApp-1
henüz. Bir süre çalışmasına izin verin.
ConsumerApp-2 uygulamasını çalıştırın
çalıştırmak için ConsumerApp-2
başvuru için aşağıdaki adımları tamamlayın:
- Amazon EC2 konsolunda şunu seçin:
ConsumerApp-2
EC2 örneği ve seçin Sosyal medya. - Üzerinde Oturum Yöneticisi sekmesini seçin Sosyal medya.
- Tarayıcınızda açılan yeni sekmede aşağıdaki komutları çalıştırın:
- Çalıştır
ConsumerApp-2
mesajları tüketmeye başlamak için uygulamaTopic-B
:
Kod, aşağıdakine benzer komut satırı parametreleri ayrıntılarına sahiptir: ConsumerApp-1
aşağıdakiler hariç daha önce tartışılmıştır:
- –tüketici grubu – Tüketici grubu adı
ConsumerApp-2
Yığın güncellemesi sırasında belirtildiği gibi. - –rol-oturum-adı -
ConsumerApp-2
varsayarTopic-B-Read-Role
AWS STS SDK'yı kullanarak.ConsumerApp-2
çağrılırken bu rol oturumu adını kullanacakassumeRole
fonksiyonu. - -Müşteri Kimliği – Müşteri Kimliği
ConsumerApp-2
.
- Geri kalan parametrelerden memnunsanız aşağıdaki komutu kullanın ve değiştirin
--assume-role-arn
ve--region
ortamınıza göre:
The fetch-throttle-time-avg
ve fetch-throttle-time-max
istemci metrikleri 0.0 değerini göstermelidir; bu, herhangi bir kısıtlamanın meydana gelmediğini gösterir ConsumerApp-2
. Şunun için tüketim kotasını ayarlamadığımızı unutmayın: ConsumerApp-2
henüz. Bir süre çalışmasına izin verin.
YapımcıApp-1 uygulamasını çalıştırın
çalıştırmak için ProducerApp-1
başvuru için aşağıdaki adımları tamamlayın:
- Amazon EC2 konsolunda şunu seçin:
ProducerApp-1
EC2 örneği ve seçin Sosyal medya. - Üzerinde Oturum Yöneticisi sekmesini seçin Sosyal medya.
- Tarayıcınızda açılan yeni sekmede aşağıdaki komutları çalıştırın:
- Çalıştır
ProducerApp-1
mesaj göndermeye başlamak için uygulamaTopic-B
:
Sen bulabilirsiniz kaynak kodu referansınız için GitHub'da. Komut satırı parametre ayrıntıları aşağıdaki gibidir:
- –önyükleme sunucuları – MSK kümesi önyükleme aracıları IAM uç noktası.
- –rolü üstlen-arn -
Topic-B-Write-Role
IAM rolü ARN. Bu rolü üstlenerek,ProducerApp-1
Konuya mesaj yazacağım. - -Konu adı -
ProducerApp-1
bu konuya mesaj göndereceğim. Varsayılan:Topic-B
. - -bölge – Kullandığınız AWS Bölgesi.
- –num-mesajlar – Mesaj sayısı
ProducerApp-1
Uygulama konuya gönderilecek. - –rol-oturum-adı -
ProducerApp-1
varsayarTopic-B-Write-Role
AWS STS SDK'yı kullanarak.ProducerApp-1
çağrılırken bu rol oturumu adını kullanacakassumeRole
fonksiyonu. - -Müşteri Kimliği – Müşteri Kimliği
ProducerApp-1
. - –üretici tipi -
ProducerApp-1
ikisi de çalıştırılabilir eşzamanlı or uyumsuz. Seçenekler: senkronize or zaman uyumsuz. - –baskı-üretici-kota-metrikleri – İstemci ölçümlerinin terminalde yazdırılıp yazdırılmayacağını belirten bayrak YapımcıUygulama-1.
- –cw-boyut-adı – İstemci azaltma ölçümlerini yayınlamak için kullanılacak CloudWatch boyut adı YapımcıUygulama-1.
- –cw-boyut-değeri – İstemci azaltma ölçümlerini yayınlamak için kullanılacak CloudWatch boyut değeri YapımcıUygulama-1.
- –cw-ad alanı – Ad alanı burada YapımcıUygulama-1 azaltmayı izlemek için CloudWatch ölçümlerini yayınlayacak.
- Geri kalan parametrelerden memnunsanız aşağıdaki komutu kullanın ve değiştirin
--assume-role-arn
ve--region
ortamınıza göre. Senkron bir Kafka üreticisini çalıştırmak için bu seçeneği kullanır--producer-type sync
:
Alternatif olarak, kullanın --producer-type async
asenkron bir yapımcı çalıştırmak için. Daha fazla ayrıntı için bkz. Eşzamansız gönderme.
The produce-throttle-time-avg
ve produce-throttle-time-max
istemci metrikleri 0.0 değerini göstermelidir; bu, herhangi bir kısıtlamanın meydana gelmediğini gösterir ProducerApp-1
. Üretim kotasını belirlemediğimizi unutmayın. ProducerApp-1
henüz. Şunu kontrol et ConsumerApp-1
ve ConsumerApp-2
mesajları tüketebilir ve bunların kısıtlanmadığını fark edebilir. tuşuna basarak tüketici ve üretici istemci uygulamalarını durdurun. Ctrl + C ilgili tarayıcı sekmelerinde.
İstemci uygulamaları için üretim ve tüketim kotalarını ayarlama
Artık üretici ve tüketici uygulamalarını kotasız çalıştırdığımıza göre kotalarını belirleyip tekrar çalıştırıyoruz.
Açın Oturum Yöneticisi için terminal MSKAdminInstance
EC2 örneğini daha önce açıklandığı gibi çalıştırın ve MSK kümesindeki aracılardan birinin varsayılan yapılandırmasını bulmak için aşağıdaki komutları çalıştırın. MSK kümeleri, varsayılan Kafka kotaları yapılandırmasıyla sağlanır.
Aşağıdaki ekran görüntüsü Broker-1
için varsayılan değerler quota.consumer.default
ve quota.producer.default
.
YapımcıApp-1 kota yapılandırması
Bu bölümdeki tüm komutlardaki yer tutucuları, hesabınıza karşılık gelen değerlerle değiştirin.
Daha önce tartışılan mimari diyagrama göre, ProducerApp-1
1024 bayt/saniyeye kadar kota üretir. İçin <ProducerApp-1 Client Id>
ve <ProducerApp-1 Role Session>
çalıştırırken kullandığınız değerlerin aynısını kullandığınızdan emin olun. ProducerApp-1
daha erken (producerapp-1-client-id
ve producerapp-1-role-session
, sırasıyla):
Doğrulayın. ProducerApp-1
aşağıdaki komutu kullanarak kota oluşturun:
Kaldırabilirsiniz ProducerApp-1
aşağıdaki komutu kullanarak kota üretin, ancak komutu çalıştırmayın bundan sonra kotaları test edeceğiz.
ConsumerApp-1 kota yapılandırması
Bu bölümdeki tüm komutlardaki yer tutucuları, hesabınıza karşılık gelen değerlerle değiştirin.
5120 bayt/saniyelik bir tüketim kotası belirleyelim. ConsumerApp-1
. Için <ConsumerApp-1 Client Id>
ve <ConsumerApp-1 Role Session>
çalıştırırken kullandığınız değerlerin aynısını kullandığınızdan emin olun. ConsumerApp-1
daha erken (consumerapp-1-client-id
ve consumerapp-1-role-session
, sırasıyla):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
Doğrulayın. ConsumerApp-1
Aşağıdaki komutu kullanarak kotayı tüketin:
Kaldırabilirsiniz ConsumerApp-1
Aşağıdaki komutu kullanarak kotayı tüketin, ancak komutu çalıştırmayın bundan sonra kotaları test edeceğiz.
ConsumerApp-2 kota yapılandırması
Bu bölümdeki tüm komutlardaki yer tutucuları, hesabınıza karşılık gelen değerlerle değiştirin.
1024 bayt/saniyelik bir tüketim kotası belirleyelim. ConsumerApp-2
. Için <ConsumerApp-2 Client Id>
ve <ConsumerApp-2 Role Session>
çalıştırırken kullandığınız değerlerin aynısını kullandığınızdan emin olun. ConsumerApp-2
daha erken (consumerapp-2-client-id
ve consumerapp-2-role-session
, sırasıyla):
Doğrulayın. ConsumerApp-2
Aşağıdaki komutu kullanarak kotayı tüketin:
Ile ConsumerApp-1
, kaldırabilirsiniz ConsumerApp-2
ile aynı komutu kullanarak kotayı tüketin ConsumerApp-2
istemci ve kullanıcı ayrıntıları.
Kotaları belirledikten sonra üretici ve tüketici uygulamalarını yeniden çalıştırın
Kotaların etkisini doğrulamak için uygulamaları yeniden çalıştıralım.
YapımcıApp-1'i yeniden çalıştırın
tekrar yayınlama ProducerApp-1
in senkron Daha önce kullandığınız komutla aynı modu kullanın. Aşağıdaki ekran görüntüsü şunu göstermektedir: ProducerApp-1
herhangi bir komisyoncunun kotasına ulaştığında, produce-throttle-time-avg
ve produce-throttle-time-max client
metrik değeri 0.0'ın üzerinde olacaktır. 0.0'ın üzerindeki bir değer şunu gösterir: ProducerApp-1
kısılır. İzin vermek ProducerApp-1
birkaç saniye çalıştırmak ve ardından kullanarak durdurmak için Ctrl + C.
Üretim kotasının etkisini yeniden çalıştırarak da test edebilirsiniz. ProducerApp-1
tekrar eşzamanlı olmayan mod (--producer-type async
). Senkronize çalışmaya benzer şekilde, aşağıdaki ekran görüntüsü şunu göstermektedir: ProducerApp-1
herhangi bir komisyoncunun kotasına ulaştığında, produce-throttle-time-avg
ve produce-throttle-time-max
müşteri metriklerinin değeri 0.0'ın üzerinde olacaktır. 0.0'ın üzerindeki bir değer şunu gösterir: ProducerApp-1
kısılır. Eşzamansızlığa izin ver ProducerApp-1
bir süre koşmak için.
Sonunda bir göreceksiniz TimeoutException
belirten org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Kullanırken eşzamanlı olmayan Üretici ve kota nedeniyle komisyoncunun kabul edebileceğinden daha yüksek bir hızda mesaj gönderildiğinde, mesajlar önce istemci uygulama belleğinde sıraya alınacaktır. Mesaj gönderme hızı, mesaj kabul etme oranını aşmaya devam ederse, istemcinin arabellek alanı sonunda tükenecek ve bir sonraki hataya neden olacaktır. Producer.send()
engellenmek için arayınız. Producer.send()
sonunda bir atacak TimeoutException
Zaman aşımı gecikmesi aracının yapımcı başvurusunu yakalamasına izin vermek için yeterli değilse. Durmak ProducerApp-1
ile Ctrl + C.
ConsumerApp-1'i yeniden çalıştırın
tekrar yayınlama ConsumerApp-1
daha önce kullandığınız aynı komutla. Aşağıdaki ekran görüntüsü şunu göstermektedir: ConsumerApp-1
kotasına ulaştığında, fetch-throttle-time-avg
ve fetch-throttle-time-max client
metrik değeri 0.0'ın üzerinde olacaktır. 0.0'ın üzerindeki bir değer şunu gösterir: ConsumerApp-1
kısılır.
izin vermek ConsumerApp-1
birkaç saniye çalıştırmak ve ardından kullanarak durdurmak için Ctrl + C.
ConsumerApp-2'i yeniden çalıştırın
tekrar yayınlama ConsumerApp-2
daha önce kullandığınız aynı komutla. Benzer şekilde, ne zaman ConsumerApp-2
kotasına ulaştığında, fetch-throttle-time-avg
ve fetch-throttle-time-max client
metrik değeri yukarıda olacak 0.0. Yukarıdaki bir değer 0.0 belirtir ConsumerApp-2
kısılır. İzin vermek ConsumerApp-2
birkaç saniye çalıştırmak ve ardından tuşuna basarak durdurmak için Ctrl + C.
Amazon CloudWatch'taki müşteri kotası ölçümleri
In Bölüm 1istemci metriklerinin Kafka kümelerine bağlanan istemciler tarafından kullanıma sunulan metrikler olduğunu açıkladık. CloudWatch'ta istemci metriklerini inceleyelim.
- CloudWatch konsolunda seçin Tüm ölçümler.
- Altında Özel Ad Alanlarıistemci uygulamalarını çalıştırırken sağladığınız ad alanını seçin.
- Boyut adını seçin ve
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
, vefetch-throttle-time-avg metrics
tüm uygulamalar için.
Bu ölçümler, aşağıdakiler için kısıtlama davranışını gösterir: ProducerApp-1
, ConsumerApp-1
, ve ConsumerApp-2
önceki bölümdeki kota yapılandırmalarıyla test edilen uygulamalar. Aşağıdaki ekran görüntüleri, kısıtlamayı göstermektedir ProducerApp-1
, ConsumerApp-1
, ve ConsumerApp-2
ağ bant genişliği kotalarına dayalıdır. ProducerApp-1
, ConsumerApp-1
, ve ConsumerApp-2
uygulamalar ilgili müşteri ölçümlerini CloudWatch'a besler. Bulabilirsin kaynak kodu referansınız için GitHub'da.
Güvenli istemci kimliği ve rol oturumu adı
Bir uygulamanın kotalarını kullanarak Kafka kotalarını nasıl yapılandıracağımızı tartıştık. Müşteri Kimliği ve kimliği doğrulanmış kullanıcı müdür. Bir istemci uygulaması, IAM kimlik doğrulamasının etkin olduğu bir MSK kümesindeki Kafka konularına erişmek için bir IAM rolü üstlendiğinde, kimliği doğrulanır. kullanıcı anapara aşağıdaki formatta temsil edilir (daha fazla bilgi için bkz. IAM tanımlayıcıları):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
İçerir rol oturumu adı (bu durumda, producerapp-1-role-session
) AWS STS SDK aracılığıyla bir IAM rolü üstlenirken istemci uygulamasında kullanılır. İstemci uygulaması kaynak kodu referansınız için mevcuttur. Müşteri Kimliği mantıksal bir ad dizesidir (örneğin, producerapp-1-client-id
) uygulama ekibi tarafından uygulama kodunda yapılandırılan. Bu nedenle, bir uygulama, şu bilgileri alırsa başka bir uygulamanın kimliğine bürünebilir: Müşteri Kimliği ve rol oturumu adı diğer uygulamanın aynı IAM rolünü üstlenme iznine sahip olup olmadığı.
Mimari diyagramda gösterildiği gibi, ConsumerApp-1
ve ConsumerApp-2
ilgili kota tahsislerine sahip iki ayrı istemci uygulamasıdır. Çünkü her ikisinin de aynı IAM rolünü üstlenme izni vardır (Topic-B-Read-Role
) demo hesabında, şuradan gelen mesajları tüketmelerine izin verilir: Topic-B
. Böylece MSK küme aracıları bunları özelliklerine göre ayırt eder. müşteri kimlikleri ve kullanıcılar (ilgililerini içeren rol oturumu adı değerler). Eğer ConsumerApp-2
bir şekilde elde eder ConsumerApp-1
rol oturumu adı ve Müşteri Kimliği, taklit edebilir ConsumerApp-1
belirterek ConsumerApp-1
rol oturumu adı ve Müşteri Kimliği uygulama kodunda.
Varsayalım ConsumerApp-1
kullanım consumerapp-1-client-id
ve consumerapp-1-role-session
onun gibi Müşteri Kimliği ve rol oturumu adı, sırasıyla. Öyleyse, ConsumerApp-1's
doğrulanmış kullanıcı anapara varsayıldığında aşağıdaki gibi görünecektir Topic-B-Read-Role
IAM rolü:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Benzer şekilde, ConsumerApp-2
kullanım consumerapp-2-client-id
ve consumerapp-2-role-session
onun gibi Müşteri Kimliği ve rol oturumu adı, sırasıyla. Öyleyse, ConsumerApp-2's
doğrulanmış kullanıcı anapara varsayıldığında aşağıdaki gibi görünecektir Topic-B-Read-Role
IAM rolü:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
elde eder ConsumerApp-1's
Müşteri Kimliği ve rol oturumu adı ve bunları uygulama kodunda belirtirse, MSK küme aracıları bunu şu şekilde değerlendirecektir: ConsumerApp-1
ve onu görüntüle Müşteri Kimliği as consumerapp-1-client-id
ve kimliği doğrulanmış kullanıcı anapara şu şekilde:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Bu izin verir ConsumerApp-2
MSK kümesinden, orijinal kota tahsisine göre saniyede 5120 bayt yerine saniyede maksimum 1024 bayt oranında veri tüketmek. Sonuç olarak, ConsumerApp-1's
durumunda verim olumsuz etkilenecektir. ConsumerApp-2
eşzamanlı olarak çalışır.
Gelişmiş mimari
tanıtabilirsin AWS Sırları Yöneticisi ve AWS Anahtar Yönetim Hizmeti (AWS KMS) uygulamaların güvenliğini sağlamak için mimaride müşteri kimlikleri ve rol oturumu adları. Daha güçlü bir yönetim sağlamak için uygulamaların istemci kimliği ve rol oturum adının, Gizli Diziler Yöneticisi'nde şifrelenmiş sırlar olarak saklanması gerekir. Şifrelenmiş sırlarla ve KMS müşteri tarafından yönetilen anahtarla (CMK) ilişkili IAM kaynak politikaları, uygulamaların yalnızca ilgili istemci kimliklerine ve rol oturum adlarına erişmesine ve şifrelerini çözmesine olanak tanır. Bu sayede uygulamalar birbirlerinin client ID'sine ve rol oturum adına erişemeyecek ve birbirlerinin kimliğine bürünemeyeceklerdir. Aşağıdaki resimde geliştirilmiş mimari gösterilmektedir.
Güncellenen akış aşağıdaki aşamalara sahiptir:
- P1 -
ProducerApp-1
onu geri alırclient-id
verole-session-name
Secrets Manager'dan sırlar - P2 -
ProducerApp-1
sırrı yapılandırırclient-id
asCLIENT_ID_CONFIG
uygulama kodunda ve varsayarTopic-B-Write-Role
(üzerindenProducerApp-1-Role
IAM rolü) sırrı ileterekrole-session-name
AWS STS SDK'yaassumeRole
işlev çağrısı - P3 - İle
Topic-B-Write-Role
IAM rolü üstlendi,ProducerApp-1
mesaj göndermeye başlarTopic-B
- C1 -
ConsumerApp-1
veConsumerApp-2
ilgililerini geri alclient-id
verole-session-name
Secrets Manager'dan sırlar - C2 -
ConsumerApp-1
veConsumerApp-2
ilgili sırrı yapılandırınclient-id
asCLIENT_ID_CONFIG
uygulama kodlarında ve varsayalımTopic-B-Write-Role
(VIAConsumerApp-1-Role
veConsumerApp-2-Role
sırasıyla IAM rolleri) sırlarını ileterekrole-session-name
AWS STS SDK'sındaassumeRole
işlev çağrısı - C3 - İle
Topic-B-Read-Role
IAM rolü üstlendi,ConsumerApp-1
veConsumerApp-2
gelen mesajları tüketmeye başlaTopic-B
için belgelere bakın AWS Sırları Yöneticisi ve AWS KMS'si mimariye nasıl uyum sağladıklarını daha iyi anlamak için.
Kaynakları temizleme
CloudFormation konsoluna gidin ve MSKStack
yığın. Bu gönderi sırasında oluşturulan tüm kaynaklar silinecek.
Sonuç
Bu yazıda Amazon MSK kotalarını yapılandırmaya yönelik ayrıntılı adımları ele aldık ve bunların etkilerini örnek istemci uygulamaları aracılığıyla gösterdik. Ayrıca, bir istemci uygulamasının kısıtlanıp kısıtlanmadığını belirlemek için istemci metriklerini nasıl kullanabileceğinizi de tartıştık. Ayrıca düz metin istemci kimlikleri ve rol oturumu adlarıyla ilgili olası bir sorunu da vurguladık. Sıfır güven mimarisi sağlamak için revize edilen mimari şemasına göre Secrets Manager ve AWS KMS'yi kullanarak Amazon MSK ile Kafka kotalarını uygulamanızı öneririz.
Gözden geçirilen mimari de dahil olmak üzere bu gönderiyle ilgili geri bildiriminiz veya sorularınız varsa sizden haber almaktan memnuniyet duyarız. Bu yazıyı okumaktan keyif aldığınızı umuyoruz.
Yazar Hakkında
Vikas Bajaj Amazon Web Services'te Çözüm Mimarları, Finansal Hizmetler Kıdemli Müdürüdür. Finansal hizmetlerde ve dijital-yerel işletmelerde yirmi yılı aşkın tecrübesiyle müşterilere ürün tasarımı, teknoloji yol haritaları ve uygulama mimarileri konusunda tavsiyelerde bulunmaktadır.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- EVM Finans. Merkezi Olmayan Finans için Birleşik Arayüz. Buradan Erişin.
- Kuantum Medya Grubu. IR/PR Güçlendirilmiş. Buradan Erişin.
- PlatoAiStream. Web3 Veri Zekası. Bilgi Genişletildi. Buradan Erişin.
- Kaynak: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :vardır
- :dır-dir
- :olumsuzluk
- :Neresi
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Yapabilmek
- Hakkımızda
- yukarıdaki
- Kabul et
- kabul
- erişim
- Hesap
- onaylamak
- karşısında
- eklemek
- ilave
- Ek
- Ayrıca
- Sonra
- tekrar
- Türkiye
- tahsis
- tahsisler
- izin vermek
- veriyor
- Ayrıca
- Amazon
- Amazon EC2
- Amazon Web Servisleri
- an
- ve
- Başka
- herhangi
- Apache
- Apache Kafka
- görünmek
- Uygulama
- uygulamaları
- yaklaşık olarak
- mimari
- ARE
- AS
- ilişkili
- varsayılır
- At
- doğrulanmış
- Doğrulama
- mevcut
- AWS
- AWS CloudFormation
- Bant genişliği
- merkezli
- BE
- Çünkü
- olmuştur
- önce
- olmak
- Daha iyi
- tıkalı
- Çizme atkısı
- her ikisi de
- Alt
- kutu
- komisyoncu
- broker
- tarayıcı
- tampon
- iş
- işletmeler
- fakat
- by
- çağrı
- denilen
- çağrı
- CAN
- dava
- KEDİ
- Yakalamak
- neden olan
- CD
- merkezi
- değişiklik
- değişiklikler
- Kontrol
- Klinik
- sınıf
- müşteri
- istemciler
- Küme
- kod
- ortak
- tamamlamak
- hesaplamak
- kavramlar
- yapılandırma
- yapılandırılmış
- bağlantı
- sonuç olarak
- konsolos
- tüketmek
- tüketici
- içeren
- devam etmek
- devam ediyor
- devam eden
- kontrol
- kaplı
- yaratmak
- çevrimiçi kurslar düzenliyorlar.
- Oluşturma
- akım
- müşteri
- Müşteriler
- veri
- Veri Platformu
- yıl
- azalmak
- Varsayılan
- geciktirmek
- Gösteri
- gösterdi
- bağlı
- tanımlamak
- tarif edilen
- Dizayn
- detaylı
- ayrıntılar
- Belirlemek
- belirleyen
- Boyut
- tartışılan
- ekran
- ayırmak
- belgeleme
- indir
- gereken
- sırasında
- her
- Daha erken
- kaçırmak
- Efekt
- ya
- etkinleştirmek
- etkin
- sağlar
- şifreli
- Son nokta
- uygulamak
- gelişmiş
- sağlamak
- Keşfet
- çevre
- Hatalar
- Eter (ETH)
- sonunda
- muayene etmek
- örnek
- aşmak
- Dışında
- deneyim
- açıkladı
- açıklama
- ihracat
- maruz
- geribesleme
- az
- şekil
- fileto
- dosyalar
- mali
- finansal hizmetler
- bulmak
- Ad
- uygun
- akış
- takip etme
- şu
- İçin
- biçim
- dört
- itibaren
- işlev
- Ayrıca
- almak
- Git
- GitHub
- yönetim
- büyük
- grup
- Grubun
- mutlu
- Var
- he
- duymak
- üst düzey
- Vurgulanan
- umut
- ev sahibi
- ana
- Ne kadar
- Nasıl Yapılır
- HTML
- http
- HTTPS
- IAM
- ID
- Kimlik
- kimlikleri
- if
- göstermektedir
- görüntü
- etkiledi
- uygulama
- uygulanması
- in
- Dahil olmak üzere
- belirtmek
- gösterir
- belirten
- bireysel
- bilgi
- örnek
- integral
- içine
- tanıtmak
- tanıttı
- degil
- konu
- IT
- ONUN
- Java
- jpg
- kafka
- anahtar
- bilinen
- LİMİT
- çizgi
- hatları
- Liste
- mantıksal
- yapmak
- yönetilen
- yönetim
- müdür
- maksimum
- Mayıs..
- ölçülü
- Bellek
- mesajları
- Metrikleri
- dakika
- Moda
- değiştirmek
- izlemek
- Daha
- MS
- çok
- çoklu
- şart
- isim
- isimleri
- Gezin
- Navigasyon
- gerek
- olumsuz
- ağ
- yeni
- sonraki
- yok hayır
- ünlü
- Fark etme..
- numara
- elde eder
- meydana gelen
- of
- on
- ONE
- bir tek
- açılır
- ameliyat
- Operasyon
- seçenek
- Opsiyonlar
- or
- sipariş
- orijinal
- Diğer
- dışarı
- tekrar
- paketlenmiş
- Kanal
- bölmesi
- parametre
- parametreler
- Bölüm
- geçti
- Geçen
- yol
- yüzde
- yapmak
- performans
- izin
- plaintext
- platform
- Platon
- Plato Veri Zekası
- PlatoVeri
- Nokta
- noktaları
- politikaları
- politika
- Çivi
- potansiyel
- presleme
- önlemek
- önceki
- Önceden
- Anapara
- özel
- işleme
- üretmek
- üretici
- PLATFORM
- ürün tasarımı
- özellikleri
- sağlamak
- sağlanan
- halka açık
- yayınlamak
- Sorular
- oran
- daha doğrusu
- ulaşır
- Okumak
- Okuma
- tavsiye etmek
- Tavsiye edilen
- Referans
- bölge
- hatırlamak
- Kaldır
- değiştirmek
- Depo
- temsil
- talep
- isteklerinizi
- gereklidir
- kaynak
- Kaynaklar
- bu
- sırasıyla
- DİNLENME
- Yol haritaları
- Rol
- rolleri
- koşmak
- koşu
- s
- aynı
- memnun
- memnun
- ekran
- sdk
- İkinci
- saniye
- Gizli
- Bölüm
- güvenli
- güvenlik
- güvenlik belirteci
- görmek
- göndermek
- gönderme
- kıdemli
- ayrı
- Dizi
- Hizmetler
- Oturum
- set
- ayar
- ayarlar
- meli
- gösterilen
- Gösteriler
- benzer
- benzer şekilde
- beri
- Çözümler
- Kaynak
- kaynak kodu
- uzay
- özel
- Belirtilen
- yığın
- aşamaları
- başlama
- başladı
- adım
- Basamaklar
- dur
- saklı
- akış
- dizi
- güçlü
- altağlar
- sonraki
- Başarılı olarak
- böyle
- yeterli
- Verilen
- Destekler
- Bizi daha iyi tanımak için
- takım
- Teknoloji
- şablon
- şablonları
- terminal
- test
- test edilmiş
- Test yapmak
- göre
- o
- The
- Kaynak
- ve bazı Asya
- Onları
- sonra
- bu nedenle
- onlar
- Re-Tweet
- üç
- İçinden
- verim
- zaman
- için
- simge
- konu
- Konular
- tedavi etmek
- Güven
- iki
- tip
- türleri
- anlayış
- Güncelleme
- güncellenmiş
- güncellenmesi
- kullanım
- Kullanılmış
- kullanıcı
- kullanıcılar
- kullanım
- kullanma
- değer
- Değerler
- doğrulamak
- üzerinden
- Görüntüle
- oldu
- Yol..
- we
- ağ
- web hizmetleri
- İYİ
- ne zaman
- olup olmadığını
- hangi
- süre
- irade
- ile
- olmadan
- çalışma
- yazmak
- henüz
- sen
- zefirnet