Kuota Kafka merupakan bagian integral dari klaster Kafka multi-penyewa. Mereka mencegah kinerja klaster Kafka terkena dampak negatif dari aplikasi berperilaku buruk yang menghabiskan sumber daya klaster secara berlebihan. Selain itu, teknologi ini memungkinkan platform data streaming pusat untuk dioperasikan sebagai platform multi-penyewa dan digunakan oleh aplikasi hilir dan hulu di berbagai lini bisnis. Kafka mendukung dua jenis kuota: kuota bandwidth jaringan dan kuota tingkat permintaan. Kuota bandwidth jaringan menentukan ambang batas kecepatan byte seperti berapa banyak data yang dapat diproduksi dan dikonsumsi oleh aplikasi klien dari masing-masing broker dalam kluster Kafka yang diukur dalam byte per detik. Kuota tingkat permintaan membatasi persentase waktu yang dihabiskan setiap broker untuk memproses permintaan aplikasi klien. Bergantung pada konfigurasi Anda, kuota Kafka dapat ditetapkan untuk pengguna tertentu, ID klien tertentu, atau keduanya.
In bagian 1 Dalam seri dua bagian ini, kita membahas konsep cara menerapkan kuota Kafka Amazon Managed Streaming untuk Apache Kafka (Amazon MSK) cluster saat menggunakan Identitas AWS dan Manajemen Akses (IAM) kontrol akses.
Dalam postingan ini, kami memandu Anda melalui implementasi langkah demi langkah dalam menyiapkan kuota Kafka di klaster MSK saat menggunakan kontrol akses IAM dan mengujinya melalui contoh aplikasi klien.
Ikhtisar solusi
Gambar berikut, yang pertama kali kami perkenalkan bagian 1, mengilustrasikan bagaimana aplikasi klien Kafka (ProducerApp-1
, ConsumerApp-1
, dan ConsumerApp-2
) akses Topic-B
di klaster MSK dengan mengambil peran IAM tulis dan baca. Setiap aplikasi klien produsen dan konsumen memiliki kuota yang menentukan berapa banyak data yang dapat mereka hasilkan atau konsumsi dalam byte/detik. Itu ProducerApp-1
kuota memungkinkannya menghasilkan hingga 1024 byte/detik per broker. Demikian pula, ConsumerApp-1
dan ConsumerApp-2
kuota memungkinkan mereka mengonsumsi masing-masing 5120 dan 1024 byte/detik per broker. Berikut penjelasan singkat alur yang ditunjukkan pada diagram arsitektur:
- P1 -
ProducerApp-1
(melaluiProducerApp-1-Role
peran IAM) mengasumsikanTopic-B-Write-Role
Peran IAM untuk mengirim pesanTopic-B
- P2 - Dengan
Topic-B-Write-Role
peran IAM diasumsikan,ProducerApp-1
mulai mengirim pesan keTopic-B
- C1 -
ConsumerApp-1
(melaluiConsumerApp-1-Role
peran IAM) danConsumerApp-2
(melaluiConsumerApp-2-Role
peran IAM) mengasumsikanTopic-B-Read-Role
Peran IAM untuk membaca pesanTopic-B
- C2 - Dengan
Topic-B-Read-Role
peran IAM diasumsikan,ConsumerApp-1
danConsumerApp-2
mulai mengkonsumsi pesan dariTopic-B
Perhatikan bahwa posting ini menggunakan Antarmuka Baris Perintah AWS (AWS CLI), Formasi AWS Cloud templat, dan Konsol Manajemen AWS untuk penyediaan dan modifikasi sumber daya AWS, dan sumber daya yang disediakan akan ditagihkan ke akun AWS Anda.
Langkah-langkah tingkat tinggi adalah sebagai berikut:
- Menyediakan klaster MSK dengan kontrol akses IAM dan Cloud komputasi elastis Amazon (Amazon EC2) instans untuk aplikasi klien.
- membuat
Topic-B
pada klaster MSK. - Buat peran IAM untuk diakses oleh aplikasi klien
Topic-B
. - Jalankan aplikasi produsen dan konsumen tanpa menetapkan kuota.
- Konfigurasikan kuota produksi dan konsumsi untuk aplikasi klien.
- Jalankan kembali aplikasi setelah mengatur kuota.
Prasyarat
Disarankan agar Anda membaca bagian 1 dari seri ini sebelum melanjutkan. Untuk memulai, Anda memerlukan hal berikut:
- Akun AWS yang akan disebut sebagai akun demo di postingan ini, dengan asumsi ID akunnya adalah
1111 1111 1111
- Izin untuk membuat, menghapus, dan memodifikasi sumber daya AWS di akun demo
Menyediakan klaster MSK dengan kontrol akses IAM dan instans EC2
Langkah ini melibatkan penyediaan klaster MSK dengan kontrol akses IAM di VPC di akun demo. Selain itu, kami membuat empat instans EC2 untuk membuat perubahan konfigurasi pada klaster MSK dan produsen host serta aplikasi klien konsumen.
Terapkan tumpukan CloudFormation
- Clone file Repositori GitHub untuk mengunduh file templat CloudFormation dan contoh aplikasi klien:
- Pada konsol AWS CloudFormation, pilih Tumpukan di panel navigasi.
- Pilih Buat tumpukan.
- Untuk Siapkan templat, pilih Templat sudah siap.
- Untuk Sumber template, pilih Unggah file templat.
- Unggah
cfn-msk-stack-1.yaml
file dariamazon-msk-kafka-quotas/cfn-templates
direktori, lalu pilih Selanjutnya. - Untuk Nama tumpukan, Masuk
MSKStack
. - Biarkan parameter sebagai default dan pilih Selanjutnya.
- Gulir ke bagian bawah Konfigurasikan opsi tumpukan halaman dan pilih Selanjutnya untuk melanjutkan.
- Gulir ke bagian bawah ULASAN halaman, pilih kotak centang Saya mengakui bahwa CloudFormation dapat membuat sumber daya IAM, dan pilih Kirim.
Diperlukan waktu sekitar 30 menit untuk menyelesaikan tumpukan. Setelah tumpukan berhasil dibuat, sumber daya berikut akan dibuat:
- VPC dengan tiga subnet privat dan satu subnet publik
- Klaster MSK dengan tiga broker dengan kontrol akses IAM diaktifkan
- Instans EC2 dipanggil
MSKAdminInstance
untuk mengubah pengaturan klaster MSK serta membuat dan memodifikasi sumber daya AWS - Instans EC2 untuk
ProducerApp-1
,ConsumerApp-1
, danConsumerApp-2
, satu untuk setiap aplikasi klien - IAM role terpisah untuk setiap instans EC2 yang menghosting aplikasi klien, seperti yang ditunjukkan dalam diagram arsitektur
- Dari tumpukan itu Output tab, perhatikan
MSKClusterArn
nilai.
Buat topik di cluster MSK
Untuk membuat Topic-B
di klaster MSK, selesaikan langkah-langkah berikut:
- Di konsol Amazon EC2, navigasikan ke daftar instans EC2 yang berjalan.
- Pilih
MSKAdminInstance
Contoh EC2 dan pilih Terhubung. - pada session Manager tab, pilih Terhubung.
- Jalankan perintah berikut pada tab baru yang terbuka di browser Anda:
- Atur variabel lingkungan agar mengarah ke titik akhir IAM broker Klaster MSK:
- Perhatikan nilai dari
BOOTSTRAP_BROKERS_IAM
. - Jalankan perintah Kafka CLI berikut untuk membuat
Topic-B
pada kluster MSK:
Karena klaster MSK dilengkapi dengan kontrol akses IAM, pilihannya --command-config
menunjuk ke config_iam.properties
, yang berisi properti yang diperlukan untuk kontrol akses IAM, yang dibuat oleh MSKStack
Tumpukan CloudFormation.
Peringatan berikut mungkin muncul saat Anda menjalankan perintah Kafka CLI, namun Anda dapat mengabaikannya:
- Untuk memverifikasi itu
Topic-B
telah dibuat, daftarkan semua topik:
Buat peran IAM untuk aplikasi klien untuk mengakses Topik-B
Langkah ini melibatkan penciptaan Topic-B-Write-Role
dan Topic-B-Read-Role
seperti yang ditunjukkan pada diagram arsitektur. Topic-B-Write-Role
mengaktifkan operasi tulis Topic-B
, dan dapat diasumsikan oleh ProducerApp-1
. Dengan cara serupa, ConsumerApp-1
dan ConsumerApp-2
bisa berasumsi Topic-B-Read-Role
untuk melakukan operasi baca Topic-B
. Untuk melakukan operasi baca Topic-B
, ConsumerApp-1
dan ConsumerApp-2
juga harus termasuk dalam kelompok konsumen yang ditentukan selama MSKStack
pembaruan tumpukan di langkah berikutnya.
Buat peran dengan langkah-langkah berikut:
- Pada konsol AWS CloudFormation, pilih Tumpukan di panel navigasi.
- Pilih
MSKStack
Dan pilihlah Memperbarui. - Untuk Siapkan templat, pilih Ganti templat saat ini.
- Untuk Sumber template, pilih Unggah file templat.
- Unggah
cfn-msk-stack-2.yaml
file dariamazon-msk-kafka-quotas/cfn-templates
direktori, lalu pilih Selanjutnya. - Berikan parameter tumpukan tambahan berikut:
-
- Untuk Topik B ARN, Masukkan
Topic-B
RNA.
- Untuk Topik B ARN, Masukkan
ARN harus diformat sebagai arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Gunakan nama klaster dan UUID klaster dari ARN klaster MSK yang Anda catat sebelumnya dan berikan Wilayah AWS Anda. Untuk informasi lebih lanjut, lihat Kontrol akses IAM untuk Amazon MSK.
-
- Untuk Nama Grup Konsumen ConsumerApp-1, Masuk
ConsumerApp-1
kelompok konsumen ARN.
- Untuk Nama Grup Konsumen ConsumerApp-1, Masuk
Itu harus diformat sebagai arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Untuk Nama Grup Konsumen ConsumerApp-2, Masuk
ConsumerApp-2
kelompok konsumen ARN.
- Untuk Nama Grup Konsumen ConsumerApp-2, Masuk
Gunakan format yang mirip dengan ARN sebelumnya.
- Pilih Selanjutnya untuk melanjutkan.
- Gulir ke bagian bawah Konfigurasikan tumpukan halaman opsi dan pilih Selanjutnya untuk melanjutkan.
- Gulir ke bagian bawah ULASAN halaman, pilih kotak centang Saya mengakui bahwa CloudFormation dapat membuat sumber daya IAM, dan pilih Perbarui tumpukan.
Diperlukan waktu sekitar 3 menit untuk memperbarui tumpukan. Setelah tumpukan berhasil diperbarui, sumber daya berikut akan dibuat:
- Topik-B-Tulis-Peran – Peran IAM dengan izin untuk melakukan operasi tulis
Topic-B
. Kebijakan kepercayaannya memungkinkanProducerApp-1-Role
Peran IAM untuk memikulnya. - Topik-B-Baca-Peran – Peran IAM dengan izin untuk melakukan operasi baca
Topic-B
. Kebijakan kepercayaannya memungkinkanConsumerApp-1-Role
danConsumerApp-2-Role
Peran IAM untuk memikulnya. Lebih-lebih lagi,ConsumerApp-1
danConsumerApp-2
juga harus termasuk dalam grup konsumen yang Anda tentukan saat memperbarui tumpukan untuk melakukan operasi bacaTopic-B
.
- Dari tumpukan itu Output tab, perhatikan
TopicBReadRoleARN
danTopicBWriteRoleARN
nilai-nilai.
Jalankan aplikasi produsen dan konsumen tanpa menetapkan kuota
Di sini, kita lari ProducerApp-1
, ConsumerApp-1
, dan ConsumerApp-2
tanpa menetapkan kuota mereka. Dari langkah sebelumnya, Anda perlu BOOTSTRAP_BROKERS_IAM
nilai, Topic-B-Write-Role
ARN, dan Topic-B-Read-Role
ARN. Kode sumber aplikasi klien dan versi paketnya tersedia di Repositori GitHub.
Jalankan aplikasi ConsumerApp-1
Untuk menjalankan ConsumerApp-1
aplikasi, selesaikan langkah-langkah berikut:
- Di konsol Amazon EC2, pilih
ConsumerApp-1
Contoh EC2 dan pilih Terhubung. - pada session Manager tab, pilih Terhubung.
- Jalankan perintah berikut pada tab baru yang terbuka di browser Anda:
- Jalankan
ConsumerApp-1
aplikasi untuk mulai mengonsumsi pesanTopic-B
:
Anda dapat menemukan kode sumber di GitHub untuk referensi Anda. Detail parameter baris perintah adalah sebagai berikut:
- –bootstrap-server – Broker bootstrap klaster MSK titik akhir IAM.
- –menganggap-peran-arn -
Topic-B-Read-Role
ARN peran IAM. Dengan asumsi peran ini,ConsumerApp-1
akan membaca pesan dari topik tersebut. - -wilayah – Wilayah yang Anda gunakan.
- –nama-topik – Nama topik dari mana
ConsumerApp-1
akan membaca pesan. Standarnya adalahTopic-B
. - –kelompok konsumen – Nama grup konsumen untuk
ConsumerApp-1
, seperti yang ditentukan selama pembaruan tumpukan. - –nama-sesi-peran -
ConsumerApp-1
mengasumsikanTopic-B-Read-Role
menggunakan Layanan Token Keamanan AWS (AWS STS)SDK.ConsumerApp-1
akan menggunakan nama sesi peran ini saat memanggilassumeRole
fungsi. - –id-klien – ID Klien untuk
ConsumerApp-1
. - –metrik-kuota-konsumen-cetak – Bendera yang menunjukkan apakah metrik klien harus dicetak di terminal
ConsumerApp-1
. - –cw-nama-dimensi - amazoncloudwatch nama dimensi yang akan digunakan untuk mempublikasikan metrik pembatasan klien
ConsumerApp-1
. - –cw-nilai dimensi – Nilai dimensi CloudWatch yang akan digunakan untuk mempublikasikan metrik pembatasan klien
ConsumerApp-1
. - –cw-ruang nama – Ruang nama di mana
ConsumerApp-1
akan menerbitkan metrik CloudWatch untuk memantau pembatasan.
- Jika Anda puas dengan parameter lainnya, gunakan perintah berikut dan ubah
--assume-role-arn
dan--region
sesuai lingkungan Anda:
Grafik fetch-throttle-time-avg
dan fetch-throttle-time-max
metrik klien harus menampilkan 0.0, yang menunjukkan tidak ada pembatasan yang terjadi ConsumerApp-1
. Ingatlah bahwa kami belum menetapkan kuota konsumsinya ConsumerApp-1
belum. Biarkan berjalan sebentar.
Jalankan aplikasi ConsumerApp-2
Untuk menjalankan ConsumerApp-2
aplikasi, selesaikan langkah-langkah berikut:
- Di konsol Amazon EC2, pilih
ConsumerApp-2
Contoh EC2 dan pilih Terhubung. - pada session Manager tab, pilih Terhubung.
- Jalankan perintah berikut pada tab baru yang terbuka di browser Anda:
- Jalankan
ConsumerApp-2
aplikasi untuk mulai mengonsumsi pesanTopic-B
:
Kode ini memiliki detail parameter baris perintah yang serupa ConsumerApp-1
telah dibahas sebelumnya, kecuali hal-hal berikut:
- –kelompok konsumen – Nama grup konsumen untuk
ConsumerApp-2
, seperti yang ditentukan selama pembaruan tumpukan. - –nama-sesi-peran -
ConsumerApp-2
mengasumsikanTopic-B-Read-Role
menggunakan SDK AWS STS.ConsumerApp-2
akan menggunakan nama sesi peran ini saat memanggilassumeRole
fungsi. - –id-klien – ID Klien untuk
ConsumerApp-2
.
- Jika Anda puas dengan parameter lainnya, gunakan perintah berikut dan ubah
--assume-role-arn
dan--region
sesuai lingkungan Anda:
Grafik fetch-throttle-time-avg
dan fetch-throttle-time-max
metrik klien harus menampilkan 0.0, yang menunjukkan tidak ada pembatasan yang terjadi ConsumerApp-2
. Ingatlah bahwa kami belum menetapkan kuota konsumsinya ConsumerApp-2
belum. Biarkan berjalan sebentar.
Jalankan aplikasi ProducerApp-1
Untuk menjalankan ProducerApp-1
aplikasi, selesaikan langkah-langkah berikut:
- Di konsol Amazon EC2, pilih
ProducerApp-1
Contoh EC2 dan pilih Terhubung. - pada session Manager tab, pilih Terhubung.
- Jalankan perintah berikut pada tab baru yang terbuka di browser Anda:
- Jalankan
ProducerApp-1
aplikasi untuk mulai mengirim pesanTopic-B
:
Anda dapat menemukan kode sumber di GitHub untuk referensi Anda. Detail parameter baris perintah adalah sebagai berikut:
- –bootstrap-server – Broker bootstrap klaster MSK titik akhir IAM.
- –menganggap-peran-arn -
Topic-B-Write-Role
ARN peran IAM. Dengan asumsi peran ini,ProducerApp-1
akan menulis pesan ke topik tersebut. - –nama-topik -
ProducerApp-1
akan mengirim pesan ke topik ini. Standarnya adalahTopic-B
. - -wilayah – Wilayah AWS yang Anda gunakan.
- –num-pesan – Jumlah pesan itu
ProducerApp-1
aplikasi akan dikirim ke topik. - –nama-sesi-peran -
ProducerApp-1
mengasumsikanTopic-B-Write-Role
menggunakan SDK AWS STS.ProducerApp-1
akan menggunakan nama sesi peran ini saat memanggilassumeRole
fungsi. - –id-klien – ID Klien dari
ProducerApp-1
. - –tipe produser -
ProducerApp-1
dapat dijalankan juga serentak or tidak sinkron. Pilihannya adalah sinkronisasi or Async. - –metrik-kuota-produsen-cetak – Bendera yang menunjukkan apakah metrik klien harus dicetak di terminal Aplikasi Produser-1.
- –cw-nama-dimensi – Nama dimensi CloudWatch yang akan digunakan untuk memublikasikan metrik pembatasan klien Aplikasi Produser-1.
- –cw-nilai dimensi – Nilai dimensi CloudWatch yang akan digunakan untuk mempublikasikan metrik pembatasan klien Aplikasi Produser-1.
- –cw-ruang nama – Namespace tempat Aplikasi Produser-1 akan menerbitkan metrik CloudWatch untuk memantau pembatasan.
- Jika Anda puas dengan parameter lainnya, gunakan perintah berikut dan ubah
--assume-role-arn
dan--region
sesuai lingkungan Anda. Untuk menjalankan produser Kafka yang sinkron, ia menggunakan opsi--producer-type sync
:
Sebagai alternatif, gunakan --producer-type async
untuk menjalankan produser asinkron. Untuk lebih jelasnya, lihat Pengiriman asinkron.
Grafik produce-throttle-time-avg
dan produce-throttle-time-max
metrik klien harus menampilkan 0.0, yang menunjukkan tidak ada pembatasan yang terjadi ProducerApp-1
. Ingatlah bahwa kami belum menetapkan kuota produksi ProducerApp-1
belum. Periksa itu ConsumerApp-1
dan ConsumerApp-2
dapat menggunakan pesan dan menyadari bahwa pesan tersebut tidak dibatasi. Hentikan aplikasi klien konsumen dan produsen dengan menekan Ctrl + C di tab browser masing-masing.
Tetapkan kuota produksi dan konsumsi untuk aplikasi klien
Sekarang kami telah menjalankan aplikasi produsen dan konsumen tanpa kuota, kami menetapkan kuotanya dan menjalankannya kembali.
Buka Manajer Sesi terminal untuk MSKAdminInstance
Instans EC2 seperti yang dijelaskan sebelumnya dan jalankan perintah berikut untuk menemukan konfigurasi default salah satu broker di klaster MSK. Kluster MSK disediakan dengan konfigurasi kuota Kafka default.
Tangkapan layar berikut menunjukkan Broker-1
nilai default untuk quota.consumer.default
dan quota.producer.default
.
Konfigurasi kuota ProducerApp-1
Ganti placeholder di semua perintah di bagian ini dengan nilai yang sesuai dengan akun Anda.
Menurut diagram arsitektur yang dibahas sebelumnya, atur ProducerApp-1
menghasilkan kuota hingga 1024 byte/detik. Untuk <ProducerApp-1 Client Id>
dan <ProducerApp-1 Role Session>
, pastikan Anda menggunakan nilai yang sama dengan yang Anda gunakan saat menjalankan ProducerApp-1
lebih awal (producerapp-1-client-id
dan producerapp-1-role-session
, masing-masing):
Verifikasi ProducerApp-1
menghasilkan kuota menggunakan perintah berikut:
Anda dapat menghapus ProducerApp-1
menghasilkan kuota dengan menggunakan perintah berikut, tapi jangan jalankan perintah karena kami akan menguji kuota selanjutnya.
Konfigurasi kuota ConsumerApp-1
Ganti placeholder di semua perintah di bagian ini dengan nilai yang sesuai dengan akun Anda.
Mari kita tetapkan kuota konsumsi sebesar 5120 byte/detik untuk ConsumerApp-1
. Forum <ConsumerApp-1 Client Id>
dan <ConsumerApp-1 Role Session>
, pastikan Anda menggunakan nilai yang sama dengan yang Anda gunakan saat menjalankan ConsumerApp-1
lebih awal (consumerapp-1-client-id
dan consumerapp-1-role-session
, masing-masing):
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>
Verifikasi ConsumerApp-1
konsumsi kuota menggunakan perintah berikut:
Anda dapat menghapus ConsumerApp-1
mengkonsumsi kuota, dengan menggunakan perintah berikut, tapi jangan jalankan perintah karena kami akan menguji kuota selanjutnya.
Konfigurasi kuota ConsumerApp-2
Ganti placeholder di semua perintah di bagian ini dengan nilai yang sesuai dengan akun Anda.
Mari kita tetapkan kuota konsumsi sebesar 1024 byte/detik untuk ConsumerApp-2
. Forum <ConsumerApp-2 Client Id>
dan <ConsumerApp-2 Role Session>
, pastikan Anda menggunakan nilai yang sama dengan yang Anda gunakan saat menjalankan ConsumerApp-2
lebih awal (consumerapp-2-client-id
dan consumerapp-2-role-session
, masing-masing):
Verifikasi ConsumerApp-2
konsumsi kuota menggunakan perintah berikut:
Seperti ConsumerApp-1
, Anda dapat menghapusnya ConsumerApp-2
konsumsi kuota menggunakan perintah yang sama dengan ConsumerApp-2
detail klien dan pengguna.
Jalankan kembali aplikasi produsen dan konsumen setelah menetapkan kuota
Mari kita jalankan kembali aplikasi untuk memverifikasi pengaruh kuota.
Jalankan kembali ProducerApp-1
Memutarkan lagi ProducerApp-1
in sinkronis mode dengan perintah yang sama yang Anda gunakan sebelumnya. Tangkapan layar berikut menggambarkan kapan ProducerApp-1
mencapai kuotanya di salah satu broker, the produce-throttle-time-avg
dan produce-throttle-time-max client
nilai metrik akan berada di atas 0.0. Nilai di atas 0.0 menunjukkan hal itu ProducerApp-1
dikekang. Mengizinkan ProducerApp-1
untuk berjalan selama beberapa detik dan kemudian menghentikannya dengan menggunakan Ctrl + C.
Anda juga dapat menguji pengaruh kuota produksi dengan menjalankannya kembali ProducerApp-1
lagi di asynchronous modus (--producer-type async
). Mirip dengan proses sinkron, tangkapan layar berikut mengilustrasikan kapan ProducerApp-1
mencapai kuotanya di salah satu broker, the produce-throttle-time-avg
dan produce-throttle-time-max
nilai metrik klien akan berada di atas 0.0. Nilai di atas 0.0 menunjukkan hal itu ProducerApp-1
dikekang. Izinkan asinkron ProducerApp-1
untuk berlari sebentar.
Anda pada akhirnya akan melihat a TimeoutException
menyatakan org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Saat menggunakan asynchronous produsen dan mengirim pesan dengan kecepatan yang lebih besar daripada yang dapat diterima broker karena kuota, pesan akan diantrekan di memori aplikasi klien terlebih dahulu. Klien pada akhirnya akan kehabisan ruang buffer jika kecepatan pengiriman pesan terus melebihi kecepatan penerimaan pesan, sehingga menyebabkan hal berikutnya Producer.send()
panggilan untuk diblokir. Producer.send()
akhirnya akan melempar a TimeoutException
jika penundaan waktu tunggu tidak cukup untuk memungkinkan broker mengejar aplikasi produsen. Berhenti ProducerApp-1
dengan menggunakan Ctrl + C.
Jalankan kembali ConsumerApp-1
Memutarkan lagi ConsumerApp-1
dengan perintah yang sama yang Anda gunakan sebelumnya. Tangkapan layar berikut menggambarkan kapan ConsumerApp-1
mencapai kuotanya, yaitu fetch-throttle-time-avg
dan fetch-throttle-time-max client
nilai metrik akan berada di atas 0.0. Nilai di atas 0.0 menunjukkan hal itu ConsumerApp-1
dikekang.
mengizinkan ConsumerApp-1
untuk berjalan selama beberapa detik dan kemudian menghentikannya dengan menggunakan Ctrl + C.
Jalankan kembali ConsumerApp-2
Memutarkan lagi ConsumerApp-2
dengan perintah yang sama yang Anda gunakan sebelumnya. Demikian pula kapan ConsumerApp-2
mencapai kuotanya, yaitu fetch-throttle-time-avg
dan fetch-throttle-time-max client
nilai metrik akan berada di atas 0.0. Nilai di atas 0.0 mengindikasikan bahwa ConsumerApp-2
dikekang. Mengizinkan ConsumerApp-2
untuk berjalan selama beberapa detik dan kemudian menghentikannya dengan menekan Ctrl + C.
Metrik kuota klien di Amazon CloudWatch
In bagian 1, kami menjelaskan bahwa metrik klien adalah metrik yang diekspos oleh klien yang terhubung ke kluster Kafka. Mari kita periksa metrik klien di CloudWatch.
- Di konsol CloudWatch, pilih Semua metrik.
- Bawah Ruang Nama Khusus, pilih namespace yang Anda berikan saat menjalankan aplikasi klien.
- Pilih nama dimensi dan pilih
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
, danfetch-throttle-time-avg metrics
untuk semua aplikasi.
Metrik ini menunjukkan perilaku pembatasan ProducerApp-1
, ConsumerApp-1
, dan ConsumerApp-2
aplikasi diuji dengan konfigurasi kuota pada bagian sebelumnya. Tangkapan layar berikut menunjukkan pembatasan ProducerApp-1
, ConsumerApp-1
, dan ConsumerApp-2
berdasarkan kuota bandwidth jaringan. ProducerApp-1
, ConsumerApp-1
, dan ConsumerApp-2
aplikasi memasukkan metrik kliennya masing-masing ke CloudWatch. Anda dapat menemukan kode sumber di GitHub untuk referensi Anda.
Amankan ID klien dan nama sesi peran
Kami membahas cara mengkonfigurasi kuota Kafka menggunakan aplikasi ID klien dan diautentikasi pemakai kepala sekolah. Ketika aplikasi klien mengambil peran IAM untuk mengakses topik Kafka pada klaster MSK dengan autentikasi IAM diaktifkan, aplikasi tersebut diautentikasi pemakai kepala sekolah diwakili dalam format berikut (untuk informasi lebih lanjut, lihat pengidentifikasi IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Ini berisi nama sesi peran (pada kasus ini, producerapp-1-role-session
) digunakan dalam aplikasi klien sambil mengambil peran IAM melalui AWS STS SDK. Aplikasi klien kode sumber tersedia untuk referensi Anda. Itu ID klien adalah string nama logis (misalnya, producerapp-1-client-id
) yang dikonfigurasi dalam kode aplikasi oleh tim aplikasi. Oleh karena itu, suatu aplikasi dapat meniru aplikasi lain jika memperolehnya ID klien dan nama sesi peran aplikasi lain, dan jika aplikasi tersebut memiliki izin untuk menggunakan IAM role yang sama.
Seperti yang ditunjukkan dalam diagram arsitektur, ConsumerApp-1
dan ConsumerApp-2
merupakan dua aplikasi klien yang terpisah dengan alokasi kuotanya masing-masing. Karena keduanya memiliki izin untuk mengambil peran IAM yang sama (Topic-B-Read-Role
) di akun demo, mereka diizinkan untuk menggunakan pesan dari Topic-B
. Oleh karena itu, broker klaster MSK membedakannya berdasarkan fungsinya ID klien dan Pengguna (yang berisi masing-masing nama sesi peran nilai). Jika ConsumerApp-2
entah bagaimana mendapatkan itu ConsumerApp-1
nama sesi peran dan ID klien, itu bisa meniru ConsumerApp-1
dengan menentukan ConsumerApp-1
nama sesi peran dan ID klien dalam kode aplikasi.
Mari kita asumsikan ConsumerApp-1
kegunaan consumerapp-1-client-id
dan consumerapp-1-role-session
sebagai miliknya ID klien dan nama sesi peran, masing-masing. Karena itu, ConsumerApp-1's
dikonfirmasi pemakai prinsipal akan muncul sebagai berikut ketika mengasumsikan Topic-B-Read-Role
Peran IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Demikian pula, ConsumerApp-2
kegunaan consumerapp-2-client-id
dan consumerapp-2-role-session
sebagai miliknya ID klien dan nama sesi peran, masing-masing. Karena itu, ConsumerApp-2's
dikonfirmasi pemakai prinsipal akan muncul sebagai berikut ketika mengasumsikan Topic-B-Read-Role
Peran IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
memperoleh ConsumerApp-1's
ID klien dan nama sesi peran dan menentukannya dalam kode aplikasinya, broker cluster MSK akan memperlakukannya sebagai ConsumerApp-1
dan melihatnya ID klien as consumerapp-1-client-id
, dan yang diautentikasi pemakai pokok sebagai berikut:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Ini memungkinkan ConsumerApp-2
untuk menggunakan data dari klaster MSK pada kecepatan maksimum 5120 byte per detik, bukan 1024 byte per detik sesuai alokasi kuota aslinya. Akibatnya, ConsumerApp-1's
throughput akan terkena dampak negatif jika ConsumerApp-2
berjalan secara bersamaan.
Arsitektur yang ditingkatkan
Anda dapat memperkenalkan Manajer Rahasia AWS dan Layanan Manajemen Kunci AWS (AWS KMS) dalam arsitektur untuk mengamankan aplikasi' ID klien dan nama sesi peran. Untuk memberikan tata kelola yang lebih kuat, ID klien aplikasi dan nama sesi peran harus disimpan sebagai rahasia terenkripsi di Secrets Manager. Kebijakan sumber daya IAM yang terkait dengan rahasia terenkripsi dan kunci terkelola pelanggan (CMK) KMS akan mengizinkan aplikasi untuk mengakses dan mendekripsi hanya ID klien dan nama sesi perannya masing-masing. Dengan cara ini, aplikasi tidak akan dapat mengakses ID klien dan nama sesi peran masing-masing dan meniru identitas satu sama lain. Gambar berikut menunjukkan arsitektur yang ditingkatkan.
Alur yang diperbarui memiliki tahapan sebagai berikut:
- P1 -
ProducerApp-1
mengambil ituclient-id
danrole-session-name
rahasia dari Manajer Rahasia - P2 -
ProducerApp-1
mengkonfigurasi rahasianyaclient-id
asCLIENT_ID_CONFIG
dalam kode aplikasi, dan berasumsiTopic-B-Write-Role
(melaluiProducerApp-1-Role
IAM role) dengan meneruskan rahasianyarole-session-name
ke SDK AWS STSassumeRole
panggilan fungsi - P3 - Dengan
Topic-B-Write-Role
peran IAM diasumsikan,ProducerApp-1
mulai mengirim pesan keTopic-B
- C1 -
ConsumerApp-1
danConsumerApp-2
mengambil masing-masingclient-id
danrole-session-name
rahasia dari Manajer Rahasia - C2 -
ConsumerApp-1
danConsumerApp-2
konfigurasikan rahasianya masing-masingclient-id
asCLIENT_ID_CONFIG
dalam kode aplikasi mereka, dan asumsikanTopic-B-Write-Role
(ViaConsumerApp-1-Role
danConsumerApp-2-Role
peran IAM, masing-masing) dengan meneruskan rahasianyarole-session-name
di SDK AWS STSassumeRole
panggilan fungsi - C3 - Dengan
Topic-B-Read-Role
peran IAM diasumsikan,ConsumerApp-1
danConsumerApp-2
mulai mengkonsumsi pesan dariTopic-B
Lihat dokumentasi untuk Manajer Rahasia AWS dan AWS KMS untuk mendapatkan pemahaman yang lebih baik tentang bagaimana mereka cocok dengan arsitektur.
Bersihkan sumber daya
Navigasikan ke konsol CloudFormation dan hapus MSKStack
tumpukan. Semua sumber daya yang dibuat selama posting ini akan dihapus.
Kesimpulan
Dalam postingan ini, kami membahas langkah-langkah mendetail untuk mengonfigurasi kuota Amazon MSK dan mendemonstrasikan efeknya melalui contoh aplikasi klien. Selain itu, kita membahas bagaimana Anda dapat menggunakan metrik klien untuk menentukan apakah aplikasi klien dibatasi. Kami juga menyoroti potensi masalah dengan ID klien teks biasa dan nama sesi peran. Kami merekomendasikan penerapan kuota Kafka dengan Amazon MSK menggunakan Secrets Manager dan AWS KMS sesuai diagram arsitektur yang direvisi untuk memastikan arsitektur zero-trust.
Jika Anda memiliki masukan atau pertanyaan tentang postingan ini, termasuk arsitektur yang direvisi, kami akan dengan senang hati mendengar pendapat Anda. Kami harap Anda menikmati membaca posting ini.
tentang Penulis
Vika Bajaj adalah Manajer Senior, Arsitek Solusi, Layanan Keuangan di Amazon Web Services. Dengan pengalaman lebih dari dua dekade di bidang jasa keuangan dan bekerja dengan bisnis digital, ia memberikan saran kepada pelanggan mengenai desain produk, peta jalan teknologi, dan arsitektur aplikasi.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- Keuangan EVM. Antarmuka Terpadu untuk Keuangan Terdesentralisasi. Akses Di Sini.
- Grup Media Kuantum. IR/PR Diperkuat. Akses Di Sini.
- PlatoAiStream. Kecerdasan Data Web3. Pengetahuan Diperkuat. Akses Di Sini.
- Sumber: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :memiliki
- :adalah
- :bukan
- :Di mana
- $NAIK
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Sanggup
- Tentang Kami
- atas
- Setuju
- menerima
- mengakses
- Akun
- mengakui
- di seluruh
- menambahkan
- tambahan
- Tambahan
- Selain itu
- Setelah
- lagi
- Semua
- alokasi
- alokasi
- mengizinkan
- memungkinkan
- juga
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- dan
- Lain
- Apa pun
- Apache
- Apache Kafka
- muncul
- Aplikasi
- aplikasi
- sekitar
- arsitektur
- ADALAH
- AS
- terkait
- diasumsikan
- At
- dikonfirmasi
- Otentikasi
- tersedia
- AWS
- Formasi AWS Cloud
- Bandwidth
- berdasarkan
- BE
- karena
- menjadi
- sebelum
- makhluk
- Lebih baik
- diblokir
- Bootstrap
- kedua
- Bawah
- Kotak
- makelar
- broker
- Browser
- penyangga
- bisnis
- bisnis
- tapi
- by
- panggilan
- bernama
- panggilan
- CAN
- kasus
- KUCING
- gulat
- menyebabkan
- CD
- pusat
- perubahan
- Perubahan
- memeriksa
- Pilih
- kelas
- klien
- klien
- Kelompok
- kode
- Umum
- lengkap
- menghitung
- konsep
- konfigurasi
- dikonfigurasi
- Menghubungkan
- Karena itu
- konsul
- memakan
- konsumen
- mengandung
- terus
- terus
- terus-menerus
- kontrol
- tercakup
- membuat
- dibuat
- membuat
- terbaru
- pelanggan
- pelanggan
- data
- Platform Data
- dekade
- Dekripsi
- Default
- menunda
- Demo
- menunjukkan
- Tergantung
- menggambarkan
- dijelaskan
- Mendesain
- terperinci
- rincian
- Menentukan
- ditentukan
- Dimensi
- dibahas
- Display
- membedakan
- dokumentasi
- Download
- dua
- selama
- setiap
- Terdahulu
- gema
- efek
- antara
- aktif
- diaktifkan
- memungkinkan
- terenkripsi
- Titik akhir
- melaksanakan
- ditingkatkan
- memastikan
- Enter
- Lingkungan Hidup
- kesalahan
- Eter (ETH)
- akhirnya
- memeriksa
- contoh
- melebihi
- Kecuali
- pengalaman
- menjelaskan
- penjelasan
- ekspor
- terkena
- umpan balik
- beberapa
- Angka
- File
- File
- keuangan
- jasa keuangan
- Menemukan
- Pertama
- cocok
- aliran
- berikut
- berikut
- Untuk
- format
- empat
- dari
- fungsi
- Selanjutnya
- mendapatkan
- pergi
- GitHub
- pemerintahan
- lebih besar
- Kelompok
- Grup
- senang
- Memiliki
- he
- mendengar
- tingkat tinggi
- Disorot
- berharap
- tuan rumah
- host
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- HTML
- http
- HTTPS
- IAM
- ID
- identitas
- id
- if
- menggambarkan
- gambar
- dampak
- implementasi
- mengimplementasikan
- in
- Termasuk
- menunjukkan
- menunjukkan
- Menunjukkan
- sendiri-sendiri
- informasi
- contoh
- integral
- ke
- memperkenalkan
- diperkenalkan
- adalah n
- isu
- IT
- NYA
- Jawa
- jpg
- kafka
- kunci
- dikenal
- MEMBATASI
- baris
- baris
- Daftar
- logis
- membuat
- berhasil
- pengelolaan
- manajer
- maksimum
- Mungkin..
- diukur
- Memori
- pesan
- Metrik
- menit
- mode
- memodifikasi
- Memantau
- lebih
- MS
- banyak
- beberapa
- harus
- nama
- nama
- Arahkan
- Navigasi
- Perlu
- negatif
- jaringan
- New
- berikutnya
- tidak
- terkenal
- Melihat..
- jumlah
- memperoleh
- terjadi
- of
- on
- ONE
- hanya
- membuka
- dioperasikan
- Operasi
- pilihan
- Opsi
- or
- urutan
- asli
- Lainnya
- di luar
- lebih
- dikemas
- halaman
- pane
- parameter
- parameter
- bagian
- Lulus
- Lewat
- path
- persentase
- melakukan
- prestasi
- izin
- Teks biasa
- Platform
- plato
- Kecerdasan Data Plato
- Data Plato
- Titik
- poin
- Kebijakan
- kebijaksanaan
- Pos
- potensi
- mendesak
- mencegah
- sebelumnya
- sebelumnya
- Utama
- swasta
- pengolahan
- menghasilkan
- produsen
- Produk
- desain produk
- properties
- memberikan
- disediakan
- publik
- menerbitkan
- Pertanyaan
- Penilaian
- agak
- Mencapai
- Baca
- Bacaan
- sarankan
- direkomendasikan
- disebut
- wilayah
- ingat
- menghapus
- menggantikan
- gudang
- diwakili
- permintaan
- permintaan
- wajib
- sumber
- Sumber
- itu
- masing-masing
- ISTIRAHAT
- peta jalan
- Peran
- peran
- Run
- berjalan
- s
- sama
- puas
- puas dengan
- screenshot
- SDK
- Kedua
- detik
- Rahasia
- Bagian
- aman
- keamanan
- token keamanan
- melihat
- mengirim
- mengirim
- senior
- terpisah
- Seri
- Layanan
- Sidang
- set
- pengaturan
- pengaturan
- harus
- ditunjukkan
- Pertunjukkan
- mirip
- Demikian pula
- sejak
- Solusi
- sumber
- kode sumber
- Space
- tertentu
- ditentukan
- tumpukan
- magang
- awal
- mulai
- Langkah
- Tangga
- berhenti
- tersimpan
- Streaming
- Tali
- lebih kuat
- subnet
- selanjutnya
- berhasil
- seperti itu
- cukup
- dipasok
- Mendukung
- Mengambil
- tim
- Teknologi
- Template
- template
- terminal
- uji
- diuji
- pengujian
- dari
- bahwa
- Grafik
- Sumber
- mereka
- Mereka
- kemudian
- karena itu
- mereka
- ini
- tiga
- Melalui
- keluaran
- waktu
- untuk
- token
- tema
- Topik
- mengobati
- Kepercayaan
- dua
- mengetik
- jenis
- pemahaman
- Memperbarui
- diperbarui
- memperbarui
- menggunakan
- bekas
- Pengguna
- Pengguna
- kegunaan
- menggunakan
- nilai
- Nilai - Nilai
- memeriksa
- melalui
- View
- adalah
- Cara..
- we
- jaringan
- layanan web
- BAIK
- ketika
- apakah
- yang
- sementara
- akan
- dengan
- tanpa
- kerja
- menulis
- namun
- kamu
- Anda
- zephyrnet.dll