Przydziały Kafki są integralną częścią klastrów Kafki z wieloma dzierżawcami. Zapobiegają negatywnemu wpływowi na wydajność klastra Kafka przez źle zachowujące się aplikacje, które nadmiernie zużywają zasoby klastra. Co więcej, umożliwiają obsługę centralnej platformy danych strumieniowych jako platformy obsługującej wielu dzierżawców i wykorzystywanie jej przez aplikacje typu downstream i upstream w wielu liniach biznesowych. Kafka obsługuje dwa typy kwot: limity przepustowości sieci i zażądać kwot stawek. Przydziały przepustowości sieci definiują progi szybkości transmisji, takie jak ilość danych, które aplikacje klienckie mogą generować i zużywać od każdego pojedynczego brokera w klastrze Kafka, mierzona w bajtach na sekundę. Limity szybkości żądań ograniczają procent czasu, jaki każdy broker spędza na przetwarzaniu żądań aplikacji klienckich. W zależności od konfiguracji limity platformy Kafka można ustawić dla określonych użytkowników, określonych identyfikatorów klientów lub obu.
In Część 1 w tej dwuczęściowej serii omówiliśmy koncepcje egzekwowania kwot Kafki Przesyłanie strumieniowe zarządzane przez Amazon dla Apache Kafka (Amazon MSK) podczas korzystania z klastrów AWS Zarządzanie tożsamością i dostępem (IAM) kontrola dostępu.
W tym poście przeprowadzimy Cię przez krok po kroku konfigurowanie przydziałów Kafki w klastrze MSK przy użyciu kontroli dostępu IAM i testowanie ich za pomocą przykładowych aplikacji klienckich.
Omówienie rozwiązania
Poniższy rysunek, który po raz pierwszy przedstawiliśmy w Część 1, ilustruje, jak aplikacje klienckie Kafki (ProducerApp-1
, ConsumerApp-1
, ConsumerApp-2
) dostęp Topic-B
w klastrze MSK, przyjmując role uprawnień do zapisu i odczytu. Każda aplikacja kliencka producenta i klienta ma limit określający, ile danych może wyprodukować lub zużyć w bajtach na sekundę. The ProducerApp-1
quota pozwala mu wygenerować do 1024 bajtów na sekundę na brokera. Podobnie, ConsumerApp-1
i ConsumerApp-2
przydziały pozwalają im zużywać odpowiednio 5120 i 1024 bajtów na sekundę na brokera. Poniżej znajduje się krótkie wyjaśnienie przepływu pokazanego na diagramie architektury:
- P1 -
ProducerApp-1
(poprzez jegoProducerApp-1-Role
rola IAM) przyjmujeTopic-B-Write-Role
Rola IAM, do której mają być wysyłane wiadomościTopic-B
- P2 - Z
Topic-B-Write-Role
przyjęto rolę IAM,ProducerApp-1
zaczyna wysyłać wiadomości doTopic-B
- C1 -
ConsumerApp-1
(poprzez jegoConsumerApp-1-Role
rola IAM) iConsumerApp-2
(poprzez jegoConsumerApp-2-Role
rola IAM) zakładająTopic-B-Read-Role
Rola IAM do odczytywania wiadomościTopic-B
- C2 - Z
Topic-B-Read-Role
przyjęto rolę IAM,ConsumerApp-1
iConsumerApp-2
zacznij odbierać wiadomości odTopic-B
Pamiętaj, że w tym poście zastosowano Interfejs wiersza poleceń AWS (interfejs wiersza poleceń AWS), Tworzenie chmury AWS szablony i Konsola zarządzania AWS za udostępnianie i modyfikowanie zasobów AWS, a za udostępnione zasoby zostanie naliczona opłata za Twoje konto AWS.
Kroki wysokiego poziomu są następujące:
- Udostępnij klaster MSK z kontrolą dostępu IAM i Elastyczna chmura obliczeniowa Amazon (Amazon EC2) instancje dla aplikacji klienckich.
- Stwórz
Topic-B
w klastrze MSK. - Utwórz role IAM, do których będą miały dostęp aplikacje klienckie
Topic-B
. - Uruchamiaj aplikacje producentów i konsumentów bez ustawiania przydziałów.
- Skonfiguruj limity produkcji i zużycia dla aplikacji klienckich.
- Uruchom ponownie aplikacje po ustawieniu przydziałów.
Wymagania wstępne
Zaleca się przeczytanie Część 1 tej serii, zanim przejdziesz dalej. Aby rozpocząć, potrzebujesz:
- Konto AWS, które w tym poście będzie nazywane kontem demonstracyjnym, zakładając, że jego identyfikator konta to
1111 1111 1111
- Uprawnienia do tworzenia, usuwania i modyfikowania zasobów AWS na koncie demo
Udostępnij klaster MSK z kontrolą dostępu IAM i instancjami EC2
Ten krok obejmuje wyposażenie klastra MSK w kontrolę dostępu IAM w VPC na koncie demonstracyjnym. Dodatkowo tworzymy cztery instancje EC2 w celu wprowadzenia zmian konfiguracyjnych w klastrze MSK oraz w aplikacjach producentów hostów i klientów konsumenckich.
Wdróż stos CloudFormation
- Sklonuj Repozytorium GitHub aby pobrać pliki szablonów CloudFormation i przykładowe aplikacje klienckie:
- W konsoli AWS CloudFormation wybierz Półki na książki w okienku nawigacji.
- Dodaj Utwórz stos.
- W razie zamówieenia projektu Przygotuj szablon, Wybierz Szablon jest gotowy.
- W razie zamówieenia projektu Źródło szablonu, Wybierz Prześlij plik szablonu.
- Prześlij plik
cfn-msk-stack-1.yaml
plik zamazon-msk-kafka-quotas/cfn-templates
katalog, a następnie wybierz Następna. - W razie zamówieenia projektu Nazwa stosu, wchodzić
MSKStack
. - Pozostaw parametry domyślne i wybierz Następna.
- Przewiń w dół Skonfiguruj opcje stosu stronę i wybierz Następna aby kontynuować.
- Przewiń w dół Review stronie, zaznacz pole wyboru Przyjmuję do wiadomości, że CloudFormation może tworzyć zasoby IAMi wybierz Prześlij.
Ukończenie stosu zajmie około 30 minut. Po pomyślnym utworzeniu stosu zostaną utworzone następujące zasoby:
- VPC z trzema podsieciami prywatnymi i jedną podsiecią publiczną
- Klaster MSK z trzema brokerami z włączoną kontrolą dostępu IAM
- Instancja EC2 wywoływana
MSKAdminInstance
do modyfikowania ustawień klastra MSK oraz tworzenia i modyfikowania zasobów AWS - Instancje EC2 dla
ProducerApp-1
,ConsumerApp-1
,ConsumerApp-2
, po jednym dla każdej aplikacji klienckiej - Oddzielna rola IAM dla każdej instancji EC2 hostującej aplikację kliencką, jak pokazano na diagramie architektury
- Ze stosu Wyjścia zakładkę, zwróć uwagę na
MSKClusterArn
wartość.
Utwórz temat w klastrze MSK
Do stworzenia naszych klocków Topic-B
w klastrze MSK wykonaj następujące kroki:
- Na konsoli Amazon EC2 przejdź do listy uruchomionych instancji EC2.
- Wybierz
MSKAdminInstance
Instancja EC2 i wybierz Skontaktuj się. - Na Menedżer sesji kartę, wybierz Skontaktuj się.
- Uruchom następujące polecenia na nowej karcie, która otworzy się w przeglądarce:
- Ustaw zmienną środowiskową tak, aby wskazywała punkt końcowy IAM brokerów klastrów MSK:
- Zwróć uwagę na wartość
BOOTSTRAP_BROKERS_IAM
. - Uruchom następujące polecenie interfejsu wiersza polecenia platformy Kafka, aby utworzyć
Topic-B
w klastrze MSK:
Ponieważ klaster MSK jest wyposażony w kontrolę dostępu IAM, opcja --command-config
wskazuje na config_iam.properties
, który zawiera właściwości wymagane do kontroli dostępu IAM, utworzone przez MSKStack
Stos CloudFormation.
Po uruchomieniu poleceń interfejsu CLI platformy Kafka mogą pojawić się następujące ostrzeżenia, ale możesz je zignorować:
- Aby to zweryfikować
Topic-B
został utworzony, wymień wszystkie tematy:
Utwórz role IAM dla aplikacji klienckich, aby uzyskać dostęp do tematu B
Ten krok obejmuje tworzenie Topic-B-Write-Role
i Topic-B-Read-Role
jak pokazano na schemacie architektury. Topic-B-Write-Role
umożliwia operacje zapisu na Topic-B
i można przyjąć, że ProducerApp-1
. W podobny sposób ConsumerApp-1
i ConsumerApp-2
może założyć Topic-B-Read-Role
na którym chcesz wykonać operacje odczytu Topic-B
. Aby wykonać operacje odczytu na Topic-B
, ConsumerApp-1
i ConsumerApp-2
muszą także należeć do grup konsumentów określonych w trakcie MSKStack
aktualizacja stosu w kolejnym kroku.
Utwórz role, wykonując następujące czynności:
- W konsoli AWS CloudFormation wybierz Półki na książki w okienku nawigacji.
- Wybierz
MSKStack
i wybierz Aktualizacja. - W razie zamówieenia projektu Przygotuj szablonwybierz Zastąp bieżący szablon.
- W razie zamówieenia projektu Źródło szablonu, Wybierz Prześlij plik szablonu.
- Prześlij plik
cfn-msk-stack-2.yaml
plik zamazon-msk-kafka-quotas/cfn-templates
katalog, a następnie wybierz Następna. - Podaj następujące dodatkowe parametry stosu:
-
- W razie zamówieenia projektu Temat B ARN, wejdz do
Topic-B
RNA.
- W razie zamówieenia projektu Temat B ARN, wejdz do
ARN musi być sformatowany jako arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Użyj nazwy klastra i identyfikatora UUID klastra z klastra MSK ARN, który zanotowałeś wcześniej, i podaj swój region AWS. Więcej informacji można znaleźć w Kontrola dostępu IAM dla Amazon MSK.
-
- W razie zamówieenia projektu ConsumerApp-1 Nazwa grupy konsumentów, wchodzić
ConsumerApp-1
grupa konsumencka ARN.
- W razie zamówieenia projektu ConsumerApp-1 Nazwa grupy konsumentów, wchodzić
Musi być sformatowany jako arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- W razie zamówieenia projektu ConsumerApp-2 Nazwa grupy konsumentów, wchodzić
ConsumerApp-2
grupa konsumencka ARN.
- W razie zamówieenia projektu ConsumerApp-2 Nazwa grupy konsumentów, wchodzić
Użyj podobnego formatu, jak w poprzednim ARN.
- Dodaj Następna aby kontynuować.
- Przewiń w dół Skonfiguruj stos stronę opcji i wybierz Następna aby kontynuować.
- Przewiń w dół Review stronie, zaznacz pole wyboru Przyjmuję do wiadomości, że CloudFormation może tworzyć zasoby IAMi wybierz Zaktualizuj stos.
Aktualizacja stosu zajmie około 3 minut. Po pomyślnej aktualizacji stosu zostaną utworzone następujące zasoby:
- Temat-B-Zapis-Rola – Rola IAM z uprawnieniami do wykonywania operacji zapisu
Topic-B
. Polityka zaufania pozwala naProducerApp-1-Role
Rola JA, aby to przyjąć. - Temat-B-Read-Rola – Rola IAM z uprawnieniami do wykonywania operacji odczytu
Topic-B
. Polityka zaufania pozwala naConsumerApp-1-Role
iConsumerApp-2-Role
Role IAM, aby to przejąć. Ponadto,ConsumerApp-1
iConsumerApp-2
musi także należeć do grup konsumentów określonych podczas aktualizacji stosu, na którym będą wykonywane operacje odczytuTopic-B
.
- Ze stosu Wyjścia zakładkę, zwróć uwagę na
TopicBReadRoleARN
iTopicBWriteRoleARN
wartości.
Uruchamiaj aplikacje producentów i konsumentów bez ustawiania przydziałów
Tutaj biegniemy ProducerApp-1
, ConsumerApp-1
, ConsumerApp-2
bez ustalania ich kwot. Z poprzednich kroków będziesz potrzebować BOOTSTRAP_BROKERS_IAM
wartość, Topic-B-Write-Role
ARN i Topic-B-Read-Role
ARN. Kod źródłowy aplikacji klienckich i ich wersje spakowane są dostępne w pliku Repozytorium GitHub.
Uruchom aplikację ConsumerApp-1
Aby uruchomić ConsumerApp-1
aplikacji, wykonaj następujące kroki:
- Na konsoli Amazon EC2 wybierz opcję
ConsumerApp-1
Instancja EC2 i wybierz Skontaktuj się. - Na Menedżer sesji kartę, wybierz Skontaktuj się.
- Uruchom następujące polecenia na nowej karcie, która otworzy się w przeglądarce:
- Uruchom
ConsumerApp-1
aplikacja, z której możesz zacząć korzystać z wiadomościTopic-B
:
Możesz znaleźć Kod źródłowy w serwisie GitHub w celach informacyjnych. Szczegóły parametrów wiersza poleceń są następujące:
- –serwery startowe – Punkt końcowy IAM brokerów ładowania klastra MSK.
- –przyjmij-rolę-arn -
Topic-B-Read-Role
Rola IAM ARN. Przejmując tę rolę,ConsumerApp-1
przeczyta wiadomości z tematu. - -region – Region, z którego korzystasz.
- -Nazwa tematu – Nazwa tematu, z którego
ConsumerApp-1
przeczytam wiadomości. Wartość domyślna toTopic-B
. - –grupa-konsumentów – Nazwa grupy konsumentów dla
ConsumerApp-1
, jak określono podczas aktualizacji stosu. - –nazwa-sesji-roli -
ConsumerApp-1
zakładaTopic-B-Read-Role
używając Usługa tokena bezpieczeństwa AWS (AWS STS) SDK.ConsumerApp-1
użyje tej nazwy sesji roli podczas wywoływania metodyassumeRole
funkcja. - -Identyfikator klienta – Identyfikator klienta dla
ConsumerApp-1
. - –wskaźniki-liczby-konsumenta-druku – Flaga wskazująca, czy na terminalu mają być drukowane metryki klienta
ConsumerApp-1
. - –cw-nazwa-wymiaru - Amazon Cloud Watch nazwa wymiaru, która będzie używana do publikowania metryk dotyczących ograniczania przepustowości klienta
ConsumerApp-1
. - –cw-wartość-wymiaru – Wartość wymiaru CloudWatch, która będzie używana do publikowania wskaźników ograniczania przepustowości klienta
ConsumerApp-1
. - –cw-przestrzeń nazw – Przestrzeń nazw, w której
ConsumerApp-1
opublikuje metryki CloudWatch w celu monitorowania ograniczania przepustowości.
- Jeśli reszta parametrów jest zadowalająca, użyj poniższego polecenia i zmień
--assume-role-arn
i--region
zgodnie z Twoim środowiskiem:
Połączenia fetch-throttle-time-avg
i fetch-throttle-time-max
metryki klienta powinny wyświetlać wartość 0.0, co oznacza, że nie występuje ograniczenie przepustowości ConsumerApp-1
. Pamiętaj, że nie ustaliliśmy limitu konsumpcji ConsumerApp-1
już. Pozwól mu działać przez chwilę.
Uruchom aplikację ConsumerApp-2
Aby uruchomić ConsumerApp-2
aplikacji, wykonaj następujące kroki:
- Na konsoli Amazon EC2 wybierz opcję
ConsumerApp-2
Instancja EC2 i wybierz Skontaktuj się. - Na Menedżer sesji kartę, wybierz Skontaktuj się.
- Uruchom następujące polecenia na nowej karcie, która otworzy się w przeglądarce:
- Uruchom
ConsumerApp-2
aplikacja, z której możesz zacząć korzystać z wiadomościTopic-B
:
Kod ma podobne szczegóły parametrów wiersza poleceń jak ConsumerApp-1
omówione wcześniej, z wyjątkiem następujących:
- –grupa-konsumentów – Nazwa grupy konsumentów dla
ConsumerApp-2
, jak określono podczas aktualizacji stosu. - –nazwa-sesji-roli -
ConsumerApp-2
zakładaTopic-B-Read-Role
przy użyciu zestawu SDK AWS STS.ConsumerApp-2
użyje tej nazwy sesji roli podczas wywoływania metodyassumeRole
funkcja. - -Identyfikator klienta – Identyfikator klienta dla
ConsumerApp-2
.
- Jeśli reszta parametrów jest zadowalająca, użyj poniższego polecenia i zmień
--assume-role-arn
i--region
zgodnie z Twoim środowiskiem:
Połączenia fetch-throttle-time-avg
i fetch-throttle-time-max
metryki klienta powinny wyświetlać wartość 0.0, co oznacza, że nie występuje ograniczenie przepustowości ConsumerApp-2
. Pamiętaj, że nie ustaliliśmy limitu konsumpcji ConsumerApp-2
już. Pozwól mu działać przez chwilę.
Uruchom aplikację ProducerApp-1
Aby uruchomić ProducerApp-1
aplikacji, wykonaj następujące kroki:
- Na konsoli Amazon EC2 wybierz opcję
ProducerApp-1
Instancja EC2 i wybierz Skontaktuj się. - Na Menedżer sesji kartę, wybierz Skontaktuj się.
- Uruchom następujące polecenia na nowej karcie, która otworzy się w przeglądarce:
- Uruchom
ProducerApp-1
aplikację, do której możesz rozpocząć wysyłanie wiadomościTopic-B
:
Możesz znaleźć Kod źródłowy w serwisie GitHub w celach informacyjnych. Szczegóły parametrów wiersza poleceń są następujące:
- –serwery startowe – Punkt końcowy IAM brokerów ładowania klastra MSK.
- –przyjmij-rolę-arn -
Topic-B-Write-Role
Rola IAM ARN. Przejmując tę rolę,ProducerApp-1
napiszę wiadomość w temacie. - -Nazwa tematu -
ProducerApp-1
wyślę wiadomości na ten temat. Wartość domyślna toTopic-B
. - -region – Region AWS, którego używasz.
- –liczba-wiadomości – Liczba wiadomości
ProducerApp-1
aplikacja wyśle do tematu. - –nazwa-sesji-roli -
ProducerApp-1
zakładaTopic-B-Write-Role
przy użyciu zestawu SDK AWS STS.ProducerApp-1
użyje tej nazwy sesji roli podczas wywoływania metodyassumeRole
funkcja. - -Identyfikator klienta – Identyfikator klienta
ProducerApp-1
. - –typ producenta -
ProducerApp-1
można też uruchomić synchronicznie or asynchronicznie. Opcje są synchronizować or async. - –metryki kwotowe producentów drukarskich – Flaga wskazująca, czy metryki klienta mają być drukowane na terminalu wg ProducentAplikacja-1.
- –cw-nazwa-wymiaru – Nazwa wymiaru CloudWatch, która będzie używana do publikowania wskaźników ograniczania przepustowości klienta ProducentAplikacja-1.
- –cw-wartość-wymiaru – Wartość wymiaru CloudWatch, która będzie używana do publikowania wskaźników ograniczania przepustowości klienta ProducentAplikacja-1.
- –cw-przestrzeń nazw – Przestrzeń nazw, w której ProducentAplikacja-1 opublikuje metryki CloudWatch w celu monitorowania ograniczania przepustowości.
- Jeśli reszta parametrów jest zadowalająca, użyj poniższego polecenia i zmień
--assume-role-arn
i--region
zgodnie z Twoim środowiskiem. Aby uruchomić synchronicznego producenta Kafki, używa tej opcji--producer-type sync
:
Alternatywnie użyj --producer-type async
do uruchomienia producenta asynchronicznego. Więcej szczegółów znajdziesz w Wysyłanie asynchroniczne.
Połączenia produce-throttle-time-avg
i produce-throttle-time-max
metryki klienta powinny wyświetlać wartość 0.0, co oznacza, że nie występuje ograniczenie przepustowości ProducerApp-1
. Pamiętaj, że nie ustaliliśmy limitu produktów ProducerApp-1
już. Sprawdź to ConsumerApp-1
i ConsumerApp-2
może zużywać wiadomości i zauważać, że nie są one ograniczane. Zatrzymaj aplikacje klienta konsumenckiego i producenta, naciskając Ctrl + C w odpowiednich zakładkach przeglądarki.
Ustaw limity produkcji i zużycia dla aplikacji klienckich
Teraz, gdy uruchomiliśmy aplikacje producentów i konsumentów bez przydziałów, ustalamy ich przydziały i uruchamiamy je ponownie.
Otwórz Menedżer sesji terminal dla MSKAdminInstance
EC2 zgodnie z wcześniejszym opisem i uruchom poniższe polecenia, aby znaleźć domyślną konfigurację jednego z brokerów w klastrze MSK. Klastry MSK są udostępniane z domyślną konfiguracją przydziałów platformy Kafka.
Poniższy zrzut ekranu pokazuje Broker-1
wartości domyślne dla quota.consumer.default
i quota.producer.default
.
Konfiguracja przydziału ProducerApp-1
Zastąp symbole zastępcze we wszystkich poleceniach w tej sekcji wartościami odpowiadającymi Twojemu kontu.
Zgodnie z omówionym wcześniej diagramem architektury, ustaw ProducerApp-1
wygeneruj limit do 1024 bajtów/sekundę. Dla <ProducerApp-1 Client Id>
i <ProducerApp-1 Role Session>
, upewnij się, że używasz tych samych wartości, których użyłeś podczas biegania ProducerApp-1
wcześniej (producerapp-1-client-id
i producerapp-1-role-session
odpowiednio):
Zweryfikuj ProducerApp-1
utwórz kwotę za pomocą następującego polecenia:
Możesz usunąć ProducerApp-1
wygeneruj kwotę za pomocą następującego polecenia, ale nie uruchamiaj polecenia ponieważ w następnej kolejności przetestujemy limity.
Konfiguracja przydziału ConsumerApp-1
Zastąp symbole zastępcze we wszystkich poleceniach w tej sekcji wartościami odpowiadającymi Twojemu kontu.
Ustawmy limit zużycia na 5120 bajtów/sekundę dla ConsumerApp-1
. Forum <ConsumerApp-1 Client Id>
i <ConsumerApp-1 Role Session>
, upewnij się, że używasz tych samych wartości, których użyłeś podczas biegania ConsumerApp-1
wcześniej (consumerapp-1-client-id
i consumerapp-1-role-session
odpowiednio):
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>
Zweryfikuj ConsumerApp-1
zużyj limit za pomocą następującego polecenia:
Możesz usunąć ConsumerApp-1
zużywaj kwotę, używając następującego polecenia, ale nie uruchamiaj polecenia ponieważ w następnej kolejności przetestujemy limity.
Konfiguracja przydziału ConsumerApp-2
Zastąp symbole zastępcze we wszystkich poleceniach w tej sekcji wartościami odpowiadającymi Twojemu kontu.
Ustawmy limit zużycia na 1024 bajtów/sekundę dla ConsumerApp-2
. Forum <ConsumerApp-2 Client Id>
i <ConsumerApp-2 Role Session>
, upewnij się, że używasz tych samych wartości, których użyłeś podczas biegania ConsumerApp-2
wcześniej (consumerapp-2-client-id
i consumerapp-2-role-session
odpowiednio):
Zweryfikuj ConsumerApp-2
zużyj limit za pomocą następującego polecenia:
Jak z ConsumerApp-1
, możesz usunąć ConsumerApp-2
zużywaj kwotę za pomocą tego samego polecenia ConsumerApp-2
dane klienta i użytkownika.
Po ustawieniu limitów uruchom ponownie aplikacje producenta i konsumenta
Uruchommy ponownie aplikacje, aby sprawdzić wpływ limitów.
Uruchom ponownie ProducerApp-1
Ponowne odtworzenie ProducerApp-1
in synchroniczny mode za pomocą tego samego polecenia, którego użyłeś wcześniej. Poniższy zrzut ekranu ilustruje to kiedy ProducerApp-1
osiągnie swój limit u któregokolwiek z brokerów, produce-throttle-time-avg
i produce-throttle-time-max client
wartość metryki będzie większa niż 0.0. Wartość powyżej 0.0 wskazuje na to ProducerApp-1
jest dławiony. Umożliwić ProducerApp-1
uruchomić przez kilka sekund, a następnie zatrzymać go za pomocą Ctrl + C.
Możesz także przetestować wpływ limitu produktów, uruchamiając go ponownie ProducerApp-1
ponownie w asynchroniczny tryb (--producer-type async
). Podobnie jak w przypadku biegu synchronicznego, poniższy zrzut ekranu ilustruje, że kiedy ProducerApp-1
osiągnie swój limit u któregokolwiek z brokerów, produce-throttle-time-avg
i produce-throttle-time-max
wartość wskaźników klienta będzie większa niż 0.0. Wartość powyżej 0.0 wskazuje na to ProducerApp-1
jest dławiony. Zezwalaj na asynchronię ProducerApp-1
pobiegać przez chwilę.
W końcu zobaczysz TimeoutException
stwierdzając org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Podczas korzystania z asynchroniczny producenta i wysyłanie komunikatów z szybkością większą, niż broker może zaakceptować ze względu na limit, komunikaty będą najpierw umieszczane w kolejce w pamięci aplikacji klienckiej. Klientowi w końcu zabraknie miejsca w buforze, jeśli szybkość wysyłania wiadomości będzie w dalszym ciągu przekraczać szybkość akceptowania wiadomości, co spowoduje następną Producer.send()
połączenie do zablokowania. Producer.send()
w końcu rzuci TimeoutException
jeśli opóźnienie nie jest wystarczające, aby broker mógł dogonić aplikację producenta. Zatrzymywać się ProducerApp-1
stosując Ctrl + C.
Uruchom ponownie ConsumerApp-1
Ponowne odtworzenie ConsumerApp-1
za pomocą tego samego polecenia, którego użyłeś wcześniej. Poniższy zrzut ekranu ilustruje to kiedy ConsumerApp-1
osiągnie swój limit, fetch-throttle-time-avg
i fetch-throttle-time-max client
wartość metryki będzie większa niż 0.0. Wartość powyżej 0.0 wskazuje na to ConsumerApp-1
jest dławiony.
Dopuszczać ConsumerApp-1
uruchomić przez kilka sekund, a następnie zatrzymać go za pomocą Ctrl + C.
Uruchom ponownie ConsumerApp-2
Ponowne odtworzenie ConsumerApp-2
za pomocą tego samego polecenia, którego użyłeś wcześniej. Podobnie kiedy ConsumerApp-2
osiągnie swój limit, fetch-throttle-time-avg
i fetch-throttle-time-max client
wartość metryki będzie powyżej 0.0. Wartość powyżej 0.0 wskazuje to ConsumerApp-2
jest dławiony. Umożliwić ConsumerApp-2
uruchomić przez kilka sekund, a następnie zatrzymać go, naciskając Ctrl + C.
Wskaźniki przydziału klientów w Amazon CloudWatch
In Część 1wyjaśniliśmy, że metryki klienta to metryki udostępniane przez klientów łączących się z klastrami Kafki. Przyjrzyjmy się metrykom klienta w CloudWatch.
- W konsoli CloudWatch wybierz Wszystkie metryki.
- Pod Niestandardowe przestrzenie nazw, wybierz przestrzeń nazw podaną podczas uruchamiania aplikacji klienckich.
- Wybierz nazwę wymiaru i wybierz
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
,fetch-throttle-time-avg metrics
dla wszystkich zastosowań.
Te metryki wskazują zachowanie związane z ograniczaniem przepustowości ProducerApp-1
, ConsumerApp-1
, ConsumerApp-2
aplikacje przetestowane z konfiguracjami przydziałów opisanymi w poprzedniej sekcji. Poniższe zrzuty ekranu przedstawiają dławienie ProducerApp-1
, ConsumerApp-1
, ConsumerApp-2
w oparciu o limity przepustowości sieci. ProducerApp-1
, ConsumerApp-1
, ConsumerApp-2
aplikacje przekazują dane swoich klientów do CloudWatch. Możesz znaleźć Kod źródłowy w serwisie GitHub w celach informacyjnych.
Bezpieczny identyfikator klienta i nazwa sesji roli
Omówiliśmy, jak skonfigurować przydziały Kafki za pomocą aplikacji Identyfikator klienta i uwierzytelnione użytkownik główny. Gdy aplikacja kliencka przyjmuje rolę IAM w celu uzyskania dostępu do tematów Kafki w klastrze MSK z włączonym uwierzytelnianiem IAM, jej uwierzytelniona użytkownik zasada główna jest reprezentowana w następującym formacie (więcej informacji można znaleźć w identyfikatory IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Zawiera nazwa sesji roli (w tym przypadku, producerapp-1-role-session
) używane w aplikacji klienckiej podczas przyjmowania roli IAM za pośrednictwem zestawu SDK AWS STS. Aplikacja kliencka Kod źródłowy jest dostępny w celach informacyjnych. The Identyfikator klienta jest logicznym ciągiem nazwy (na przykład producerapp-1-client-id
), który jest konfigurowany w kodzie aplikacji przez zespół aplikacji. Dlatego aplikacja może podszywać się pod inną aplikację, jeśli uzyska plik Identyfikator klienta i nazwa sesji roli drugiej aplikacji i czy ma ona pozwolenie na przyjęcie tej samej roli IAM.
Jak pokazano na schemacie architektury, ConsumerApp-1
i ConsumerApp-2
to dwie oddzielne aplikacje klienckie z odpowiednimi przydziałami kwot. Ponieważ obaj mają uprawnienia do przyjmowania tej samej roli IAM (Topic-B-Read-Role
) na koncie demo, mogą korzystać z wiadomości Topic-B
. Dlatego brokerzy klastrów MSK rozróżniają je na podstawie ich identyfikatory klientów i Użytkownicy (które zawierają odpowiednie pliki nazwa sesji roli wartości). Jeśli ConsumerApp-2
w jakiś sposób uzyskuje ConsumerApp-1
nazwa sesji roli i Identyfikator klienta, może się podszywać ConsumerApp-1
określając ConsumerApp-1
nazwa sesji roli i Identyfikator klienta w kodzie aplikacji.
Załóżmy ConsumerApp-1
zastosowania consumerapp-1-client-id
i consumerapp-1-role-session
jak to Identyfikator klienta i nazwa sesji roli, odpowiednio. W związku z tym, ConsumerApp-1's
uwierzytelniony użytkownik zasada główna będzie wyglądać następująco, gdy założy Topic-B-Read-Role
Rola IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Podobnie, ConsumerApp-2
zastosowania consumerapp-2-client-id
i consumerapp-2-role-session
jak to Identyfikator klienta i nazwa sesji roli, odpowiednio. W związku z tym, ConsumerApp-2's
uwierzytelniony użytkownik zasada główna będzie wyglądać następująco, gdy założy Topic-B-Read-Role
Rola IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
uzyskuje ConsumerApp-1's
Identyfikator klienta i nazwa sesji roli i określi je w kodzie aplikacji, brokerzy klastrów MSK potraktują to jako ConsumerApp-1
i obejrzyj Identyfikator klienta as consumerapp-1-client-id
i uwierzytelnione użytkownik główny w następujący sposób:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
To pozwala ConsumerApp-2
zużywać dane z klastra MSK z maksymalną szybkością 5120 bajtów na sekundę zamiast 1024 bajtów na sekundę zgodnie z pierwotnym przydziałem przydziału. W konsekwencji, ConsumerApp-1's
jeśli będzie to miało negatywny wpływ na przepustowość ConsumerApp-2
działa równolegle.
Ulepszona architektura
Możesz przedstawić Menedżer tajemnic AWS i Usługa zarządzania kluczami AWS (AWS KMS) w architekturze do zabezpieczania aplikacji” identyfikatory klientów i nazwy sesji roli. Aby zapewnić lepsze zarządzanie, identyfikator klienta aplikacji i nazwa sesji roli muszą być przechowywane jako zaszyfrowane klucze tajne w Menedżerze wpisów tajnych. Zasady zasobów IAM powiązane z zaszyfrowanymi kluczami tajnymi i kluczem zarządzanym przez klienta KMS (CMK) pozwolą aplikacjom na dostęp i odszyfrowanie tylko odpowiedniego identyfikatora klienta i nazwy sesji roli. W ten sposób aplikacje nie będą mogły uzyskiwać wzajemnego dostępu do identyfikatora klienta i nazwy sesji roli oraz podszywać się pod siebie. Poniższy obraz przedstawia ulepszoną architekturę.
Zaktualizowany przepływ składa się z następujących etapów:
- P1 -
ProducerApp-1
odzyskuje swojeclient-id
irole-session-name
sekrety od Menedżera Sekretów - P2 -
ProducerApp-1
konfiguruje sekretclient-id
asCLIENT_ID_CONFIG
w kodzie aplikacji i zakładaTopic-B-Write-Role
(poprzez jegoProducerApp-1-Role
Rola IAM), przekazując sekretrole-session-name
do zestawu SDK AWS STSassumeRole
wywołanie funkcji - P3 - Z
Topic-B-Write-Role
przyjęto rolę IAM,ProducerApp-1
zaczyna wysyłać wiadomości doTopic-B
- C1 -
ConsumerApp-1
iConsumerApp-2
odzyskać odpowiednieclient-id
irole-session-name
sekrety od Menedżera Sekretów - C2 -
ConsumerApp-1
iConsumerApp-2
skonfiguruj odpowiedni sekretclient-id
asCLIENT_ID_CONFIG
w kodzie aplikacji i założyćTopic-B-Write-Role
(przezConsumerApp-1-Role
iConsumerApp-2-Role
role IAM), przekazując ich sekretrole-session-name
w zestawie SDK AWS STSassumeRole
wywołanie funkcji - C3 - Z
Topic-B-Read-Role
przyjęto rolę IAM,ConsumerApp-1
iConsumerApp-2
zacznij odbierać wiadomości odTopic-B
Zapoznaj się z dokumentacją dot Menedżer tajemnic AWS i AWSKMS aby lepiej zrozumieć, jak pasują one do architektury.
Oczyść zasoby
Przejdź do konsoli CloudFormation i usuń plik MSKStack
stos. Wszystkie zasoby utworzone podczas tego wpisu zostaną usunięte.
Wnioski
W tym poście omówiliśmy szczegółowe kroki konfiguracji przydziałów Amazon MSK i zademonstrowaliśmy ich efekt za pomocą przykładowych aplikacji klienckich. Ponadto omówiliśmy, w jaki sposób można używać metryk klienta do określenia, czy aplikacja kliencka jest ograniczana. Zwróciliśmy także uwagę na potencjalny problem z identyfikatorami klientów w postaci zwykłego tekstu i nazwami sesji ról. Zalecamy wdrożenie przydziałów Kafka w Amazon MSK przy użyciu Menedżera sekretów i AWS KMS zgodnie ze poprawionym diagramem architektury, aby zapewnić architekturę o zerowym zaufaniu.
Jeśli masz uwagi lub pytania dotyczące tego wpisu, w tym zmienionej architektury, chętnie się z Tobą skontaktujemy. Mamy nadzieję, że dobrze się bawiłeś czytając ten post.
O autorze
Wikas Bajaj jest starszym menedżerem w dziale architektów rozwiązań w dziale usług finansowych w Amazon Web Services. Dzięki ponad dwudziestoletniemu doświadczeniu w usługach finansowych i współpracy z firmami natywnie cyfrowymi doradza klientom w zakresie projektowania produktów, planów rozwoju technologii i architektur aplikacji.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- EVM Finanse. Ujednolicony interfejs dla zdecentralizowanych finansów. Dostęp tutaj.
- Quantum Media Group. Wzmocnienie IR/PR. Dostęp tutaj.
- PlatoAiStream. Analiza danych Web3. Wiedza wzmocniona. Dostęp tutaj.
- Źródło: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :ma
- :Jest
- :nie
- :Gdzie
- $W GÓRĘ
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Zdolny
- O nas
- powyżej
- Akceptuj
- akceptując
- dostęp
- Konto
- uznać
- w poprzek
- Dodaj
- dodatek
- Dodatkowy
- do tego
- Po
- ponownie
- Wszystkie kategorie
- przydział
- przydziały
- dopuszczać
- pozwala
- również
- Amazonka
- Amazon EC2
- Amazon Web Services
- an
- i
- Inne
- każdy
- Apache
- Apache Kafka
- zjawić się
- Zastosowanie
- aplikacje
- w przybliżeniu
- architektura
- SĄ
- AS
- powiązany
- przypuszczalny
- At
- uwierzytelniony
- Uwierzytelnianie
- dostępny
- AWS
- Tworzenie chmury AWS
- przepustowość
- na podstawie
- BE
- bo
- być
- zanim
- jest
- Ulepsz Swój
- zablokowany
- Bootstrap
- obie
- Dolny
- Pudełko
- pośrednik
- brokerów
- przeglądarka
- bufor
- biznes
- biznes
- ale
- by
- wezwanie
- nazywa
- powołanie
- CAN
- walizka
- CAT
- zapasy
- spowodowanie
- CD
- centralny
- zmiana
- Zmiany
- ZOBACZ
- Dodaj
- klasa
- klient
- klientów
- Grupa
- kod
- wspólny
- kompletny
- obliczać
- Koncepcje
- systemu
- skonfigurowany
- Podłączanie
- w konsekwencji
- Konsola
- konsumować
- konsument
- zawiera
- kontynuować
- ciągły
- kontynuując
- kontrola
- pokryty
- Stwórz
- stworzony
- Tworzenie
- Aktualny
- klient
- Klientów
- dane
- Platforma danych
- lat
- Odszyfruj
- Domyślnie
- opóźnienie
- Demo
- wykazać
- W zależności
- opisać
- opisane
- Wnętrze
- szczegółowe
- detale
- Ustalać
- określa
- Wymiary
- omówione
- Wyświetlacz
- rozróżniać
- dokumentacja
- pobieranie
- z powodu
- podczas
- każdy
- Wcześniej
- przegapić
- efekt
- bądź
- umożliwiać
- włączony
- Umożliwia
- szyfrowane
- Punkt końcowy
- egzekwować
- wzmocnione
- zapewnić
- Wchodzę
- Środowisko
- Błędy
- Eter (ETH)
- ostatecznie
- zbadać
- przykład
- przekraczać
- Z wyjątkiem
- doświadczenie
- wyjaśnione
- wyjaśnienie
- eksport
- narażony
- informacja zwrotna
- kilka
- Postać
- filet
- Akta
- budżetowy
- usługi finansowe
- Znajdź
- i terminów, a
- dopasować
- pływ
- następujący
- następujący sposób
- W razie zamówieenia projektu
- format
- cztery
- od
- funkcjonować
- Ponadto
- otrzymać
- git
- GitHub
- zarządzanie
- większy
- Zarządzanie
- Grupy
- Zaoszczędzić
- Have
- he
- słyszeć
- na wysokim szczeblu
- Podświetlony
- nadzieję
- gospodarz
- gospodarze
- W jaki sposób
- How To
- HTML
- http
- HTTPS
- IAM
- ID
- tożsamość
- ids
- if
- ilustruje
- obraz
- wpływ
- realizacja
- wykonawczych
- in
- Włącznie z
- wskazać
- wskazuje
- wskazując,
- indywidualny
- Informacja
- przykład
- integralny
- najnowszych
- przedstawiać
- wprowadzono
- ISN
- problem
- IT
- JEGO
- Java
- jpg
- kafka
- Klawisz
- znany
- LIMIT
- Linia
- linie
- Lista
- logiczny
- robić
- zarządzane
- i konserwacjami
- kierownik
- maksymalny
- Może..
- mierzona
- Pamięć
- wiadomości
- Metryka
- minuty
- Moda
- modyfikować
- monitor
- jeszcze
- MS
- dużo
- wielokrotność
- musi
- Nazwa
- Nazwy
- Nawigacja
- Nawigacja
- Potrzebować
- ujemnie
- sieć
- Nowości
- Następny
- Nie
- zauważyć
- Zauważyć..
- numer
- uzyskuje
- występujący
- of
- on
- ONE
- tylko
- otwiera
- eksploatowane
- operacje
- Option
- Opcje
- or
- zamówienie
- oryginalny
- Inne
- na zewnątrz
- koniec
- pakowane
- strona
- chleb
- parametr
- parametry
- część
- minęło
- Przechodzący
- ścieżka
- procent
- wykonać
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- pozwolenie
- zwykły tekst
- Platforma
- plato
- Analiza danych Platona
- PlatoDane
- punkt
- zwrotnica
- polityka
- polityka
- Post
- potencjał
- pilny
- zapobiec
- poprzedni
- poprzednio
- Główny
- prywatny
- przetwarzanie
- produkować
- producent
- Produkt
- projekt produktu
- niska zabudowa
- zapewniać
- pod warunkiem,
- publiczny
- publikować
- pytania
- Kurs
- raczej
- Osiąga
- Czytaj
- Czytający
- polecić
- Zalecana
- , o którym mowa
- region
- pamiętać
- usunąć
- obsługi produkcji rolnej, która zastąpiła
- składnica
- reprezentowane
- zażądać
- wywołań
- wymagany
- Zasób
- Zasoby
- osób
- odpowiednio
- REST
- mapy drogowe
- Rola
- role
- run
- bieganie
- s
- taki sam
- zadowolony
- zadowolony z
- screeny
- Sdk
- druga
- sekund
- Tajemnica
- Sekcja
- bezpieczne
- bezpieczeństwo
- token bezpieczeństwa
- widzieć
- wysłać
- wysyłanie
- senior
- oddzielny
- Serie
- Usługi
- Sesja
- zestaw
- ustawienie
- w panelu ustawień
- powinien
- pokazane
- Targi
- podobny
- Podobnie
- ponieważ
- Rozwiązania
- Źródło
- Kod źródłowy
- Typ przestrzeni
- specyficzny
- określony
- stos
- etapy
- początek
- rozpoczęty
- Ewolucja krok po kroku
- Cel
- Stop
- przechowywany
- Streaming
- sznur
- silniejszy
- podsieci
- kolejny
- Z powodzeniem
- taki
- wystarczający
- w zestawie
- podpory
- Brać
- zespół
- Technologia
- szablon
- Szablony
- terminal
- test
- przetestowany
- Testowanie
- niż
- że
- Połączenia
- Źródło
- ich
- Im
- następnie
- w związku z tym
- one
- to
- trzy
- Przez
- wydajność
- czas
- do
- żeton
- aktualny
- tematy
- leczyć
- Zaufaj
- drugiej
- rodzaj
- typy
- zrozumienie
- Aktualizacja
- zaktualizowane
- aktualizowanie
- posługiwać się
- używany
- Użytkownik
- Użytkownicy
- zastosowania
- za pomocą
- wartość
- Wartości
- zweryfikować
- przez
- Zobacz i wysłuchaj
- była
- Droga..
- we
- sieć
- usługi internetowe
- DOBRZE
- jeśli chodzi o komunikację i motywację
- czy
- który
- Podczas
- będzie
- w
- bez
- pracujący
- napisać
- jeszcze
- ty
- Twój
- zefirnet