Apache Kafka to rozproszona pamięć masowa przeznaczona do wprowadzania i przetwarzania danych strumieniowych w czasie rzeczywistym. Dane przesyłane strumieniowo to informacje, które są stale generowane przez tysiące źródeł danych, z których wszystkie przesyłają rekordy danych w tym samym czasie. Platforma streamingowa musi być w stanie poradzić sobie z ciągłym napływem danych i przetwarzać je sekwencyjnie i progresywnie.
Co to jest wielowątkowość i dlaczego tego potrzebujemy?
Zdolność jednostki centralnej (CPU) (lub pojedynczego rdzenia w procesorze wielordzeniowym) do jednoczesnego zapewniania wielu wątków wykonywania, obsługiwana przez system operacyjny, jest określana jako wielowątkowość. Wielowątkowość można wykorzystać do zwiększenia szybkości aplikacji w sytuacjach, w których praca może zostać podzielona na mniejsze jednostki, które mogą działać równolegle bez naruszania spójności danych. Kafka umożliwia rozbudowę systemu rozproszonego za pomocą partycji, które są uporządkowanymi podzbiorami komunikatów w temacie.
Niedawno zauważył trend, w którym programiści, zamiast zapewniać, że obliczenia mogą efektywnie przetwarzać dane z pojedynczej partycji, wybierają łatwą drogę rozbudowy partycji/VM w celu uzyskania wymaganej przepustowości. To odpowiednik wyrzucania pieniędzy na problem.
Tematy Kafki dzielą rekordy na mniejsze części zwane partycjami, które można przetwarzać indywidualnie bez uszczerbku dla dokładności wyników, kładąc podwaliny pod przetwarzanie równoległe. Jest to zwykle realizowane przez skalowanie, które obejmuje korzystanie z wielu odbiorców w tej samej grupie, z których każdy przetwarza dane z podzbioru partycji tematycznych i działa w jednym wątku.
Ponieważ czytanie i przetwarzanie wiadomości w jednym wątku jest wystarczające dla większości Przypadki użycia KafkiApacze Konsument Kafki paradygmat nawlekania jest szeroko stosowany. Pętla odpytywania działa płynnie, gdy przetwarzanie nie wymaga działań we/wy.
Konsumenci Kafki
Konsumenci, którzy kupują Kafkę, zwykle robią to w ramach grupy. Gdy wielu konsumentów subskrybuje temat i jest członkami tej samej grupy konsumentów, każdy konsument otrzymuje komunikaty z podzbioru partycji podmiotu.
Dodanie dodatkowych konsumentów do grupy konsumentów jest najczęstszą techniką skalowania zużycia danych z tematu Kafki. Konsumenci Kafki często wykonują czynności o dużym opóźnieniu, takie jak zapisywanie do bazy danych lub wykonywanie czasochłonnych obliczeń na danych. Gdy pojedynczy konsument nie jest w stanie nadążyć za szybkością przepływu danych do tematu, skalujemy go, dodając więcej konsumentów, którzy dzielą obciążenie, ponieważ każdy konsument jest właścicielem tylko podzbioru partycji i komunikatów.
Korzyści z wielowątkowości
Wielowątkowość umożliwia jednoczesne uruchamianie wielu elementów programu. Wątki to lekkie procesy dostępne w ramach procesu. Wielowątkowość umożliwia wielozadaniowość w celu maksymalnego wykorzystania procesora.
Oto niektóre z zalet programowania wielowątkowego:
Udostępnianie zasobów
Zasoby procesu, w tym pamięć, dane i pliki, są współużytkowane przez wszystkie wątki. Korzystając z udostępniania zasobów, jeden program może mieć kilka wątków w tej samej przestrzeni adresowej.
Reakcja na coś
Reakcja programu umożliwia kontynuowanie działania programu, nawet jeśli jego część zostanie zatrzymana z powodu wielowątkowości. Jeśli proces trwa długo, można to również zrobić.
Architektura wieloprocesorowa
Wielowątkowość umożliwia równoległe działanie każdego wątku w architekturze wieloprocesorowej na innym procesorze. Poprawia to współbieżność systemu. W systemie jednoprocesorowym w danym momencie może działać tylko jeden proces lub wątek.
Co to jest wątek na model konsumencki
Każdy wątek jest tworzony i połączony z brokerem Kafka w wątku na model konsumenta. Partycje, których komunikaty będą wysyłane do tych wątków, są przypisywane przez brokera kafka.
Pojedynczy wątek łączy się z Kafką w wielowątkowym trybie konsumenckim i może pozyskiwać dane z kilku/pojedynczych partycji. Gdy dane zostaną dostarczone do wątku, wątek może dystrybuować komunikaty do innych pul wątków w celu równoległego przetwarzania. W tej metodzie wątek konsumenta określa, który wątek podrzędny będzie obsługiwał typy komunikatów. Jednak w tej sytuacji zarządzanie offsetem staje się niezwykle trudne.
Spring może łatwo wygenerować kilka wątków do połączenia z Kafką. Zobaczmy, jak te dwie osoby zachowują się inaczej. Mamy jeden temat testowy z dziesięcioma partycjami i jedną maszyną wirtualną z jedną współbieżną aplikacją wiosenną.
Wątek na model konsumencki
/**
* Consumer configuration for email topics
*
* @return
*/
@Bean
public ConsumerFactory<String, String> consumerFactory()
{
Map<String, Object> props = new HashMap<>();
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, EMAIL_STATUS_CONSUMER_GROUP);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}
/**
* Ustawia współbieżność dla słuchacza kafka
*
* @zwrócić
*/
@Fasola
public ConcurrentKafkaListenerContainerFactory
{
ConcurrentKafkaListenerContainerFactory
fabryka.setConsumerFactory(ConsumerFactory());
fabryka.ustaw Współbieżność(1);
zwróć fabrykę;
}
Tego podziału przysłuchuje się grupie konsumenckiej spring-group. Oto jak zachowuje się pojedyncza współbieżność:
GRUPA TEMAT PARTYCJA ID KONSUMENTA ID KLIENTA HOSTA
grupa wiosenna temat testowy 8 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 2 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 1 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 4 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 5 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 6 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 3 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 7 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 9 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 0 konsument-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 konsument-1
Jeśli przyjrzysz się uważnie powyższym wynikom, zauważysz, że identyfikator klienta aplikacji jest taki sam dla wszystkich 10 partycji, co oznacza, że jest to pojedynczy wątek, który łączy je wszystkie.
Spójrzmy, co się dzieje, gdy współbieżność wzrasta do 2,
GRUPA TEMAT PARTYCJA ID KONSUMENTA ID KLIENTA HOSTA
grupa sprężyn – temat testowy 8 konsument-2-8ab0213d-683c-4f92-b3c8-767701905994/172.22.0.1 konsument-2
grupa wiosna temat testowy 5 konsument-2-8ab0213d-683c-4f92-b3c8-767701905994/172.22.0.1 konsument-2
grupa wiosna temat testowy 6 konsument-2-8ab0213d-683c-4f92-b3c8-767701905994/172.22.0.1 konsument-2
grupa sprężynowa temat testowy 7 konsument-2-8ab0213d-683c-4f92-b3c8-767701905994/172.22.0.1 konsument-2
grupa wiosna temat testowy 9 konsument-2-8ab0213d-683c-4f92-b3c8-767701905994/172.22.0.1 konsument-2
grupa wiosenna temat testowy 4 konsument-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 2 konsument-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 konsument-1
grupa wiosna temat testowy 3 konsument-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 konsument-1
grupa wiosenna temat testowy 1 konsument-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 konsument-1
grupa wiosna temat testowy 0 konsument-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 konsument-1
Jak widać na powyższym zrzucie ekranu, są teraz dwa wątki, każdy z pięcioma partycjami.
Kafka będzie próbował równomiernie rozmieścić partycje między wątkami należącymi do tej samej grupy konsumentów. Będziemy mieli dedykowany wątek dla każdej partycji, jeśli utworzymy dziesięć współbieżnych wątków.
Wniosek
W tym artykule rozumiemy kilka rzeczy na temat wielowątkowości i poznajemy model wątkowości.