Квоти Kafka є невід’ємною частиною кластерів Kafka з кількома клієнтами. Вони запобігають негативному впливу на продуктивність кластера Kafka через погано функціонуючі програми, які надмірно споживають ресурси кластера. Крім того, вони дозволяють керувати центральною платформою потокових даних як платформою з кількома клієнтами та використовуватися програмами нижнього та верхнього напрямків у кількох бізнес-напрямках. Kafka підтримує два типи квот: квоти пропускної здатності мережі та запит квот ставок. Квоти пропускної здатності мережі визначають порогові значення швидкості передачі даних, наприклад, скільки даних клієнтські програми можуть виробляти та споживати від кожного окремого брокера в кластері Kafka, виміряні в байтах на секунду. Квоти на частоту запитів обмежують відсоток часу, який кожен окремий брокер витрачає на обробку запитів клієнтських програм. Залежно від вашої конфігурації, квоти Kafka можна встановити для конкретних користувачів, конкретних ідентифікаторів клієнтів або для обох.
In Частина 1 цієї серії з двох частин ми обговорювали концепції того, як забезпечити дотримання квот Кафки Amazon керував потоковим передаванням для Apache Kafka (Amazon MSK) кластери під час використання Управління ідентифікацією та доступом AWS (IAM) контроль доступу.
У цій публікації ми крок за кроком проведемо вас через встановлення квот Kafka у кластері MSK під час використання керування доступом IAM і тестування їх за допомогою прикладів клієнтських програм.
Огляд рішення
Наступний малюнок, який ми вперше представили в Частина 1, ілюструє, як клієнтські програми Kafka (ProducerApp-1
, ConsumerApp-1
та ConsumerApp-2
) доступ Topic-B
у кластері MSK, припускаючи ролі запису та читання IAM. Кожна клієнтська програма-виробник і споживач має квоту, яка визначає, скільки даних вони можуть виробляти або споживати в байтах на секунду. The ProducerApp-1
квота дозволяє виробляти до 1024 байт/с на брокера. Аналогічно, ConsumerApp-1
та ConsumerApp-2
квоти дозволяють їм споживати 5120 і 1024 байт/с на брокера відповідно. Нижче наведено коротке пояснення потоку, показаного на діаграмі архітектури:
- P1 -
ProducerApp-1
(через йогоProducerApp-1-Role
роль IAM) бере на себеTopic-B-Write-Role
Роль IAM для надсилання повідомленьTopic-B
- P2 - З
Topic-B-Write-Role
Взято на себе роль IAM,ProducerApp-1
починає надсилати повідомлення доTopic-B
- C1 -
ConsumerApp-1
(через йогоConsumerApp-1-Role
роль IAM) іConsumerApp-2
(через йогоConsumerApp-2-Role
роль IAM) взяти на себеTopic-B-Read-Role
Роль IAM для читання повідомленьTopic-B
- C2 - З
Topic-B-Read-Role
Взято на себе роль IAM,ConsumerApp-1
таConsumerApp-2
почати споживати повідомлення відTopic-B
Зверніть увагу, що в цій публікації використовується Інтерфейс командного рядка AWS (AWS CLI), AWS CloudFormation шаблони та Консоль управління AWS для надання та модифікації ресурсів AWS, а надані ресурси виставлятимуться на ваш обліковий запис AWS.
Кроки високого рівня такі:
- Надання кластеру MSK з контролем доступу IAM і Обчислювальна хмара Amazon Elastic (Amazon EC2) екземпляри для клієнтських програм.
- Створювати
Topic-B
на кластері MSK. - Створіть ролі IAM для доступу клієнтських програм
Topic-B
. - Запускайте програми виробника та споживача без встановлення квот.
- Налаштуйте квоти виробництва та споживання для клієнтських програм.
- Повторно запустіть програми після встановлення квот.
Передумови
Рекомендується прочитати Частина 1 цієї серії, перш ніж продовжити. Щоб розпочати роботу, вам потрібно:
- Обліковий запис AWS, який у цій публікації буде називатися демонстраційним обліковим записом, припускаючи, що його ідентифікатор облікового запису є
1111 1111 1111
- Дозволи на створення, видалення та зміну ресурсів AWS у демонстраційному обліковому записі
Надання кластеру MSK з контролем доступу IAM та примірниками EC2
Цей крок передбачає надання кластеру MSK із керуванням доступом IAM у VPC у демонстраційному обліковому записі. Крім того, ми створюємо чотири екземпляри EC2, щоб вносити зміни в конфігурацію кластера MSK і клієнтських додатків хост-виробника та споживача.
Розгорніть стек CloudFormation
- Клонуйте GitHub сховище щоб завантажити файли шаблонів CloudFormation і зразки клієнтських програм:
- На консолі AWS CloudFormation виберіть Стеки у навігаційній панелі.
- Вибирати Створити стек.
- для Підготувати шаблонвиберіть Шаблон готовий.
- для Джерело шаблонувиберіть Завантажте файл шаблону.
- Завантажте
cfn-msk-stack-1.yaml
файл відamazon-msk-kafka-quotas/cfn-templates
каталог, а потім виберіть МАЙБУТНІ. - для Назва стека, введіть
MSKStack
. - Залиште параметри за замовчуванням і виберіть МАЙБУТНІ.
- Прокрутіть донизу Налаштувати параметри стека сторінку і виберіть МАЙБУТНІ продовжувати.
- Прокрутіть донизу Розгляд сторінки, установіть прапорець Я визнаю, що CloudFormation може створювати ресурси IAM, і вибрати Надіслати.
Для завершення стека знадобиться приблизно 30 хвилин. Після успішного створення стека будуть створені такі ресурси:
- VPC із трьома приватними підмережами та однією публічною підмережею
- Кластер MSK із трьома посередниками з увімкненим контролем доступу IAM
- Викликається екземпляр EC2
MSKAdminInstance
для зміни налаштувань кластера MSK, а також для створення та зміни ресурсів AWS - Примірники EC2 для
ProducerApp-1
,ConsumerApp-1
таConsumerApp-2
, по одному для кожної клієнтської програми - Окрема роль IAM для кожного екземпляра EC2, який розміщує клієнтську програму, як показано на схемі архітектури
- Зі стека Виходи вкладка, зверніть увагу на
MSKClusterArn
value.
Створіть тему на кластері MSK
Створити Topic-B
у кластері MSK виконайте такі дії:
- На консолі Amazon EC2 перейдіть до списку запущених екземплярів EC2.
- Виберіть
MSKAdminInstance
екземпляр EC2 і виберіть З'єднуватися. - на Менеджер сеансів вкладку, виберіть З'єднуватися.
- Виконайте такі команди на новій вкладці, яка відкриється у вашому браузері:
- Встановіть змінну середовища так, щоб вона вказувала на кінцеву точку IAM посередників MSK Cluster:
- Зверніть увагу на значення
BOOTSTRAP_BROKERS_IAM
. - Виконайте таку команду Kafka CLI, щоб створити
Topic-B
на кластері MSK:
Оскільки кластер MSK забезпечено керуванням доступом IAM, опція --command-config
вказує на config_iam.properties
, який містить властивості, необхідні для керування доступом IAM, створеного MSKStack
Стек CloudFormation.
Наступні попередження можуть з’являтися під час виконання команд Kafka CLI, але їх можна ігнорувати:
- Щоб переконатися в цьому
Topic-B
створено, перелічіть усі теми:
Створіть ролі IAM для клієнтських програм для доступу до теми B
Цей крок передбачає створення Topic-B-Write-Role
та Topic-B-Read-Role
як показано на схемі архітектури. Topic-B-Write-Role
дозволяє виконувати операції запису Topic-B
, і може бути припущено ProducerApp-1
. Подібним чином, ConsumerApp-1
та ConsumerApp-2
Можна припустити Topic-B-Read-Role
для виконання операцій читання Topic-B
. Для виконання операцій читання Topic-B
, ConsumerApp-1
та ConsumerApp-2
також повинні належати до груп споживачів, зазначених під час MSKStack
оновлення стека на наступному кроці.
Створіть ролі, виконавши такі кроки:
- На консолі AWS CloudFormation виберіть Стеки у навігаційній панелі.
- Select
MSKStack
І вибирай Оновити. - для Підготувати шаблонвиберіть Замінити поточний шаблон.
- для Джерело шаблонувиберіть Завантажте файл шаблону.
- Завантажте
cfn-msk-stack-2.yaml
файл відamazon-msk-kafka-quotas/cfn-templates
каталог, а потім виберіть МАЙБУТНІ. - Надайте наступні додаткові параметри стека:
-
- для Тема Б АРН, введіть
Topic-B
РНК.
- для Тема Б АРН, введіть
ARN має бути відформатований як arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Використовуйте назву кластера та UUID кластера з ARN кластера MSK, який ви зазначили раніше, і вкажіть свій регіон AWS. Для отримання додаткової інформації зверніться до Контроль доступу IAM для Amazon MSK.
-
- для Назва групи споживачів ConsumerApp-1, введіть
ConsumerApp-1
група споживачів АРН.
- для Назва групи споживачів ConsumerApp-1, введіть
Його потрібно відформатувати як arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- для Назва групи споживачів ConsumerApp-2, введіть
ConsumerApp-2
група споживачів АРН.
- для Назва групи споживачів ConsumerApp-2, введіть
Використовуйте формат, подібний до попереднього ARN.
- Вибирати МАЙБУТНІ продовжувати.
- Прокрутіть донизу Налаштувати стек сторінку параметрів і виберіть МАЙБУТНІ продовжувати.
- Прокрутіть донизу Розгляд сторінки, установіть прапорець Я визнаю, що CloudFormation може створювати ресурси IAM, і вибрати Стек оновлення.
Оновлення стека займе приблизно 3 хвилини. Після успішного оновлення стека будуть створені такі ресурси:
- Тема-В-Написати-Роль – Роль IAM із дозволом на виконання операцій запису
Topic-B
. Його політика довіри дозволяєProducerApp-1-Role
роль IAM. - Тема-Б-Читання-Роль – Роль IAM із дозволом на виконання операцій читання
Topic-B
. Його політика довіри дозволяєConsumerApp-1-Role
таConsumerApp-2-Role
Ролі IAM прийняти це. Крім того,ConsumerApp-1
таConsumerApp-2
має також належати до груп споживачів, які ви вказали під час оновлення стека для виконання операцій читанняTopic-B
.
- Зі стека Виходи вкладка, зверніть увагу на
TopicBReadRoleARN
таTopicBWriteRoleARN
значень.
Запускайте програми виробника та споживача без встановлення квот
Ось біжимо ProducerApp-1
, ConsumerApp-1
та ConsumerApp-2
без встановлення своїх квот. З попередніх кроків вам знадобиться BOOTSTRAP_BROKERS_IAM
значення, Topic-B-Write-Role
ARN, і Topic-B-Read-Role
ARN. Вихідний код клієнтських програм та їх упаковані версії доступні в GitHub сховище.
Запустіть програму ConsumerApp-1
Щоб запустити ConsumerApp-1
заявки, виконайте наступні кроки:
- На консолі Amazon EC2 виберіть
ConsumerApp-1
екземпляр EC2 і виберіть З'єднуватися. - на Менеджер сеансів вкладку, виберіть З'єднуватися.
- Виконайте такі команди на новій вкладці, яка відкриється у вашому браузері:
- Запустіть
ConsumerApp-1
програма, з якої потрібно почати отримувати повідомленняTopic-B
:
Ви можете знайти вихідні на GitHub для довідки. Деталі параметрів командного рядка такі:
- – завантажувальні сервери – Кінцева точка IAM завантажувача кластера MSK.
- –прийняти-роль-arn -
Topic-B-Read-Role
IAM роль ARN. Беручи на себе цю роль,ConsumerApp-1
буде читати повідомлення з теми. - – регіон – Регіон, який ви використовуєте.
- – назва теми – Назва теми, з якої
ConsumerApp-1
буде читати повідомлення. За замовчуваннямTopic-B
. - – група споживачів – Назва групи споживачів для
ConsumerApp-1
, як зазначено під час оновлення стеку. - –назва-рольового-сеансу -
ConsumerApp-1
припускаєTopic-B-Read-Role
використання Служба маркерів безпеки AWS (AWS STS) SDK.ConsumerApp-1
використовуватиме цю назву сеансу ролі під час викликуassumeRole
функції. - – ідентифікатор клієнта – ID клієнта для
ConsumerApp-1
. - –print-consumer-quota-metrics – Прапорець, що вказує, чи слід друкувати клієнтські метрики на терміналі
ConsumerApp-1
. - –cw-назва-виміру - Amazon CloudWatch ім’я розміру, яке використовуватиметься для публікації метрик обмеження клієнта
ConsumerApp-1
. - –cw-вимір-значення – Значення параметра CloudWatch, яке використовуватиметься для публікації метрик обмеження клієнта
ConsumerApp-1
. - –cw-простір імен – Простір імен де
ConsumerApp-1
публікуватиме показники CloudWatch, щоб відстежувати троттлінг.
- Якщо ви задоволені рештою параметрів, скористайтеся наступною командою та змініть
--assume-role-arn
та--region
відповідно до вашого середовища:
Команда fetch-throttle-time-avg
та fetch-throttle-time-max
метрики клієнта мають відображати 0.0, що вказує на те, що регулювання не відбувається для ConsumerApp-1
. Пам’ятайте, що ми не встановили квоту споживання для ConsumerApp-1
ще. Дайте попрацювати деякий час.
Запустіть програму ConsumerApp-2
Щоб запустити ConsumerApp-2
заявки, виконайте наступні кроки:
- На консолі Amazon EC2 виберіть
ConsumerApp-2
екземпляр EC2 і виберіть З'єднуватися. - на Менеджер сеансів вкладку, виберіть З'єднуватися.
- Виконайте такі команди на новій вкладці, яка відкриється у вашому браузері:
- Запустіть
ConsumerApp-2
програма, з якої потрібно почати отримувати повідомленняTopic-B
:
Код містить подібні параметри командного рядка ConsumerApp-1
обговорювалося раніше, за винятком наступного:
- – група споживачів – Назва групи споживачів для
ConsumerApp-2
, як зазначено під час оновлення стеку. - –назва-рольового-сеансу -
ConsumerApp-2
припускаєTopic-B-Read-Role
за допомогою AWS STS SDK.ConsumerApp-2
використовуватиме цю назву сеансу ролі під час викликуassumeRole
функції. - – ідентифікатор клієнта – ID клієнта для
ConsumerApp-2
.
- Якщо ви задоволені рештою параметрів, скористайтеся наступною командою та змініть
--assume-role-arn
та--region
відповідно до вашого середовища:
Команда fetch-throttle-time-avg
та fetch-throttle-time-max
метрики клієнта мають відображати 0.0, що вказує на те, що регулювання не відбувається для ConsumerApp-2
. Пам’ятайте, що ми не встановили квоту споживання для ConsumerApp-2
ще. Дайте попрацювати деякий час.
Запустіть програму ProducerApp-1
Щоб запустити ProducerApp-1
заявки, виконайте наступні кроки:
- На консолі Amazon EC2 виберіть
ProducerApp-1
екземпляр EC2 і виберіть З'єднуватися. - на Менеджер сеансів вкладку, виберіть З'єднуватися.
- Виконайте такі команди на новій вкладці, яка відкриється у вашому браузері:
- Запустіть
ProducerApp-1
програму, щоб розпочати надсилання повідомленьTopic-B
:
Ви можете знайти вихідні на GitHub для довідки. Деталі параметрів командного рядка такі:
- – завантажувальні сервери – Кінцева точка IAM завантажувача кластера MSK.
- –прийняти-роль-arn -
Topic-B-Write-Role
IAM роль ARN. Беручи на себе цю роль,ProducerApp-1
буду писати повідомлення в тему. - – назва теми -
ProducerApp-1
буде надсилати повідомлення в цю тему. За замовчуваннямTopic-B
. - – регіон – Регіон AWS, який ви використовуєте.
- – кількість повідомлень – Кількість повідомлень
ProducerApp-1
додаток надішле в тему. - –назва-рольового-сеансу -
ProducerApp-1
припускаєTopic-B-Write-Role
за допомогою AWS STS SDK.ProducerApp-1
використовуватиме цю назву сеансу ролі під час викликуassumeRole
функції. - – ідентифікатор клієнта – ID клієнта
ProducerApp-1
. - – продюсерського типу -
ProducerApp-1
можна запустити або синхронно or асинхронно. Варіанти є синхронізувати or асинхронний. - –print-producer-quota-metrics – Прапорець, що вказує, чи слід друкувати метрики клієнта на терміналі ProducerApp-1.
- –cw-назва-виміру – Ім’я параметра CloudWatch, яке використовуватиметься для публікації метрик обмеження клієнта ProducerApp-1.
- –cw-вимір-значення – Значення параметра CloudWatch, яке використовуватиметься для публікації метрик обмеження клієнта ProducerApp-1.
- –cw-простір імен – Простір імен де ProducerApp-1 публікуватиме показники CloudWatch, щоб відстежувати троттлінг.
- Якщо ви задоволені рештою параметрів, скористайтеся наступною командою та змініть
--assume-role-arn
та--region
відповідно до вашого середовища. Щоб запустити синхронний продюсер Kafka, він використовує параметр--producer-type sync
:
Як варіант, використовуйте --producer-type async
для запуску асинхронного виробника. Для отримання додаткової інформації див Асинхронне надсилання.
Команда produce-throttle-time-avg
та produce-throttle-time-max
метрики клієнта мають відображати 0.0, що вказує на те, що регулювання не відбувається для ProducerApp-1
. Пам’ятайте, що ми не встановили квоту на продукцію ProducerApp-1
ще. Перевір це ConsumerApp-1
та ConsumerApp-2
може споживати повідомлення та помічати, що вони не гальмуються. Зупиніть клієнтські програми споживача та виробника, натиснувши Ctrl + C у відповідних вкладках браузера.
Встановіть квоти виробництва та споживання для клієнтських програм
Тепер, коли ми запустили програми виробника та споживача без квот, ми встановлюємо їхні квоти та запускаємо їх повторно.
Відкрийте Менеджер сеансів термінал для MSKAdminInstance
Примірник EC2, як описано раніше, і запустіть наступні команди, щоб знайти конфігурацію за замовчуванням одного з посередників у кластері MSK. Кластери MSK оснащені конфігурацією квот Kafka за замовчуванням.
На наступному знімку екрана показано Broker-1
значення за замовчуванням для quota.consumer.default
та quota.producer.default
.
Конфігурація квоти ProducerApp-1
Замініть заповнювачі в усіх командах цього розділу на значення, які відповідають вашому обліковому запису.
Відповідно до розглянутої раніше схеми архітектури встановіть ProducerApp-1
створити квоту до 1024 байтів/секунду. для <ProducerApp-1 Client Id>
та <ProducerApp-1 Role Session>
, переконайтеся, що ви використовуєте ті самі значення, які використовували під час роботи ProducerApp-1
раніше (producerapp-1-client-id
та producerapp-1-role-session
, відповідно):
Перевірте ProducerApp-1
створити квоту за допомогою такої команди:
Ви можете видалити ProducerApp-1
створити квоту за допомогою такої команди, але не запускайте команду оскільки ми перевіримо квоти далі.
Конфігурація квоти ConsumerApp-1
Замініть заповнювачі в усіх командах цього розділу на значення, які відповідають вашому обліковому запису.
Давайте встановимо квоту споживання 5120 байт/с для ConsumerApp-1
. Форум <ConsumerApp-1 Client Id>
та <ConsumerApp-1 Role Session>
, переконайтеся, що ви використовуєте ті самі значення, які використовували під час роботи ConsumerApp-1
раніше (consumerapp-1-client-id
та consumerapp-1-role-session
, відповідно):
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>
Перевірте ConsumerApp-1
споживайте квоту за допомогою такої команди:
Ви можете видалити ConsumerApp-1
споживати квоту, використовуючи таку команду, але не запускайте команду оскільки ми перевіримо квоти далі.
Конфігурація квоти ConsumerApp-2
Замініть заповнювачі в усіх командах цього розділу на значення, які відповідають вашому обліковому запису.
Давайте встановимо квоту споживання 1024 байт/с для ConsumerApp-2
. Форум <ConsumerApp-2 Client Id>
та <ConsumerApp-2 Role Session>
, переконайтеся, що ви використовуєте ті самі значення, які використовували під час роботи ConsumerApp-2
раніше (consumerapp-2-client-id
та consumerapp-2-role-session
, відповідно):
Перевірте ConsumerApp-2
споживайте квоту за допомогою такої команди:
Як і в випадку ConsumerApp-1
, ви можете видалити ConsumerApp-2
споживати квоту за допомогою тієї ж команди ConsumerApp-2
дані клієнта та користувача.
Повторно запустіть програми виробника та споживача після встановлення квот
Давайте повторно запустимо програми, щоб перевірити дію квот.
Повторно запустіть ProducerApp-1
Рерун ProducerApp-1
in синхронний за допомогою тієї ж команди, яку ви використовували раніше. Наступний знімок екрана ілюструє, що коли ProducerApp-1
досягає своєї квоти на будь-якому з брокерів produce-throttle-time-avg
та produce-throttle-time-max client
значення метрики буде вище 0.0. Значення вище 0.0 вказує на це ProducerApp-1
дроселюється. Дозволити ProducerApp-1
щоб запустити кілька секунд, а потім зупинити його за допомогою Ctrl + C.
Ви також можете перевірити вплив квоти виробництва, запустивши повторно ProducerApp-1
знову в асинхронний режим (--producer-type async
). Подібно до синхронного запуску, наступний знімок екрана ілюструє, що коли ProducerApp-1
досягає своєї квоти на будь-якому з брокерів produce-throttle-time-avg
та produce-throttle-time-max
значення метрики клієнта буде вище 0.0. Значення вище 0.0 вказує на це ProducerApp-1
дроселюється. Дозволити асинхронний ProducerApp-1
бігти деякий час.
Зрештою ви побачите a TimeoutException
про те, org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Під час використання асинхронний виробника та надсилання повідомлень зі швидкістю, вищою, ніж брокер може прийняти через квоту, повідомлення спочатку ставитимуться в чергу в пам’ять клієнтської програми. У клієнта зрештою закінчиться буферний простір, якщо швидкість надсилання повідомлень продовжує перевищувати швидкість прийняття повідомлень, викликаючи наступне Producer.send()
виклик, який потрібно заблокувати. Producer.send()
зрештою кине a TimeoutException
якщо затримка тайм-ауту недостатня, щоб дозволити брокеру наздогнати програму виробника. СТІЙ ProducerApp-1
за допомогою Ctrl + C.
Повторно запустіть ConsumerApp-1
Рерун ConsumerApp-1
за допомогою тієї ж команди, яку ви використовували раніше. Наступний знімок екрана ілюструє, що коли ConsumerApp-1
досягає своєї квоти, fetch-throttle-time-avg
та fetch-throttle-time-max client
значення метрики буде вище 0.0. Значення вище 0.0 вказує на це ConsumerApp-1
дроселюється.
дозволяти ConsumerApp-1
щоб запустити кілька секунд, а потім зупинити його за допомогою Ctrl + C.
Повторно запустіть ConsumerApp-2
Рерун ConsumerApp-2
за допомогою тієї ж команди, яку ви використовували раніше. Так само, коли ConsumerApp-2
досягає своєї квоти, fetch-throttle-time-avg
та fetch-throttle-time-max client
значення метрики буде вище 0.0. Значення вище 0.0 вказує на це ConsumerApp-2
дроселюється. Дозволити ConsumerApp-2
щоб попрацювати протягом кількох секунд, а потім зупинити, натиснувши Ctrl + C.
Показники клієнтської квоти в Amazon CloudWatch
In Частина 1, ми пояснили, що метрики клієнта – це метрики, надані клієнтами, які підключаються до кластерів Kafka. Давайте розглянемо показники клієнта в CloudWatch.
- На консолі CloudWatch виберіть Всі показники.
- під Спеціальні простори імен, виберіть простір імен, який ви надали під час запуску клієнтських програм.
- Виберіть назву розміру та виберіть
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
таfetch-throttle-time-avg metrics
для всіх програм.
Ці показники вказують на поведінку придушення для ProducerApp-1
, ConsumerApp-1
та ConsumerApp-2
програми, перевірені з конфігураціями квот у попередньому розділі. Наступні знімки екрана вказують на регулювання ProducerApp-1
, ConsumerApp-1
та ConsumerApp-2
на основі квот пропускної здатності мережі. ProducerApp-1
, ConsumerApp-1
та ConsumerApp-2
додатки передають свої відповідні клієнтські показники в CloudWatch. Ви можете знайти вихідні на GitHub для довідки.
Захищений ідентифікатор клієнта та ім’я сеансу ролі
Ми обговорили, як налаштувати квоти Kafka за допомогою програми ідентифікатор клієнта і автентифікований користувач головний. Коли клієнтська програма приймає роль IAM для доступу до тем Kafka у кластері MSK з увімкненою автентифікацією IAM, її автентифікація користувач принципал представлений у такому форматі (додаткову інформацію див Ідентифікатори IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Він містить назва рольового сеансу (в цьому випадку, producerapp-1-role-session
), що використовується в клієнтській програмі під час виконання ролі IAM через AWS STS SDK. Клієнтський додаток вихідні доступний для довідки. The ідентифікатор клієнта це рядок логічної назви (наприклад, producerapp-1-client-id
), який налаштовано в коді програми командою програми. Таким чином, програма може імітувати іншу програму, якщо вона отримує ідентифікатор клієнта та назва рольового сеансу іншої програми та якщо вона має дозвіл прийняти ту саму роль IAM.
Як показано на діаграмі архітектури, ConsumerApp-1
та ConsumerApp-2
це дві окремі клієнтські програми з відповідним розподілом квот. Оскільки обидва мають дозвіл приймати однакову роль IAM (Topic-B-Read-Role
) у демонстраційному обліковому записі їм дозволено отримувати повідомлення від Topic-B
. Таким чином, кластерні брокери MSK розрізняють їх на основі їх ідентифікатори клієнтів та користувачі (які містять відповідні назва рольового сеансу значення). Якщо ConsumerApp-2
якимось чином отримує ConsumerApp-1
назва рольового сеансу та ідентифікатор клієнта, він може видати себе за іншу особу ConsumerApp-1
шляхом вказівки ConsumerApp-1
назва рольового сеансу та ідентифікатор клієнта у коді програми.
Припустимо ConsumerApp-1
використовує consumerapp-1-client-id
та consumerapp-1-role-session
як її ідентифікатор клієнта та назва рольового сеансу, відповідно. тому ConsumerApp-1's
автентифіковано користувач принципал буде виглядати наступним чином, коли він припускає Topic-B-Read-Role
Роль IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Крім того, ConsumerApp-2
використовує consumerapp-2-client-id
та consumerapp-2-role-session
як її ідентифікатор клієнта та назва рольового сеансу, відповідно. тому ConsumerApp-2's
автентифіковано користувач принципал буде виглядати наступним чином, коли він припускає Topic-B-Read-Role
Роль IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
отримує ConsumerApp-1's
ідентифікатор клієнта та назва рольового сеансу і вказує їх у своєму програмному коді, кластерні брокери MSK розглядатимуть це як ConsumerApp-1
і переглянути його ідентифікатор клієнта as consumerapp-1-client-id
, і автентифікований користувач принципала наступним чином:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Це дозволяє ConsumerApp-2
споживати дані з кластера MSK з максимальною швидкістю 5120 байтів на секунду, а не 1024 байтів на секунду згідно з вихідною квотою. Отже, ConsumerApp-1's
пропускна здатність негативно вплине, якщо ConsumerApp-2
працює одночасно.
Покращена архітектура
Ви можете представити Менеджер секретів AWS та Служба управління ключами AWS (AWS KMS) в архітектурі для захисту програм" ідентифікатори клієнтів та імена рольових сеансів. Щоб забезпечити ефективніше керування, ідентифікатор клієнта програми та ім’я сеансу ролі мають зберігатися як зашифровані секрети в диспетчері секретів. Політики ресурсів IAM, пов’язані із зашифрованими секретами та керованим ключем клієнта KMS (CMK), дозволять програмам отримувати доступ і розшифровувати лише відповідний ідентифікатор клієнта та ім’я сеансу ролі. Таким чином програми не зможуть отримувати доступ до ідентифікатора клієнта та назви сеансу ролі та видавати себе за іншу. На наступному зображенні показано розширену архітектуру.
Оновлений потік має такі етапи:
- P1 -
ProducerApp-1
відновлює йогоclient-id
таrole-session-name
секрети від менеджера секретів - P2 -
ProducerApp-1
налаштовує секретclient-id
asCLIENT_ID_CONFIG
у коді програми та передбачаєTopic-B-Write-Role
(через йогоProducerApp-1-Role
роль IAM), передаючи секретrole-session-name
до AWS STS SDKassumeRole
виклик функції - P3 - З
Topic-B-Write-Role
Взято на себе роль IAM,ProducerApp-1
починає надсилати повідомлення доTopic-B
- C1 -
ConsumerApp-1
таConsumerApp-2
отримати відповідніclient-id
таrole-session-name
секрети від менеджера секретів - C2 -
ConsumerApp-1
таConsumerApp-2
налаштувати відповідний секретclient-id
asCLIENT_ID_CONFIG
у коді програми та припустимоTopic-B-Write-Role
(черезConsumerApp-1-Role
таConsumerApp-2-Role
ролі IAM, відповідно), передаючи їхній секретrole-session-name
в AWS STS SDKassumeRole
виклик функції - C3 - З
Topic-B-Read-Role
Взято на себе роль IAM,ConsumerApp-1
таConsumerApp-2
почати споживати повідомлення відTopic-B
Зверніться до документації для Менеджер секретів AWS та AWS KMS щоб краще зрозуміти, як вони вписуються в архітектуру.
Очистити ресурси
Перейдіть до консолі CloudFormation і видаліть MSKStack
стек. Усі ресурси, створені під час цієї публікації, будуть видалені.
Висновок
У цій публікації ми детально описали кроки з налаштування квот Amazon MSK і продемонстрували їхній ефект за допомогою прикладів клієнтських програм. Крім того, ми обговорили, як можна використовувати показники клієнта, щоб визначити, чи придушується клієнтська програма. Ми також висвітлили потенційну проблему з відкритими ідентифікаторами клієнта та іменами сеансів ролей. Ми рекомендуємо запровадити квоти Kafka за допомогою Amazon MSK за допомогою Secrets Manager і AWS KMS відповідно до переглянутої діаграми архітектури, щоб забезпечити архітектуру нульової довіри.
Якщо у вас є відгуки чи запитання щодо цієї публікації, включно з переглянутою архітектурою, ми будемо раді почути від вас. Сподіваємось, вам сподобалось читати цю публікацію.
Про автора
Вікас Баджай є старшим менеджером архітекторів рішень відділу фінансових послуг Amazon Web Services. Маючи понад два десятиліття досвіду роботи з фінансовими послугами та роботою з цифровими компаніями, він консультує клієнтів щодо дизайну продуктів, технологічних планів і архітектури додатків.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- EVM Фінанси. Уніфікований інтерфейс для децентралізованих фінансів. Доступ тут.
- Quantum Media Group. ІЧ/ПР посилений. Доступ тут.
- PlatoAiStream. Web3 Data Intelligence. Розширення знань. Доступ тут.
- джерело: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- : має
- :є
- : ні
- :де
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Здатний
- МЕНЮ
- вище
- Прийняти
- приймає
- доступ
- рахунки
- визнавати
- через
- додавати
- доповнення
- Додатковий
- Додатково
- після
- знову
- ВСІ
- розподіл
- асигнувань
- дозволяти
- дозволяє
- Також
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- та
- Інший
- будь-який
- Apache
- Апач Кафка
- з'являтися
- додаток
- застосування
- приблизно
- архітектура
- ЕСТЬ
- AS
- асоційований
- передбачається
- At
- автентифіковано
- Authentication
- доступний
- AWS
- AWS CloudFormation
- ширина смуги
- заснований
- BE
- оскільки
- було
- перед тим
- буття
- Краще
- блокований
- Bootstrap
- обидва
- дно
- Box
- брокер
- брокери
- браузер
- буфера
- бізнес
- підприємства
- але
- by
- call
- званий
- покликання
- CAN
- випадок
- КПП
- Залучайте
- викликаючи
- CD
- центральний
- зміна
- Зміни
- перевірка
- Вибирати
- клас
- клієнт
- клієнтів
- кластер
- код
- загальний
- повний
- обчислення
- поняття
- конфігурація
- налаштувати
- З'єднувальний
- Отже
- Консоль
- споживати
- споживач
- містить
- продовжувати
- триває
- триває
- контроль
- покритий
- створювати
- створений
- створення
- Поточний
- клієнт
- Клієнти
- дані
- Платформа даних
- десятиліття
- Розшифрувати
- дефолт
- затримка
- Демонстрація
- продемонстрований
- Залежно
- описувати
- описаний
- дизайн
- докладно
- деталі
- Визначати
- визначає
- Розмір
- обговорювалися
- дисплей
- розрізняти
- документація
- скачати
- два
- під час
- кожен
- Раніше
- нудьгувати
- ефект
- або
- включіть
- включений
- дозволяє
- зашифрованих
- Кінцева точка
- примусове виконання
- підвищена
- забезпечувати
- Що натомість? Створіть віртуальну версію себе у
- Навколишнє середовище
- помилки
- Ефір (ETH)
- врешті-решт
- досліджувати
- приклад
- перевищувати
- Крім
- досвід
- пояснені
- пояснення
- експорт
- піддаватися
- зворотний зв'язок
- кілька
- Рисунок
- філе
- Файли
- фінансовий
- фінансові послуги
- знайти
- Перший
- відповідати
- потік
- після
- слідує
- для
- формат
- чотири
- від
- функція
- Крім того
- отримати
- Git
- GitHub
- управління
- великий
- Group
- Групи
- щасливий
- Мати
- he
- чути
- на вищому рівні
- Виділено
- надія
- господар
- хостів
- Як
- How To
- HTML
- HTTP
- HTTPS
- IAM
- ID
- Особистість
- ідентифікатори
- if
- ілюструє
- зображення
- вплив
- реалізація
- реалізації
- in
- У тому числі
- вказувати
- вказує
- вказуючи
- індивідуальний
- інформація
- екземпляр
- інтегральний
- в
- вводити
- введені
- isn
- питання
- IT
- ЙОГО
- Java
- JPG
- кафка
- ключ
- відомий
- МЕЖА
- Лінія
- ліній
- список
- логічний
- зробити
- вдалося
- управління
- менеджер
- максимальний
- Може..
- виміряний
- пам'ять
- повідомлення
- Метрика
- протокол
- режим
- змінювати
- монітор
- більше
- MS
- багато
- множинний
- повинен
- ім'я
- Імена
- Переміщення
- навігація
- Необхідність
- негативно
- мережу
- Нові
- наступний
- немає
- зазначив,
- Зверніть увагу..
- номер
- отримує
- трапляються
- of
- on
- ONE
- тільки
- Відкриється
- працювати
- операції
- варіант
- Опції
- or
- порядок
- оригінал
- Інше
- з
- над
- упаковані
- сторінка
- pane
- параметр
- параметри
- частина
- Пройшов
- Проходження
- шлях
- відсоток
- виконувати
- продуктивність
- дозвіл
- Простий текст
- платформа
- plato
- Інформація про дані Платона
- PlatoData
- точка
- точок
- Політика
- політика
- пошта
- потенціал
- пресування
- запобігати
- попередній
- раніше
- Головний
- приватний
- обробка
- виробляти
- виробник
- Product
- дизайн продукту
- властивості
- забезпечувати
- за умови
- громадськість
- публікувати
- питань
- ставка
- швидше
- Досягає
- Читати
- читання
- рекомендувати
- рекомендований
- називають
- регіон
- запам'ятати
- видаляти
- замінювати
- Сховище
- представлений
- запросити
- запитів
- вимагається
- ресурс
- ресурси
- ті
- відповідно
- REST
- дорожні карти
- Роль
- ролі
- прогін
- біг
- s
- то ж
- Незадоволений
- задоволений
- скріншоти
- Sdk
- другий
- seconds
- секрет
- розділ
- безпечний
- безпеку
- токен безпеки
- побачити
- послати
- відправка
- старший
- окремий
- Серія
- Послуги
- Сесія
- комплект
- установка
- налаштування
- Повинен
- показаний
- Шоу
- аналогічний
- Аналогічно
- з
- Рішення
- Source
- вихідні
- Простір
- конкретний
- зазначений
- стек
- етапи
- старт
- почалася
- Крок
- заходи
- Стоп
- зберігати
- потоковий
- рядок
- більш сильний
- підмережі
- наступні
- Успішно
- такі
- достатній
- поставляється
- Опори
- Приймати
- команда
- Технологія
- шаблон
- Шаблони
- термінал
- тест
- перевірений
- Тестування
- ніж
- Що
- Команда
- Джерело
- їх
- Їх
- потім
- отже
- вони
- це
- три
- через
- пропускна здатність
- час
- до
- знак
- тема
- теми
- лікувати
- Довіряйте
- два
- тип
- Типи
- розуміння
- Оновити
- оновлений
- оновлення
- використання
- використовуваний
- користувач
- користувачі
- використовує
- використання
- значення
- Цінності
- перевірити
- через
- вид
- було
- шлях..
- we
- Web
- веб-сервіси
- ДОБРЕ
- коли
- Чи
- який
- в той час як
- волі
- з
- без
- робочий
- запис
- ще
- ви
- вашу
- зефірнет