Hạn ngạch Kafka là không thể thiếu đối với các cụm Kafka nhiều người thuê. Chúng ngăn không cho hiệu suất của cụm Kafka bị ảnh hưởng tiêu cực bởi các ứng dụng hoạt động kém tiêu tốn quá nhiều tài nguyên của cụm. Hơn nữa, chúng cho phép nền tảng dữ liệu phát trực tuyến trung tâm được vận hành như một nền tảng nhiều người thuê và được sử dụng bởi các ứng dụng ngược dòng và hạ nguồn trên nhiều ngành nghề kinh doanh. Kafka hỗ trợ hai loại hạn ngạch: hạn ngạch băng thông mạng và hạn ngạch tỷ lệ yêu cầu. Hạn ngạch băng thông mạng xác định ngưỡng tốc độ byte, chẳng hạn như lượng ứng dụng khách dữ liệu có thể tạo ra và tiêu thụ từ mỗi nhà môi giới riêng lẻ trong cụm Kafka được đo bằng byte mỗi giây. Hạn ngạch tỷ lệ yêu cầu giới hạn tỷ lệ phần trăm thời gian mà mỗi nhà môi giới riêng lẻ dành để xử lý các yêu cầu ứng dụng của khách hàng. Tùy thuộc vào cấu hình của bạn, hạn ngạch Kafka có thể được đặt cho người dùng cụ thể, ID khách hàng cụ thể hoặc cả hai.
In Phần 1 của loạt bài gồm hai phần này, chúng tôi đã thảo luận về các khái niệm về cách thực thi hạn ngạch Kafka trong Truyền trực tuyến được quản lý của Amazon cho Apache Kafka (Amazon MSK) cụm trong khi sử dụng Quản lý truy cập và nhận dạng AWS (IAM) kiểm soát truy cập.
Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách triển khai từng bước thiết lập hạn ngạch Kafka trong cụm MSK trong khi sử dụng kiểm soát truy cập IAM và kiểm tra chúng thông qua các ứng dụng khách mẫu.
Tổng quan về giải pháp
Hình dưới đây được chúng tôi giới thiệu lần đầu tiên trong Phần 1, minh họa cách ứng dụng khách Kafka (ProducerApp-1
, ConsumerApp-1
và ConsumerApp-2
) truy cập Topic-B
trong cụm MSK bằng cách giả sử vai trò ghi và đọc IAM. Mỗi ứng dụng khách hàng của nhà sản xuất và người tiêu dùng đều có một hạn ngạch xác định lượng dữ liệu họ có thể tạo ra hoặc tiêu thụ tính bằng byte/giây. Các ProducerApp-1
hạn ngạch cho phép nó tạo ra tối đa 1024 byte/giây cho mỗi nhà môi giới. Tương tự, các ConsumerApp-1
và ConsumerApp-2
hạn ngạch cho phép họ tiêu thụ lần lượt 5120 và 1024 byte/giây cho mỗi nhà môi giới. Sau đây là giải thích ngắn gọn về luồng được hiển thị trong sơ đồ kiến trúc:
- P1 –
ProducerApp-1
(thông qua nóProducerApp-1-Role
vai trò IAM) đảm nhận vai tròTopic-B-Write-Role
Vai trò IAM để gửi tin nhắn đếnTopic-B
- P2 - Với
Topic-B-Write-Role
Đảm nhận vai trò IAM,ProducerApp-1
bắt đầu gửi tin nhắn đếnTopic-B
- C1 –
ConsumerApp-1
(thông qua nóConsumerApp-1-Role
vai trò IAM) vàConsumerApp-2
(thông qua nóConsumerApp-2-Role
vai trò IAM) đảm nhận vai tròTopic-B-Read-Role
Vai trò IAM để đọc tin nhắn từTopic-B
- C2 - Với
Topic-B-Read-Role
Đảm nhận vai trò IAM,ConsumerApp-1
vàConsumerApp-2
bắt đầu tiêu thụ tin nhắn từTopic-B
Lưu ý rằng bài đăng này sử dụng Giao diện dòng lệnh AWS (AWS CLI), Hình thành đám mây AWS các mẫu và Bảng điều khiển quản lý AWS để cung cấp và sửa đổi tài nguyên AWS và tài nguyên được cung cấp sẽ được tính phí vào tài khoản AWS của bạn.
Các bước cấp cao như sau:
- Cung cấp cụm MSK với kiểm soát truy cập IAM và Đám mây điện toán đàn hồi Amazon (Amazon EC2) phiên bản dành cho ứng dụng khách.
- Tạo
Topic-B
trên cụm MSK. - Tạo vai trò IAM để ứng dụng khách truy cập
Topic-B
. - Chạy các ứng dụng của nhà sản xuất và người tiêu dùng mà không cần đặt hạn ngạch.
- Định cấu hình hạn ngạch sản xuất và tiêu thụ cho các ứng dụng khách.
- Chạy lại các ứng dụng sau khi đặt hạn ngạch.
Điều kiện tiên quyết
Bạn nên đọc Phần 1 của loạt bài này trước khi tiếp tục. Để bắt đầu, bạn cần có những điều sau:
- Tài khoản AWS sẽ được gọi là tài khoản demo trong bài đăng này, giả sử rằng ID tài khoản của nó là
1111 1111 1111
- Quyền tạo, xóa và sửa đổi tài nguyên AWS trong tài khoản demo
Cung cấp cụm MSK với kiểm soát truy cập IAM và phiên bản EC2
Bước này liên quan đến việc cung cấp cụm MSK với quyền kiểm soát truy cập IAM trong VPC trong tài khoản demo. Ngoài ra, chúng tôi tạo bốn phiên bản EC2 để thực hiện thay đổi cấu hình cho cụm MSK cũng như các ứng dụng của nhà sản xuất máy chủ và máy khách tiêu dùng.
Triển khai ngăn xếp CloudFormation
- Sao chép Kho GitHub để tải xuống các tệp mẫu CloudFormation và ứng dụng khách mẫu:
- Trên bảng điều khiển AWS CloudFormation, hãy chọn Stacks trong khung điều hướng.
- Chọn Tạo ngăn xếp.
- Trong chuẩn bị mẫu, lựa chọn Mẫu đã sẵn sàng.
- Trong Nguồn mẫu, lựa chọn Tải lên tệp mẫu.
- Tải lên
cfn-msk-stack-1.yaml
tập tin từamazon-msk-kafka-quotas/cfn-templates
thư mục rồi chọn Sau. - Trong Tên ngăn xếp, đi vào
MSKStack
. - Để các thông số mặc định và chọn Sau.
- Cuộn xuống cuối Cấu hình tùy chọn ngăn xếp trang và chọn Sau để tiếp tục.
- Cuộn xuống cuối Đánh giá trang, hãy chọn hộp kiểm Tôi xác nhận rằng CloudFormation có thể tạo tài nguyên IAM, và lựa chọn Gửi.
Sẽ mất khoảng 30 phút để ngăn xếp hoàn thành. Sau khi ngăn xếp được tạo thành công, các tài nguyên sau sẽ được tạo:
- Một VPC có ba mạng con riêng tư và một mạng con công cộng
- Một cụm MSK có ba nhà môi giới đã bật kiểm soát truy cập IAM
- Một phiên bản EC2 được gọi là
MSKAdminInstance
để sửa đổi cài đặt cụm MSK cũng như tạo và sửa đổi tài nguyên AWS - Phiên bản EC2 dành cho
ProducerApp-1
,ConsumerApp-1
vàConsumerApp-2
, một cho mỗi ứng dụng khách - Vai trò IAM riêng biệt cho từng phiên bản EC2 lưu trữ ứng dụng khách, như minh họa trong sơ đồ kiến trúc
- Từ ngăn xếp Kết quả đầu ra tab, lưu ý
MSKClusterArn
giá trị.
Tạo một chủ đề trên cụm MSK
Để tạo Topic-B
trên cụm MSK, hãy hoàn thành các bước sau:
- Trên bảng điều khiển Amazon EC2, hãy điều hướng đến danh sách các phiên bản EC2 đang chạy.
- Chọn hình ba gạch
MSKAdminInstance
Phiên bản EC2 và chọn Kết nối. - trên Quản lý phiên tab, chọn Kết nối.
- Chạy các lệnh sau trên tab mới mở trong trình duyệt của bạn:
- Đặt biến môi trường để trỏ đến điểm cuối IAM của trình môi giới cụm MSK:
- Hãy lưu ý đến giá trị của
BOOTSTRAP_BROKERS_IAM
. - Chạy lệnh Kafka CLI sau để tạo
Topic-B
trên cụm MSK:
Vì cụm MSK được cung cấp kiểm soát truy cập IAM nên tùy chọn --command-config
điểm đến config_iam.properties
, chứa các thuộc tính cần thiết cho kiểm soát truy cập IAM, được tạo bởi MSKStack
Ngăn xếp CloudFormation.
Các cảnh báo sau có thể xuất hiện khi bạn chạy lệnh Kafka CLI, nhưng bạn có thể bỏ qua chúng:
- Để xác minh điều đó
Topic-B
đã được tạo, liệt kê tất cả các chủ đề:
Tạo vai trò IAM cho ứng dụng khách để truy cập Chủ đề-B
Bước này bao gồm việc tạo Topic-B-Write-Role
và Topic-B-Read-Role
như thể hiện trong sơ đồ kiến trúc. Topic-B-Write-Role
cho phép thao tác ghi trên Topic-B
, và có thể được giả định bởi ProducerApp-1
. Theo cách tương tự, ConsumerApp-1
và ConsumerApp-2
có thể giả định Topic-B-Read-Role
để thực hiện các thao tác đọc trên Topic-B
. Để thực hiện các thao tác đọc trên Topic-B
, ConsumerApp-1
và ConsumerApp-2
cũng phải thuộc các nhóm người tiêu dùng được chỉ định trong quá trình MSKStack
cập nhật ngăn xếp ở bước tiếp theo.
Tạo vai trò theo các bước sau:
- Trên bảng điều khiển AWS CloudFormation, hãy chọn Stacks trong khung điều hướng.
- Chọn
MSKStack
Và chọn Cập nhật. - Trong chuẩn bị mẫu, chọn Thay thế mẫu hiện tại.
- Trong Nguồn mẫu, lựa chọn Tải lên tệp mẫu.
- Tải lên
cfn-msk-stack-2.yaml
tập tin từamazon-msk-kafka-quotas/cfn-templates
thư mục rồi chọn Sau. - Cung cấp các tham số ngăn xếp bổ sung sau:
-
- Trong Chủ đề B ARN, nhập
Topic-B
ARN.
- Trong Chủ đề B ARN, nhập
ARN phải được định dạng là arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Sử dụng tên cụm và UUID cụm từ ARN cụm MSK mà bạn đã ghi chú trước đó và cung cấp Khu vực AWS của mình. Để biết thêm thông tin, hãy tham khảo Kiểm soát truy cập IAM cho Amazon MSK.
-
- Trong Tên nhóm người tiêu dùng ConsumerApp-1, đi vào
ConsumerApp-1
nhóm người tiêu dùng ARN.
- Trong Tên nhóm người tiêu dùng ConsumerApp-1, đi vào
Nó phải được định dạng là arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Trong Tên nhóm người tiêu dùng ConsumerApp-2, đi vào
ConsumerApp-2
nhóm người tiêu dùng ARN.
- Trong Tên nhóm người tiêu dùng ConsumerApp-2, đi vào
Sử dụng định dạng tương tự như ARN trước đó.
- Chọn Sau để tiếp tục.
- Cuộn xuống cuối Định cấu hình ngăn xếp trang tùy chọn và chọn Sau để tiếp tục.
- Cuộn xuống cuối Đánh giá trang, hãy chọn hộp kiểm Tôi xác nhận rằng CloudFormation có thể tạo tài nguyên IAM, và lựa chọn Cập nhật ngăn xếp.
Sẽ mất khoảng 3 phút để ngăn xếp cập nhật. Sau khi ngăn xếp được cập nhật thành công, các tài nguyên sau sẽ được tạo:
- Chủ đề-B-Viết-Vai trò – Vai trò IAM có quyền thực hiện các thao tác ghi trên
Topic-B
. Chính sách tin cậy của nó cho phépProducerApp-1-Role
IAM đảm nhận vai trò đó. - Chủ đề-B-Đọc-Vai trò – Vai trò IAM có quyền thực hiện các thao tác đọc trên
Topic-B
. Chính sách tin cậy của nó cho phépConsumerApp-1-Role
vàConsumerApp-2-Role
IAM đảm nhận vai trò đó. Hơn nữa,ConsumerApp-1
vàConsumerApp-2
cũng phải thuộc về nhóm người tiêu dùng mà bạn đã chỉ định khi cập nhật ngăn xếp để thực hiện các thao tác đọc trênTopic-B
.
- Từ ngăn xếp Kết quả đầu ra tab, lưu ý
TopicBReadRoleARN
vàTopicBWriteRoleARN
các giá trị.
Chạy các ứng dụng của nhà sản xuất và người tiêu dùng mà không cần đặt hạn ngạch
Ở đây, chúng tôi chạy ProducerApp-1
, ConsumerApp-1
và ConsumerApp-2
mà không đặt ra hạn ngạch của họ. Từ các bước trước, bạn sẽ cần BOOTSTRAP_BROKERS_IAM
giá trị, Topic-B-Write-Role
ARN và Topic-B-Read-Role
ARN. Mã nguồn của ứng dụng khách và các phiên bản đóng gói của chúng có sẵn trong Kho GitHub.
Chạy ứng dụng ConsumerApp-1
Để chạy ConsumerApp-1
ứng dụng, hãy hoàn thành các bước sau:
- Trên bảng điều khiển Amazon EC2, chọn
ConsumerApp-1
Phiên bản EC2 và chọn Kết nối. - trên Quản lý phiên tab, chọn Kết nối.
- Chạy các lệnh sau trên tab mới mở trong trình duyệt của bạn:
- Chạy
ConsumerApp-1
ứng dụng để bắt đầu sử dụng tin nhắn từTopic-B
:
Bạn có thể tìm thấy mã nguồn trên GitHub để bạn tham khảo. Chi tiết tham số dòng lệnh như sau:
- –bootstrap-máy chủ – Điểm cuối IAM của môi giới khởi động cụm MSK.
- –giả định-vai-arn –
Topic-B-Read-Role
IAM vai trò ARN. Đảm nhận vai trò này,ConsumerApp-1
sẽ đọc tin nhắn từ chủ đề này. - -vùng đất – Khu vực bạn đang sử dụng.
- -Tên chủ đề – Tên chủ đề lấy từ đâu
ConsumerApp-1
sẽ đọc tin nhắn. Mặc định làTopic-B
. - –nhóm người tiêu dùng – Tên nhóm người tiêu dùng cho
ConsumerApp-1
, như được chỉ định trong quá trình cập nhật ngăn xếp. - –role-session-name –
ConsumerApp-1
giả địnhTopic-B-Read-Role
bằng cách sử dụng Dịch vụ mã thông báo bảo mật AWS (AWS STS) SDK.ConsumerApp-1
sẽ sử dụng tên phiên vai trò này khi gọiassumeRole
chức năng. - –id khách hàng – ID khách hàng cho
ConsumerApp-1
. - –print-người tiêu dùng-hạn ngạch-số liệu – Cờ cho biết liệu số liệu của khách hàng có nên được in trên thiết bị đầu cuối hay không
ConsumerApp-1
. - –cw-kích thước-tên – amazoncloudwatch tên thứ nguyên sẽ được sử dụng để xuất bản các chỉ số điều tiết khách hàng từ
ConsumerApp-1
. - –cw-kích thước-giá trị – Giá trị thứ nguyên CloudWatch sẽ được sử dụng để xuất bản số liệu điều chỉnh máy khách từ
ConsumerApp-1
. - –cw-không gian tên – Không gian tên ở đâu
ConsumerApp-1
sẽ xuất bản số liệu CloudWatch để theo dõi việc điều chỉnh.
- Nếu bạn hài lòng với các tham số còn lại, hãy sử dụng lệnh sau và thay đổi
--assume-role-arn
và--region
theo môi trường của bạn:
Sản phẩm fetch-throttle-time-avg
và fetch-throttle-time-max
số liệu của khách hàng sẽ hiển thị 0.0, cho biết không có hiện tượng điều chỉnh nào xảy ra đối với ConsumerApp-1
. Hãy nhớ rằng chúng tôi chưa đặt hạn ngạch tiêu thụ cho ConsumerApp-1
chưa. Hãy để nó chạy một lúc.
Chạy ứng dụng ConsumerApp-2
Để chạy ConsumerApp-2
ứng dụng, hãy hoàn thành các bước sau:
- Trên bảng điều khiển Amazon EC2, chọn
ConsumerApp-2
Phiên bản EC2 và chọn Kết nối. - trên Quản lý phiên tab, chọn Kết nối.
- Chạy các lệnh sau trên tab mới mở trong trình duyệt của bạn:
- Chạy
ConsumerApp-2
ứng dụng để bắt đầu sử dụng tin nhắn từTopic-B
:
Mã này có chi tiết tham số dòng lệnh tương tự như ConsumerApp-1
đã thảo luận trước đây, ngoại trừ những điều sau đây:
- –nhóm người tiêu dùng – Tên nhóm người tiêu dùng cho
ConsumerApp-2
, như được chỉ định trong quá trình cập nhật ngăn xếp. - –role-session-name –
ConsumerApp-2
giả địnhTopic-B-Read-Role
bằng cách sử dụng SDK AWS STS.ConsumerApp-2
sẽ sử dụng tên phiên vai trò này khi gọiassumeRole
chức năng. - –id khách hàng – ID khách hàng cho
ConsumerApp-2
.
- Nếu bạn hài lòng với các tham số còn lại, hãy sử dụng lệnh sau và thay đổi
--assume-role-arn
và--region
theo môi trường của bạn:
Sản phẩm fetch-throttle-time-avg
và fetch-throttle-time-max
số liệu của khách hàng sẽ hiển thị 0.0, cho biết không có hiện tượng điều chỉnh nào xảy ra đối với ConsumerApp-2
. Hãy nhớ rằng chúng tôi chưa đặt hạn ngạch tiêu thụ cho ConsumerApp-2
chưa. Hãy để nó chạy một lúc.
Chạy ứng dụng ProduceApp-1
Để chạy ProducerApp-1
ứng dụng, hãy hoàn thành các bước sau:
- Trên bảng điều khiển Amazon EC2, chọn
ProducerApp-1
Phiên bản EC2 và chọn Kết nối. - trên Quản lý phiên tab, chọn Kết nối.
- Chạy các lệnh sau trên tab mới mở trong trình duyệt của bạn:
- Chạy
ProducerApp-1
ứng dụng để bắt đầu gửi tin nhắn đếnTopic-B
:
Bạn có thể tìm thấy mã nguồn trên GitHub để bạn tham khảo. Chi tiết tham số dòng lệnh như sau:
- –bootstrap-máy chủ – Điểm cuối IAM của môi giới khởi động cụm MSK.
- –giả định-vai-arn –
Topic-B-Write-Role
IAM vai trò ARN. Đảm nhận vai trò này,ProducerApp-1
sẽ viết tin nhắn cho chủ đề này. - -Tên chủ đề –
ProducerApp-1
sẽ gửi tin nhắn đến chủ đề này. Mặc định làTopic-B
. - -vùng đất – Khu vực AWS bạn đang sử dụng.
- –num-tin nhắn – Số lượng tin nhắn
ProducerApp-1
ứng dụng sẽ gửi đến chủ đề. - –role-session-name –
ProducerApp-1
giả địnhTopic-B-Write-Role
bằng cách sử dụng SDK AWS STS.ProducerApp-1
sẽ sử dụng tên phiên vai trò này khi gọiassumeRole
chức năng. - –id khách hàng – ID khách hàng của
ProducerApp-1
. - –loại nhà sản xuất –
ProducerApp-1
có thể chạy được đồng bộ or không đồng bộ. Tùy chọn là đồng bộ or không đồng bộ. - –print-producer-hạn ngạch-số liệu – Cờ cho biết liệu số liệu của khách hàng có nên được in trên thiết bị đầu cuối hay không bằng cách Nhà sản xuấtApp-1.
- –cw-kích thước-tên – Tên thứ nguyên CloudWatch sẽ được sử dụng để xuất bản số liệu điều chỉnh máy khách từ Nhà sản xuấtApp-1.
- –cw-kích thước-giá trị – Giá trị thứ nguyên CloudWatch sẽ được sử dụng để xuất bản số liệu điều chỉnh máy khách từ Nhà sản xuấtApp-1.
- –cw-không gian tên – Không gian tên nơi Nhà sản xuấtApp-1 sẽ xuất bản số liệu CloudWatch để theo dõi việc điều chỉnh.
- Nếu bạn hài lòng với các tham số còn lại, hãy sử dụng lệnh sau và thay đổi
--assume-role-arn
và--region
theo môi trường của bạn. Để chạy trình sản xuất Kafka đồng bộ, nó sử dụng tùy chọn--producer-type sync
:
Ngoài ra, sử dụng --producer-type async
để chạy một nhà sản xuất không đồng bộ. Để biết thêm chi tiết, hãy tham khảo Gửi không đồng bộ.
Sản phẩm produce-throttle-time-avg
và produce-throttle-time-max
số liệu của khách hàng sẽ hiển thị 0.0, cho biết không có hiện tượng điều chỉnh nào xảy ra đối với ProducerApp-1
. Hãy nhớ rằng chúng ta chưa đặt ra hạn ngạch sản xuất cho ProducerApp-1
chưa. Kiểm tra xem ConsumerApp-1
và ConsumerApp-2
có thể sử dụng tin nhắn và nhận thấy chúng không bị điều tiết. Dừng các ứng dụng khách hàng tiêu dùng và nhà sản xuất bằng cách nhấn Ctrl + C trong các tab trình duyệt tương ứng của họ.
Đặt hạn ngạch sản xuất và tiêu thụ cho các ứng dụng khách
Bây giờ chúng tôi đã chạy các ứng dụng của nhà sản xuất và người tiêu dùng mà không có hạn ngạch, chúng tôi đặt hạn ngạch và chạy lại chúng.
Mở Trình quản lý phiên thiết bị đầu cuối cho MSKAdminInstance
EC2 như được mô tả trước đó và chạy các lệnh sau để tìm cấu hình mặc định của một trong các nhà môi giới trong cụm MSK. Các cụm MSK được cung cấp cấu hình hạn ngạch Kafka mặc định.
Ảnh chụp màn hình sau đây cho thấy Broker-1
giá trị mặc định cho quota.consumer.default
và quota.producer.default
.
Cấu hình hạn ngạch của ProduceApp-1
Thay thế phần giữ chỗ trong tất cả các lệnh trong phần này bằng các giá trị tương ứng với tài khoản của bạn.
Theo sơ đồ kiến trúc đã thảo luận trước đó, hãy thiết lập ProducerApp-1
tạo hạn ngạch tới 1024 byte/giây. Vì <ProducerApp-1 Client Id>
và <ProducerApp-1 Role Session>
, hãy đảm bảo bạn sử dụng cùng các giá trị mà bạn đã sử dụng khi chạy ProducerApp-1
sớm hơn (producerapp-1-client-id
và producerapp-1-role-session
, tương ứng):
Xác minh ProducerApp-1
tạo hạn ngạch bằng lệnh sau:
Bạn có thể loại bỏ ProducerApp-1
tạo hạn ngạch bằng cách sử dụng lệnh sau, nhưng không chạy lệnh vì chúng tôi sẽ kiểm tra hạn ngạch tiếp theo.
Cấu hình hạn ngạch ConsumerApp-1
Thay thế phần giữ chỗ trong tất cả các lệnh trong phần này bằng các giá trị tương ứng với tài khoản của bạn.
Hãy đặt hạn ngạch tiêu thụ là 5120 byte/giây cho ConsumerApp-1
. Đối với <ConsumerApp-1 Client Id>
và <ConsumerApp-1 Role Session>
, hãy đảm bảo bạn sử dụng cùng các giá trị mà bạn đã sử dụng khi chạy ConsumerApp-1
sớm hơn (consumerapp-1-client-id
và consumerapp-1-role-session
, tương ứng):
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>
Xác minh ConsumerApp-1
tiêu thụ hạn ngạch bằng lệnh sau:
Bạn có thể loại bỏ ConsumerApp-1
tiêu thụ hạn ngạch, bằng cách sử dụng lệnh sau, nhưng không chạy lệnh vì chúng tôi sẽ kiểm tra hạn ngạch tiếp theo.
Cấu hình hạn ngạch ConsumerApp-2
Thay thế phần giữ chỗ trong tất cả các lệnh trong phần này bằng các giá trị tương ứng với tài khoản của bạn.
Hãy đặt hạn ngạch tiêu thụ là 1024 byte/giây cho ConsumerApp-2
. Đối với <ConsumerApp-2 Client Id>
và <ConsumerApp-2 Role Session>
, hãy đảm bảo bạn sử dụng cùng các giá trị mà bạn đã sử dụng khi chạy ConsumerApp-2
sớm hơn (consumerapp-2-client-id
và consumerapp-2-role-session
, tương ứng):
Xác minh ConsumerApp-2
tiêu thụ hạn ngạch bằng lệnh sau:
Như với ConsumerApp-1
, bạn có thể loại bỏ ConsumerApp-2
tiêu thụ hạn ngạch bằng lệnh tương tự với ConsumerApp-2
chi tiết về khách hàng và người dùng.
Chạy lại ứng dụng của nhà sản xuất và người tiêu dùng sau khi đặt hạn ngạch
Hãy chạy lại các ứng dụng để xác minh tác dụng của hạn ngạch.
Chạy lại MakerApp-1
Chạy lại ProducerApp-1
in đồng bộ chế độ bằng cùng lệnh mà bạn đã sử dụng trước đó. Ảnh chụp màn hình sau đây minh họa rằng khi ProducerApp-1
đạt đến hạn ngạch đối với bất kỳ nhà môi giới nào, produce-throttle-time-avg
và produce-throttle-time-max client
giá trị số liệu sẽ ở trên 0.0. Giá trị trên 0.0 chỉ ra rằng ProducerApp-1
được điều tiết. Cho phép ProducerApp-1
để chạy trong vài giây rồi dừng nó bằng cách sử dụng Ctrl + C.
Bạn cũng có thể kiểm tra tác động của hạn ngạch sản xuất bằng cách chạy lại ProducerApp-1
một lần nữa trong không đồng bộ chế độ (--producer-type async
). Tương tự như chạy đồng bộ, ảnh chụp màn hình sau đây minh họa rằng khi ProducerApp-1
đạt đến hạn ngạch đối với bất kỳ nhà môi giới nào, produce-throttle-time-avg
và produce-throttle-time-max
giá trị số liệu khách hàng sẽ ở trên 0.0. Giá trị trên 0.0 chỉ ra rằng ProducerApp-1
được điều tiết. Cho phép không đồng bộ ProducerApp-1
để chạy một lúc.
Cuối cùng bạn sẽ thấy một TimeoutException
nêu org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Khi sử dụng một không đồng bộ nhà sản xuất và gửi tin nhắn với tốc độ lớn hơn mức mà nhà môi giới có thể chấp nhận do hạn ngạch, trước tiên các tin nhắn sẽ được xếp hàng đợi trong bộ nhớ ứng dụng khách. Máy khách cuối cùng sẽ hết dung lượng bộ đệm nếu tốc độ gửi tin nhắn tiếp tục vượt quá tốc độ chấp nhận tin nhắn, gây ra lỗi tiếp theo. Producer.send()
cuộc gọi bị chặn. Producer.send()
cuối cùng sẽ ném một TimeoutException
nếu độ trễ thời gian chờ không đủ để cho phép nhà môi giới bắt kịp ứng dụng của nhà sản xuất. Dừng lại ProducerApp-1
bằng cách sử dụng Ctrl + C.
Chạy lại ConsumerApp-1
Chạy lại ConsumerApp-1
bằng lệnh tương tự mà bạn đã sử dụng trước đó. Ảnh chụp màn hình sau đây minh họa rằng khi ConsumerApp-1
đạt hạn ngạch, fetch-throttle-time-avg
và fetch-throttle-time-max client
giá trị số liệu sẽ ở trên 0.0. Giá trị trên 0.0 chỉ ra rằng ConsumerApp-1
được điều tiết.
Cho phép ConsumerApp-1
để chạy trong vài giây rồi dừng nó bằng cách sử dụng Ctrl + C.
Chạy lại ConsumerApp-2
Chạy lại ConsumerApp-2
bằng lệnh tương tự mà bạn đã sử dụng trước đó. Tương tự, khi ConsumerApp-2
đạt hạn ngạch, fetch-throttle-time-avg
và fetch-throttle-time-max client
giá trị số liệu sẽ ở trên 0.0. Một giá trị trên 0.0 chỉ ra rằng ConsumerApp-2
được điều tiết. Cho phép ConsumerApp-2
chạy trong vài giây rồi dừng lại bằng cách nhấn Ctrl + C.
Số liệu hạn ngạch khách hàng trong Amazon CloudWatch
In Phần 1, chúng tôi đã giải thích rằng số liệu khách hàng là số liệu được hiển thị bởi khách hàng kết nối với cụm Kafka. Hãy kiểm tra các số liệu của khách hàng trong CloudWatch.
- Trên bảng điều khiển CloudWatch, chọn Tất cả các chỉ số.
- Theo Không gian tên tùy chỉnh, hãy chọn không gian tên bạn đã cung cấp trong khi chạy ứng dụng khách.
- Chọn tên kích thước và chọn
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
vàfetch-throttle-time-avg metrics
cho tất cả các ứng dụng.
Các số liệu này cho thấy hành vi điều tiết đối với ProducerApp-1
, ConsumerApp-1
và ConsumerApp-2
các ứng dụng đã được thử nghiệm với cấu hình hạn ngạch ở phần trước. Các ảnh chụp màn hình sau đây cho thấy việc điều chỉnh ProducerApp-1
, ConsumerApp-1
và ConsumerApp-2
dựa trên hạn ngạch băng thông mạng. ProducerApp-1
, ConsumerApp-1
và ConsumerApp-2
các ứng dụng cung cấp số liệu khách hàng tương ứng của chúng cho CloudWatch. Bạn có thể tìm thấy mã nguồn trên GitHub để bạn tham khảo.
Bảo mật ID khách hàng và tên phiên vai trò
Chúng tôi đã thảo luận cách định cấu hình hạn ngạch Kafka bằng cách sử dụng ID khách hàng và xác thực người sử dụng hiệu trưởng. Khi ứng dụng khách giả định vai trò IAM để truy cập các chủ đề Kafka trên cụm MSK đã bật xác thực IAM, thì ứng dụng đó sẽ được xác thực người sử dụng hiệu trưởng được thể hiện theo định dạng sau (để biết thêm thông tin, hãy tham khảo số nhận dạng IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Nó chứa tên phiên vai trò (trong trường hợp này, producerapp-1-role-session
) được sử dụng trong ứng dụng khách trong khi đảm nhận vai trò IAM thông qua SDK AWS STS. Ứng dụng khách mã nguồn có sẵn để bạn tham khảo. Các ID khách hàng là một chuỗi tên logic (ví dụ: producerapp-1-client-id
) được nhóm ứng dụng cấu hình trong mã ứng dụng. Do đó, một ứng dụng có thể mạo danh một ứng dụng khác nếu nó có được ID khách hàng và tên phiên vai trò của ứng dụng kia và liệu ứng dụng đó có được phép đảm nhận cùng vai trò IAM hay không.
Như được thể hiện trong sơ đồ kiến trúc, ConsumerApp-1
và ConsumerApp-2
là hai ứng dụng khách riêng biệt với sự phân bổ hạn ngạch tương ứng. Bởi vì cả hai đều có quyền đảm nhận cùng một vai trò IAM (Topic-B-Read-Role
) trong tài khoản demo, họ được phép sử dụng tin nhắn từ Topic-B
. Do đó, các nhà môi giới cụm MSK phân biệt chúng dựa trên ID khách hàng và Người sử dụng (có chứa tương ứng của họ tên phiên vai trò các giá trị). Nếu như ConsumerApp-2
bằng cách nào đó có được ConsumerApp-1
tên phiên vai trò và ID khách hàng, nó có thể mạo danh ConsumerApp-1
bằng cách chỉ định ConsumerApp-1
tên phiên vai trò và ID khách hàng trong mã ứng dụng.
Hãy giả sử ConsumerApp-1
sử dụng consumerapp-1-client-id
và consumerapp-1-role-session
như của nó ID khách hàng và tên phiên vai trò, tương ứng. Vì thế, ConsumerApp-1's
chứng thực người sử dụng tiền gốc sẽ xuất hiện như sau khi nó giả sử Topic-B-Read-Role
Vai trò IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Tương tự, ConsumerApp-2
sử dụng consumerapp-2-client-id
và consumerapp-2-role-session
như của nó ID khách hàng và tên phiên vai trò, tương ứng. Vì thế, ConsumerApp-2's
chứng thực người sử dụng tiền gốc sẽ xuất hiện như sau khi nó giả sử Topic-B-Read-Role
Vai trò IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
thu được ConsumerApp-1's
ID khách hàng và tên phiên vai trò và chỉ định chúng trong mã ứng dụng của nó, các nhà môi giới cụm MSK sẽ coi nó như ConsumerApp-1
và xem nó ID khách hàng as consumerapp-1-client-id
, và được xác thực người sử dụng chính như sau:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Điều này cho phép ConsumerApp-2
để tiêu thụ dữ liệu từ cụm MSK với tốc độ tối đa 5120 byte mỗi giây thay vì 1024 byte mỗi giây theo phân bổ hạn ngạch ban đầu. Do đó, ConsumerApp-1's
thông lượng sẽ bị ảnh hưởng tiêu cực nếu ConsumerApp-2
chạy đồng thời.
Kiến trúc nâng cao
Bạn có thể giới thiệu Quản lý bí mật AWS và Dịch vụ quản lý khóa AWS (AWS KMS) trong kiến trúc để bảo mật ứng dụng' ID khách hàng và tên phiên vai trò. Để cung cấp khả năng quản trị mạnh mẽ hơn, ID ứng dụng khách và tên phiên vai trò của ứng dụng phải được lưu trữ dưới dạng bí mật được mã hóa trong Trình quản lý bí mật. Chính sách tài nguyên IAM được liên kết với các bí mật được mã hóa và khóa do khách hàng KMS quản lý (CMK) sẽ chỉ cho phép các ứng dụng truy cập và giải mã ID khách hàng tương ứng và tên phiên vai trò của chúng. Bằng cách này, các ứng dụng sẽ không thể truy cập ID khách hàng và tên phiên vai trò của nhau và mạo danh lẫn nhau. Hình ảnh sau đây cho thấy kiến trúc nâng cao.
Luồng cập nhật có các giai đoạn sau:
- P1 –
ProducerApp-1
lấy lại nóclient-id
vàrole-session-name
bí mật từ Trình quản lý bí mật - P2 –
ProducerApp-1
cấu hình bí mậtclient-id
asCLIENT_ID_CONFIG
trong mã ứng dụng và giả sửTopic-B-Write-Role
(thông qua nóProducerApp-1-Role
vai trò IAM) bằng cách chuyển bí mậtrole-session-name
tới SDK AWS STSassumeRole
chức năng gọi - P3 - Với
Topic-B-Write-Role
Đảm nhận vai trò IAM,ProducerApp-1
bắt đầu gửi tin nhắn đếnTopic-B
- C1 –
ConsumerApp-1
vàConsumerApp-2
lấy tương ứng của họclient-id
vàrole-session-name
bí mật từ Trình quản lý bí mật - C2 –
ConsumerApp-1
vàConsumerApp-2
cấu hình bí mật tương ứng của họclient-id
asCLIENT_ID_CONFIG
trong mã ứng dụng của họ và giả sửTopic-B-Write-Role
(QuaConsumerApp-1-Role
vàConsumerApp-2-Role
vai trò IAM tương ứng) bằng cách chuyển bí mật của họrole-session-name
trong SDK AWS STSassumeRole
chức năng gọi - C3 - Với
Topic-B-Read-Role
Đảm nhận vai trò IAM,ConsumerApp-1
vàConsumerApp-2
bắt đầu tiêu thụ tin nhắn từTopic-B
Tham khảo tài liệu để Quản lý bí mật AWS và AWS KMS để hiểu rõ hơn về cách chúng phù hợp với kiến trúc.
Làm sạch tài nguyên
Điều hướng đến bảng điều khiển CloudFormation và xóa MSKStack
cây rơm. Tất cả các tài nguyên được tạo trong bài đăng này sẽ bị xóa.
Kết luận
Trong bài đăng này, chúng tôi đã đề cập đến các bước chi tiết để đặt cấu hình hạn ngạch Amazon MSK và chứng minh tác dụng của chúng thông qua các ứng dụng khách mẫu. Ngoài ra, chúng tôi đã thảo luận về cách bạn có thể sử dụng số liệu máy khách để xác định xem ứng dụng khách có bị điều chỉnh hay không. Chúng tôi cũng nhấn mạnh một vấn đề tiềm ẩn với ID khách hàng dạng văn bản gốc và tên phiên vai trò. Chúng tôi khuyên bạn nên triển khai hạn mức Kafka với Amazon MSK bằng Secrets Manager và AWS KMS theo sơ đồ kiến trúc đã sửa đổi để đảm bảo kiến trúc không tin cậy.
Nếu bạn có phản hồi hoặc câu hỏi về bài đăng này, bao gồm cả kiến trúc đã sửa đổi, chúng tôi rất vui được nghe ý kiến của bạn. Chúng tôi hy vọng bạn thích đọc bài viết này.
Lưu ý
Vikas Bajaj là Giám đốc cấp cao, Kiến trúc sư giải pháp, Dịch vụ tài chính tại Amazon Web Services. Với hơn hai thập kỷ kinh nghiệm trong lĩnh vực dịch vụ tài chính và làm việc với các doanh nghiệp thiên về kỹ thuật số, ông tư vấn cho khách hàng về thiết kế sản phẩm, lộ trình công nghệ và kiến trúc ứng dụng.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- EVM tài chính. Giao diện hợp nhất cho tài chính phi tập trung. Truy cập Tại đây.
- Tập đoàn truyền thông lượng tử. Khuếch đại IR/PR. Truy cập Tại đây.
- PlatoAiStream. Thông minh dữ liệu Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- nguồn: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- : có
- :là
- :không phải
- :Ở đâu
- $ LÊN
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Có khả năng
- Giới thiệu
- ở trên
- Chấp nhận
- chấp nhận
- truy cập
- Tài khoản
- công nhận
- ngang qua
- thêm vào
- Ngoài ra
- thêm vào
- Ngoài ra
- Sau
- một lần nữa
- Tất cả
- phân bổ
- sự phân bổ
- cho phép
- cho phép
- Ngoài ra
- đàn bà gan dạ
- Amazon EC2
- Amazon Web Services
- an
- và
- Một
- bất kì
- Apache
- Kafka Apache
- xuất hiện
- Các Ứng Dụng
- các ứng dụng
- khoảng
- kiến trúc
- LÀ
- AS
- liên kết
- giả sử
- At
- chứng thực
- Xác thực
- có sẵn
- AWS
- Hình thành đám mây AWS
- Băng thông
- dựa
- BE
- bởi vì
- được
- trước
- được
- Hơn
- bị chặn
- bootstrap
- cả hai
- đáy
- Hộp
- người môi giới
- môi giới
- trình duyệt
- đệm
- kinh doanh
- các doanh nghiệp
- nhưng
- by
- cuộc gọi
- gọi là
- gọi
- CAN
- trường hợp
- CON MÈO
- Catch
- gây ra
- CD
- trung tâm
- thay đổi
- Những thay đổi
- kiểm tra
- Chọn
- tốt nghiệp lớp XNUMX
- khách hàng
- khách hàng
- cụm
- mã
- Chung
- hoàn thành
- Tính
- khái niệm
- Cấu hình
- cấu hình
- Kết nối
- hậu quả là
- An ủi
- ăn
- người tiêu dùng
- chứa
- tiếp tục
- liên tiếp
- tiếp tục
- điều khiển
- phủ
- tạo
- tạo ra
- Tạo
- Current
- khách hàng
- khách hàng
- dữ liệu
- Nền tảng dữ liệu
- thập kỷ
- Giải mã
- Mặc định
- chậm trễ
- Demo
- chứng minh
- Tùy
- mô tả
- mô tả
- Thiết kế
- chi tiết
- chi tiết
- Xác định
- xác định
- kích thước
- thảo luận
- Giao diện
- phân biệt
- tài liệu hướng dẫn
- tải về
- hai
- suốt trong
- mỗi
- Sớm hơn
- bỏ lỡ
- hiệu lực
- hay
- cho phép
- kích hoạt
- cho phép
- mã hóa
- Điểm cuối
- thi hành
- nâng cao
- đảm bảo
- đăng ký hạng mục thi
- Môi trường
- lỗi
- Ether (ETH)
- cuối cùng
- kiểm tra
- ví dụ
- quá
- Trừ
- kinh nghiệm
- Giải thích
- giải thích
- xuất khẩu
- tiếp xúc
- thông tin phản hồi
- vài
- Hình
- Tập tin
- Các tập tin
- tài chính
- dịch vụ tài chính
- Tìm kiếm
- Tên
- phù hợp với
- dòng chảy
- tiếp theo
- sau
- Trong
- định dạng
- 4
- từ
- chức năng
- Hơn nữa
- được
- đi
- GitHub
- quản trị
- lớn hơn
- Nhóm
- Các nhóm
- vui mừng
- Có
- he
- Nghe
- cấp độ cao
- Nhấn mạnh
- mong
- chủ nhà
- host
- Độ đáng tin của
- Hướng dẫn
- HTML
- http
- HTTPS
- IAM
- ID
- Bản sắc
- id
- if
- minh họa
- hình ảnh
- tác động
- thực hiện
- thực hiện
- in
- Bao gồm
- chỉ
- chỉ
- chỉ ra
- hệ thống riêng biệt,
- thông tin
- ví dụ
- thiếu
- trong
- giới thiệu
- giới thiệu
- isn
- vấn đề
- IT
- ITS
- Java
- jpg
- Kafka
- Key
- nổi tiếng
- LIMIT
- Dòng
- dòng
- Danh sách
- hợp lý
- làm cho
- quản lý
- quản lý
- giám đốc
- tối đa
- Có thể..
- đo
- Bộ nhớ
- tin nhắn
- Metrics
- phút
- Chế độ
- sửa đổi
- Màn Hình
- chi tiết
- MS
- nhiều
- nhiều
- phải
- tên
- tên
- Điều hướng
- THÔNG TIN
- Cần
- tiêu cực
- mạng
- Mới
- tiếp theo
- Không
- lưu ý
- Để ý..
- con số
- thu được
- xảy ra
- of
- on
- ONE
- có thể
- mở ra
- vận hành
- Hoạt động
- Tùy chọn
- Các lựa chọn
- or
- gọi món
- nguyên
- Nền tảng khác
- ra
- kết thúc
- đóng gói
- trang
- cửa sổ
- tham số
- thông số
- một phần
- thông qua
- Đi qua
- con đường
- tỷ lệ phần trăm
- thực hiện
- hiệu suất
- cho phép
- Văn bản thô
- nền tảng
- plato
- Thông tin dữ liệu Plato
- PlatoDữ liệu
- Điểm
- điểm
- Chính sách
- điều luật
- Bài đăng
- tiềm năng
- nhấn
- ngăn chặn
- trước
- trước đây
- Hiệu trưởng
- riêng
- xử lý
- sản xuất
- sản xuất
- Sản phẩm
- Thiết kế sản phẩm
- tài sản
- cho
- cung cấp
- công khai
- xuất bản
- Câu hỏi
- Tỷ lệ
- hơn
- Đạt
- Đọc
- Reading
- giới thiệu
- đề nghị
- gọi
- khu
- nhớ
- tẩy
- thay thế
- kho
- đại diện
- yêu cầu
- yêu cầu
- cần phải
- tài nguyên
- Thông tin
- mà
- tương ứng
- REST của
- lộ trình
- Vai trò
- vai trò
- chạy
- chạy
- s
- tương tự
- hài lòng
- hài lòng với
- ảnh chụp màn hình
- sdk
- Thứ hai
- giây
- Bí mật
- Phần
- an toàn
- an ninh
- thẻ bảo mật
- xem
- gửi
- gửi
- cao cấp
- riêng biệt
- Loạt Sách
- DỊCH VỤ
- Phiên
- định
- thiết lập
- thiết lập
- nên
- thể hiện
- Chương trình
- tương tự
- Tương tự
- kể từ khi
- Giải pháp
- nguồn
- mã nguồn
- Không gian
- riêng
- quy định
- ngăn xếp
- giai đoạn
- Bắt đầu
- bắt đầu
- Bước
- Các bước
- Dừng
- lưu trữ
- trực tuyến
- Chuỗi
- mạnh mẽ hơn
- mạng con
- tiếp theo
- Thành công
- như vậy
- đủ
- cung cấp
- Hỗ trợ
- Hãy
- nhóm
- Công nghệ
- mẫu
- mẫu
- Thiết bị đầu cuối
- thử nghiệm
- thử nghiệm
- Kiểm tra
- hơn
- việc này
- Sản phẩm
- Nguồn
- cung cấp their dịch
- Them
- sau đó
- vì thế
- họ
- điều này
- số ba
- Thông qua
- thông lượng
- thời gian
- đến
- mã thông báo
- chủ đề
- Chủ đề
- điều trị
- NIỀM TIN
- hai
- kiểu
- loại
- sự hiểu biết
- Cập nhật
- cập nhật
- cập nhật
- sử dụng
- đã sử dụng
- người sử dang
- Người sử dụng
- sử dụng
- sử dụng
- giá trị
- Các giá trị
- xác minh
- thông qua
- Xem
- là
- Đường..
- we
- web
- các dịch vụ web
- TỐT
- khi nào
- liệu
- cái nào
- trong khi
- sẽ
- với
- không có
- đang làm việc
- viết
- nhưng
- bạn
- trên màn hình
- zephyrnet