<div dir="ltr"><div>> On Sat, Jun 18, 2016 at 3:54 AM, John Smith <<a href="mailto:4crzen62cwqszy68g7al@gmail.com">4crzen62cwqszy68g7al@gmail.com</a>> wrote:</div><div><br></div><div>> For one of my systems in the financial area, I am in need of a</div><div>> disk-backed log that I could use as a backend for an Event</div><div>> Sourcing/CQRS store. Recently, I have read a bit about Kafka [1] and</div><div>> it seems like a good fit but, unfortunately, it is on JVM (written</div><div>> in Scala, to be exact) and depends heavily on ZooKeeper [2] for</div><div>> distribution, while I would prefer something similar for an Erlang</div><div>> ecosystem. [...]</div><div><br></div><div>Howdy.  I'd started working on a project quite similar to what you</div><div>described, when I was at Basho Japan.  That project has been cancelled</div><div>and the Basho Japan development office closed, but the source still</div><div>exists in a GitHub repo at <a href="https://github.com/basho/machi">https://github.com/basho/machi</a> with an</div><div>APLv2 license.  The current state of the 'master' branch is messy,</div><div>since the cancellation came during three different refactorings that</div><div>never were fully finished & merged.  But IIRC it works and is likely</div><div>correct, most of the time.  ^_^</div><div><br></div><div>The master branch does have a dependency on eleveldb which depends on</div><div>the C++ code in the LevelDB fork that Basho uses for eleveldb.  If</div><div>that's a dealbreaker, just go backward in the repo's history a few</div><div>months more to find the eleveldb-free version.</div><div><br></div><div>The low-level API is UNIX'ish & Kafka'ish.  It does not have the</div><div>higher-level abstraction of the key-value store that you want.  But</div><div>it's easy to build that on top of a strictly ordered log.</div><div><br></div><div>> In other words, I would like to create something like a *Minimum</div><div>> Viable Log* (in Kafka style), only in Erlang/Elixir.</div><div><br></div><div>Heh, defining "MVL" is tricky.  A non-distributed version is pretty</div><div>easy.  (As Kafka devs discovered early on.)  A distributed version</div><div>that doesn't reorder log entries and doesn't lose log entries is not</div><div>easy.  (As most distributed systems devs tends to discover.  ^_^)</div><div><br></div><div><div>If the Machi code doesn't suit you, I wouldn't be surprised.  However,</div><div>the design papers in the 'doc' directory (look for the PDF files) can</div><div>give you a lot of background for why Machi was designed the way it is.</div><div>If that rationale fits your "MVL", then I'm glad the docs & code are</div><div>helpful.</div></div><div><br></div><div>-Scott</div><div><br></div></div>