Hi Richard, Saying that “using Materializer” will cause leaks is somewhat of a weird phrasing, since that sounds just like “using ActorSystem can cause leaks” — well sure, just like “using objects can cause leaks” :-)
Let’s step back and analyse where your colleague’s statement came from, and perhaps how/why the misinterpretation happened. I see someone really enjoyed Colin’s awesome talk about streams and actors there :-) // Likely the best talk about those two and how they fit together I’ve seen by the way. // You may want to read his blog http://blog.colinbreck.com/integrating-akka-streams-and-akka-actors-part-ii/ In his talk he explains the lifecycle differences between creating an ActorMaterializer from an ActorSystem, vs. creating an ActorMaterializer from an ActorContext. Note that both are possible, since they are both ActorRefFactories. The ActorMaterializer’s lifecycle is bound to the ActorRefFactory that it was created from. In other words: 1) ActorMaterializer created from ActorSystem - will terminate all its streams if the ActorSystem terminates 2) ActorMaterializer created from ActorContext - will terminate all its streams if THAT actor terminates It’s not that one is a leak and the other one isn’t. It’s that the 1st case is good for long lived streams, and such that should out-live an Actor if it was started in one. Say, this is good for persistence query, or akka http, or some shared stream many other parts of your system rely on. The 2nd case is a good choice if the stream and actor are inherently related to one another - say, the stream relates to some “user”, and the actor that started that stream is also “the user”, so if the actor dies we should also kill the stream. Hope this clarifies things. I also submitted a documentation improvement about it right now, so please see here: https://github.com/akka/akka/pull/23836 -- Cheers, Konrad 'ktoso <http://kto.so>' Malawski Akka <http://akka.io/> @ Lightbend <http://lightbend.com/> On October 24, 2017 at 8:04:10, Richard Rodseth ([email protected]) wrote: I just heard from someone who attended a talk at Reactive Summit that you can leak resources if you are restarting a stream within a host actor, and not shutting down the materializer. I've written most of the stream creation logic and messages using Materializer, not ActorMaterializer, and I see that the shutdown method is only on ActorMaterializer. Easy enough to change my types, but I was curious if this was a considered decision. -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout. -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.
