# Circumventing the issue of mixing Futures and Actors required extra head scratching time

(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: lawrence@krubner.com

First, we made the mistake of making the persist function synchronized. This guaranteed that buffer-full-based invocations would not run concurrently with timeout-based invocations. However, because the stream digest and the persist functions did run concurrently and manipulated the buffer, we had to further synchronize those functions to each other!
In the end, we resorted to the Actor system as we had Akka in the module’s dependencies anyway, and it did the job. We just had to ensure that adding to the buffer and clearing the buffer were messages processed by the same Actor, and would never run concurrently. This is just fine, but to get there we needed to; learn the Actor System, teach it to the newcomers, import those dependencies, have Akka properly configured in the code and in the configuration files, etc. Furthermore, the stream came from a Kafka Consumer, and in our wrapper we needed to provide a digest function for each consumed message that ran in a Future. Circumventing the issue of mixing Futures and Actors required extra head scratching time.