Udostępnij za pośrednictwem


Zalecane konfiguracje dla klientów platformy Apache Kafka

Poniżej przedstawiono zalecane konfiguracje korzystania z usługi Azure Event Hubs z aplikacji klienckich platformy Apache Kafka.

Właściwości konfiguracji klienta Java

Konfiguracje producentów i konsumentów

Właściwości Zalecane wartości Dozwolony zakres Uwagi
metadata.max.age.ms 180000 (przybliżona) < 240000 Można obniżyć, aby szybciej pobierać zmiany metadanych.
connections.max.idle.ms 180000 < 240000 Platforma Azure zamyka bezczynność > protokołu TCP (Bound Transmission Control Protocol) 240 000 ms, co może spowodować wysłanie na nieaktywne połączenia (pokazane jako wygasłe partie z powodu przekroczenia limitu czasu wysyłania).

Tylko konfiguracje producenta

Konfiguracje producenta można znaleźć tutaj.

Właściwości Zalecane wartości Dozwolony zakres Uwagi
max.request.size 1000000 < 1046528 Usługa zamyka połączenia, jeśli wysyłane są żądania większe niż 1046 528 bajtów. Ta wartość musi zostać zmieniona i powoduje problemy w scenariuszach tworzenia o wysokiej przepływności.
retries > 0 Może wymagać zwiększenia delivery.timeout.ms wartości, zobacz dokumentację.
request.timeout.ms 30000 .. 60000 > 20000 Usługa Event Hubs wewnętrznie domyślnie wynosi co najmniej 20 000 ms. Chociaż żądania z niższymi wartościami limitu czasu są akceptowane, zachowanie klienta nie jest gwarantowane.

Upewnij się, że request.timeout.ms jest co najmniej zalecaną wartością 60000, a session.timeout.ms jest co najmniej zalecaną wartością 30000. Jeśli te ustawienia są zbyt niskie, mogą spowodować przekroczenia limitu czasu użytkownika, co spowoduje ponowne równoważenie (co powoduje większe przekroczenie limitu czasu, co powoduje ponowne równoważenie itd.).

metadata.max.idle.ms 180000 > 5000 Określa, jak długo producent buforuje metadane tematu, który jest bezczynny. Jeśli czas, który upłynął od czasu ostatniego utworzenia tematu, przekracza czas bezczynności metadanych, metadane tematu zostaną zapomniane, a następny dostęp do niego wymusi żądanie pobierania metadanych.
linger.ms > 0 W przypadku scenariuszy o wysokiej przepływności wartość utrzymująca się powinna być równa najwyższej tolerowanej wartości, aby móc korzystać z dzielenia na partie.
delivery.timeout.ms Ustaw zgodnie z formułą (request.timeout.ms + linger.ms) * retries.
compression.type uncompressed, gzip Obecnie obsługiwana jest tylko kompresja gzip.

Tylko konfiguracje konsumentów

Konfiguracje konsumentów można znaleźć tutaj.

Właściwości Zalecane wartości Dozwolony zakres Uwagi
heartbeat.interval.ms 3000 3000 jest wartością domyślną i nie należy jej zmieniać.
session.timeout.ms 30000 6000 .. 300000 Zacznij od 30000, zwiększ, jeśli występują częste ponowne równoważenie z powodu pominiętych pulsów.

Upewnij się, że request.timeout.ms jest co najmniej zalecaną wartością 60000, a session.timeout.ms jest co najmniej zalecaną wartością 30000. Jeśli te ustawienia są zbyt niskie, mogą spowodować przekroczenia limitu czasu użytkownika, co spowoduje ponowne równoważenie (co powoduje większe przekroczenie limitu czasu, co powoduje ponowne równoważenie itd.).

max.poll.interval.ms 300000 (ustawienie domyślne) >session.timeout.ms Służy do ponownego równoważenia limitu czasu, więc nie należy go ustawiać zbyt nisko. Musi być większe niż session.timeout.ms.

właściwości konfiguracji librdkafka

Główny librdkafka plik konfiguracji (link) zawiera rozszerzone opisy właściwości opisanych w poniższych sekcjach.

Konfiguracje producentów i konsumentów

Właściwości Zalecane wartości Dozwolony zakres Uwagi
socket.keepalive.enable prawda Konieczne, jeśli oczekuje się, że połączenie będzie bezczynne. Platforma Azure zamyka przychodzący bezczynność > protokołu TCP 240 000 ms.
metadata.max.age.ms ~ 180000 < 240000 Można obniżyć, aby szybciej pobierać zmiany metadanych.

Tylko konfiguracje producenta

Właściwości Zalecane wartości Dozwolony zakres Uwagi
retries > 0 Wartość domyślna to 2147483647.
request.timeout.ms 30000 .. 60000 > 20000 Usługa Event Hubs wewnętrznie domyślnie wynosi co najmniej 20 000 ms. librdkafka wartość domyślna to 5000, co może być problematyczne. Chociaż żądania z niższymi wartościami limitu czasu są akceptowane, zachowanie klienta nie jest gwarantowane.
partitioner consistent_random Zobacz dokumentację librdkafka consistent_random jest ustawieniem domyślnym i najlepszym. Klucze puste i null są obsługiwane idealnie w większości przypadków.
compression.codec none, gzip Obecnie obsługiwana jest tylko kompresja gzip.

Tylko konfiguracje konsumentów

Właściwości Zalecane wartości Dozwolony zakres Uwagi
heartbeat.interval.ms 3000 3000 jest wartością domyślną i nie należy jej zmieniać.
session.timeout.ms 30000 6000 .. 300000 Zacznij od 30000, zwiększ, jeśli występują częste ponowne równoważenie z powodu pominiętych pulsów.
max.poll.interval.ms 300000 (ustawienie domyślne) >session.timeout.ms Służy do ponownego równoważenia limitu czasu, więc nie należy go ustawiać zbyt nisko. Musi być większe niż session.timeout.ms.

Dalsze uwagi

Zapoznaj się z poniższą tabelą typowych scenariuszy błędów związanych z konfiguracją.

Objawy Problem Rozwiązanie
Błędy zatwierdzania przesunięcia z powodu ponownego równoważenia Twój konsument czeka zbyt długo między wywołaniami poll() i usługa kopnie konsumenta z grupy. Dostępnych jest kilka opcji:
  • Zwiększanie limitu czasu przetwarzania sondy (max.poll.interval.ms)
  • Zmniejsz rozmiar partii komunikatów, aby przyspieszyć przetwarzanie
  • Ulepszanie przetwarzania równoległego w celu uniknięcia blokowania elementu consumer.poll()
Zastosowanie niektórych kombinacji tych trzech jest prawdopodobnie najmądsze.
Wyjątki sieciowe o wysokiej przepływności Jeśli używasz klienta Java + domyślnego parametru max.request.size, żądania mogą być zbyt duże. Zobacz konfiguracje języka Java wymienione wcześniej.

Następne kroki

Zobacz Limity subskrypcji i usług platformy Azure, limity przydziału i ograniczenia dotyczące limitów przydziałów i limitów wszystkich usług platformy Azure.