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.
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. –