2016-03-29 13 views
9

Przenoszę mój projekt z RabbitMQ do Kafki i próbuję zrozumieć, jak szybko będzie reagować na kafka.Jak poprawić powolne działanie reaktywnego kafka (Scala plus strumienie Akka)?

Obecnie jestem w stanie napisać około 12K/sek banalnych wiadomości na sekundę do Rabbit, a po przeczytaniu zrobić trywialne pull z kolejki przez strumień "hello world" z prędkością około 4K/sek.

Przeprowadziłem się do Kafki z reaktywnymi strumieniami Mogę napisać może 1M/s - ogromna wygrana! Ale w tym samym środowisku, mogę tylko płynąć o 2K/sek przez strumień na odczycie z wykorzystaniem podejścia w przykładach tutaj: DummyConsumer.scala

Czy ktoś zna jakieś wskazówki dla jak mogę uzyskać odczytać z powrotem do poziomów porównywalnych do podejścia Królika?

Interesujące: Właśnie wypróbowałem to "bezpośrednio" (dostęp do Kafki przez surowe sterowniki Java vs reactive-kafka) i mam około 22K czyta, więc to całkiem nieźle. Szumuje mi coś o tym, jak używam reaktywnego kafka, spowalnia to wszystko.

Ok ... Poluję na to. Następny Próbowałem surowy strumień Akka "Hello World":

now = System.currentTimeMillis() 
count = 0 
val in2 = Source(1 to num) 
val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit b => 
    import GraphDSL.Implicits._ 
    val show = Flow[Int].map{ i => count +=1; if(count==num) println(s"time 2 ($count): "+(System.currentTimeMillis() - now)); i } 
    in2 ~> show ~> Sink.ignore 
    ClosedShape 
}) 
g.run() 
Thread.sleep(2000) 

ten prowadził w bardzo szybkim 742K/s! Tak więc Kafka Raw jest szybki, a strumienie Akka są szybkie. Więc sprawca jest gdzieś w tym, jak reaktywny kafka jest zbudowany (lub bardziej prawdopodobnie) jak próbuję go użyć. Rozważając tarcie, powinienem spodziewać się czegoś zbliżonego do surowej kafki 22K/sek. Hmm.

+0

Witaj, Greg, reaktywny kafejka developer tutaj. Kończymy reaktywną kafkę 0.11, która powinna dać ci znacznie więcej przyzwoitej wydajności. Jednak starsza wersja powinna być bardziej wydajna niż zaledwie 2K/s. Czy nadal masz swój kod? Chciałbym zobaczyć, jak korzystasz z reaktywnego kafka. – kciesielski

+0

Niestety nie mam już tego kodu. Zasadniczo robiłem cut'n paste z przykładowego kodu w dokumentach ... nic nadzwyczajnego. Przesunąłem i opracowałem projekt LateKafka (w github), aby stworzyć źródło dla strumieni Akka. Jest naprawdę szybki - wyciągałem 6-cio figurowy transakcje za sekundę kafka-thru-stream dla trywialnego strumienia. Ekscytujące wiadomości o 0.11. Fajnie będzie wypróbować to. – Greg

+0

Witam Jacek, właśnie przebudowałem mój test z nowym wydaniem 0.11. Jest znacznie szybszy niż seria M, ale nadal nie jestem w stanie odtworzyć wysokich liczb, które pokazali inni.Uwaga Po prostu próbuję uzyskać pewną wydajność - mój prawdziwy przypadek użycia używa strumieni DSL, który nie jest pokazany w dokumentach. Opublikowałem kod tutaj w innym pytaniu: http://stackoverflow.com/questions/39617827/why-dont-i-see-high-performance-w-reactive-kafka-0-11-release – Greg

Odpowiedz

0

Nie pełnej odpowiedzi, ale spróbuj jeszcze raz, ale niedawne (wrzesień 2016) Akka Streams Kafka 0.11

Istnieją znaczne ulepszenia wydajności. Zrobiliśmy kilka testów porównawczych i chociaż wciąż jest trochę narzut z opakowania reaktywnego kafka (pamiętaj jednak, że dostaniesz też coś w zamian: np. Wszystkie korzyści płynące z przyjemnego API z asynchronicznym przeciwciśnieniem!), ogólne liczby wyglądają bardzo dobrze i są coraz lepsze.

Oto kilka typowych scenariuszy użytkowania Kafka, porównując stare reaktywną-Kafka wersję (M4), aktualną wersję (0,11) i równoważne funkcje zaimplementowane przy użyciu zwykłego Kafka Producers/Consumers (nie biorąc pod uwagę, oczywiście , łącząc się z dowolnymi innymi składnikami reaktywnymi).

http://blog.akka.io/assets/kafka-bench1.png

Zobacz więcej w "Benchmarking akka-stream-kafka" z Krzysiek Ciesielski.

+0

Uwaga: wysłałem odpowiedź przed przeczytaniem komentarzy;) – VonC

+0

Mam problem z nową biblioteką. Kod ran, jak w tym tekście: https://gist.github.com/gzoller/8847556ab1347b886d80cf53c3a1e867 Spowodowało to kilka błędów "martwej litery", próbujących użyć porcji z dokumentacji. Próbowałem także wariant, w którym tylko zatwierdzam głowy każdej partii (tj. Ostatnie przesunięcie). Nie spowodowało to błędów martwego pisma, ale także nie spowodowało czystego zestawu przesunięć stref. – Greg

+0

@Greg Strange. Możesz zadać nowe pytanie na podstawie tego przykładu, aby sprawdzić, czy prawdziwy ekspert Akka Streams Kafka może dzwonić. – VonC