2015-03-26 9 views
16

Próbujemy ocenić Kafkę i zastąpić Królik Mq w naszym oprogramowaniu.Czy możemy mieć silne możliwości routingu z Apache Kafka podobne do RabbitMq?

Znamy zalety Kafki pod względem RabbitMq w porównaniu z konsumpcją offline, ogromną trwałością, doskonałą wydajnością, małym opóźnieniem i wysoką przepustowością.

Ale potrzebujemy możliwości, w jaki sposób RabbitMq ma z wymianą tematów szczegółowe trasowanie dla heterogenicznego zużycia.

Do pewnego stopnia możemy to osiągnąć, zwiększając liczbę partycji na brokera w Kafce. Ale ma swoje własne ograniczenia, takie jak narzut metadanych tematu na znode, zwiększenie opóźnienia.

Nasz przypadek użycia służy do filtrowania danych w partycji. Załóżmy, że otrzymujesz 100 danych z czujników podobnego typu w jednej partycji. Czy konsument ma możliwość wybrania tylko kilku danych z czujników i zignoruje resztę.

Możemy wykonać filtrowanie/routing po stronie aplikacji (konsumenta), ale wydaje się, że nie jest to wielokrotnego użytku i dodatkowe obciążenie po stronie konsumenta.

Czy istnieje sposób, w jaki Kafka może zapewnić bogate możliwości routingu dzięki optymalnej liczbie partycji?

Dzięki Ashish

+0

Czy kiedykolwiek doszło do ostatecznego podejścia/rozwiązania z Kafka, które spełnia twoje potrzeby routingowe? Mam podobną sytuację, w której mam zestaw aplikacji uruchamianych w zestawach N oddzielnych sekcji i chciałbym, aby komunikaty publikowane dla kontekstu zestawu A były zużywane przez inne aplikacje w tym samym zbiorze A, i nie ustawiam B. Nie podoba mi się pomysł, że wszystkie aplikacje we wszystkich zestawach otrzymają wszystkie wiadomości i od nich zależy odfiltrowanie tych dla ich własnego zestawu. –

Odpowiedz

12

modelu wiadomości Kafki jest dużo prostsze niż RabbitMQ modelu, a użytkownicy są mądrzy, aby wykorzystać kilka abstrakcje, że nie przewiduje, jak zostały przeznaczone. Rzeczywiście, tematy są jedynym poziomem routingu, jaki powinien być kiedykolwiek wykonany w Kafce. Partycje służą tylko do skalowania, zapewniania porządku (ale tylko w obrębie partycji, która jest znaczącym problemem w przypadku skalowalności, jeśli masz aplikację zależną od zamówienia) i ułatwiają jednoczesnym konsumentom w danym temacie.

Problem z rutowaniem na poziomie partycji polega na tym, że nie można go skalować, ponieważ partycje są elementem Kafki zapewniającym skalowalność (przynajmniej w warstwie wiadomości). Oczywiście, Kafka nie jest przeznaczony do szczegółowego routingu. Jest przeznaczony do trwałego, niezawodnego, skalowalnego powiadamiania pub/sub. Nie ma również partycji zaprojektowanych do skalowania w całym klastrze. Z samej swojej natury partycje są lokalne dla jednego lub kilku węzłów Kafki (w zależności od współczynnika replikacji tematu), ale Kafka rozpowszechnia wiele partycji wewnątrz tematu w klastrze. Oznacza to, że istnieje pewien potencjał hot-spottingu, jeśli wiadomości faworyzują jakąś partycję, zamiast równomiernie rozdzielać ją na partycje w temacie (dlatego producent Kafki zwykle zajmuje się partycjonowaniem).

Jeśli chodzi o filtrowanie po stronie klienta, myślę, że masz rację: to wydaje mi się dużo zmarnowanych zasobów, ale może po prostu nie lubię zbyt dużych zasobów.

Krótko mówiąc, myślę, że możesz ryzykować wkopanie się w dziurę, jeśli spróbujesz myśleć o abstrakcjach wiadomości Kafki w tak złożonych kategoriach. Kafka jest zaprojektowana i zoptymalizowana pod kątem dystrybucji ładunków za pośrednictwem partycji, więc kooptacja ich na inną - choć nieco podobną - przypadek użycia z pewnością nie jest idealna.

Mam przeczucie, że możesz zarządzać swoim przypadkiem użycia w kontekście funkcji Kafki. Uważam, że największym wyzwaniem związanym ze złożonymi schematami routingu w ramach tematów Kafki jest zapobieganie duplikowaniu danych w wielu tematach, ale gdy już zrozumiesz, jak wiele aplikacji może korzystać z różnych pozycji w ramach tego samego tematu, wydaje się, że problem znika. W tym sensie ważne jest, aby Kafka był bardziej logiczny niż jako kolejka.

Na marginesie, myślę, że twoja troska o łaty wymagane do zarządzania partycjami jest bezpodstawna. Jeśli masz wystarczająco dużo tematów i partycji, aby zużywać pamięć swoich węzłów ZooKeepera (tonę), to prawdopodobnie masz już problemy z wieloma zasobami.

Powiązane problemy