Kafka, SNS czy coś innego?

Przepraszam, jeśli to pytanie dla początkujących. Ale staram się zrozumieć, czego powinienem użyć. Z tego co rozumiem Kafka jest :

Apache Kafka jest rozproszonym systemem publikowania i subskrybowania wiadomości.

I SNS to także system pub / sub.

Moim celem jest użycie jakiegoś systemu komunikatorów kolejkowych na AWS z aplikacją, która będzie dystrybuowana na kilku serwerach. Przy okazji (głównym językiem jest Python). A ponieważ jest na amazon, moją pierwszą myślą było użycie SNS i SQS. Ale niż widziałem wiele osób używających Kafki na AWS. Jakie są zalety jednego nad drugim?

Author: Vor, 2013-05-08

2 answers

Przypadki użycia dla Kafka I Amazon SQS/Amazon SNS są zupełnie inne.

Kafka, tak jak napisałeś, jest dystrybuowanym systemem publikowania-subskrybowania. Jest przeznaczony do bardzo wysokiej przepustowości, przetwarzania tysięcy wiadomości na sekundę. Oczywiście musisz skonfigurować i klasterować go dla siebie. Obsługuje wiele czytników, które mogą "dogonić" strumień wiadomości w dowolnym momencie (dobrze, o ile wiadomości są nadal na dysku). Można go używać zarówno jako Kolejka (używając grup konsumenckich) oraz jako temat.

Ważną cechą jest to, że nie można selektywnie uznać wiadomości za "przetworzone"; jedyną opcją jest potwierdzenie wszystkich wiadomości do pewnego przesunięcia.

SQS / SNS z drugiej strony:

  • no setup / no maintenance
  • albo Kolejka (SQS) albo temat (SNS)
  • różne ograniczenia (rozmiar, długość życia wiadomości itp.)
  • ograniczona przepustowość: można wykonywać wsadowe i równoczesne żądania, ale nadal osiągnięcie wysokiej przepustowości byłoby kosztowne
  • nie jestem pewien, czy wiadomości są replikowane; jednak przynajmniej raz gwarancja dostawy w SQS sugerowałaby Tak
  • SNS ma wbudowane powiadomienia e-mail, SMS, SQS, HTTP. Z Kafką prawdopodobnie będziesz musiał sam to zakodować
  • brak koncepcji "strumienia wiadomości"

Więc ogólnie powiedziałbym, że SQS / SNS są dobrze dostosowane do prostszych zadań i obciążeń z mniejszą ilością wiadomości.

 40
Author: adamw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 19:10:03

To klasyczny kompromis:

Narzędzia AWS (SQS, SNS)

Będą one łatwiejsze do skonfigurowania i integracji z resztą architektury, zwłaszcza jeśli większość z nich jest już uruchomiona na AWS. Na początku będzie to również prawdopodobnie tańsze, ponieważ mają dobry model pay as you go, ale koszt nie będzie również skalowany, więc musisz o tym pomyśleć.

Apache Kafka

Tutaj używasz bardzo popularnej (nie modnej) dystrybucji (jest to ważne, jeśli myślisz, że będziesz dużo skalować) PUB/SUB model. W dzisiejszych czasach model ten wydaje się być znacznie preferowany, ponieważ uruchamianie analiz danych przechodzących przez rury jest bardzo powszechne i zazwyczaj w architekturze SOA można mieć wiele małych usług konsumujących wiadomości i robiących tam rzeczy, bez konieczności usuwania danych z kolejki. Otrzymujesz również wiele opcji konfiguracyjnych, więc w zależności od przypadku użycia możesz dostosować go do swoich potrzeb. Oznacza to więcej pracy, ale bardziej zoptymalizowany serwis na drodze.

Podsumowanie

Jest to klasyczny kompromis szybkości rozwoju i łatwości rozwoju w porównaniu z najlepszym, bardzo modułowym i personalizowalnym rozwiązaniem, które ma więcej kosztów na pierwszą implementację, ale lepiej skaluje.

Porady Osobiste

Jeśli coś prototypujesz, faworyzuj szybkość rozwoju, więc narzędzia AWS. Jeśli twoje wymagania są zamrożone i wymagają znacznej skali, zdecydowanie poświęć czas na użycie Kafki. Ja też jestem Wielki wierzący w używanie-open-source-czyni-świat-lepszym, ale to nie jest największy argument do wykorzystania.

 18
Author: nichochar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 16:18:07