Hi all,

Ali, I share your opinion concerning Heka's strengths. I also think that
Heka stands out because of the flexibility of its filters. There are few to
none lightweight data collectors/shippers that allow to process events with
that many decoders/filters/encoders, with the possibility of chaining them.
The numerous filtering possibilities was what made us use Heka.

Concerning the alternative to Heka, i.e elastic's Beats: there is obviously
a lack of outputs. However things might take a turn and you should look
(might even participate) at this recent ticket about having
community-maintained outputs:
https://github.com/elastic/beats/pull/1681

Vincent

On 2 June 2016 at 22:22, Ali <h...@alijnabavi.info> wrote:

> Thanks, Rob!
>
> I have to say, I'm EXTREMELY DISAPPOINTED to hear this.
>
> I have been away from Heka for a while (working on other projects at work)
> and am now able to refocus on designing our new data
> collection/analysis/reporting system.  Once I read this e-mail, I started
> looking around to see what else was out there and what has changed over the
> last several months.  Elastic's Beats
> <https://www.elastic.co/products/beats> project, particularly Filebeat
> <https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html>,
> seemed like a really interesting and welcome development.  However,
> compared to the flexibility of Heka's ins and outs, Filebeats seems to be
> wanting badly.
>
> Suffice it to say, Heka still seems to stand alone in this space.  Its
> flexibility is amazing.  (Again, mostly talking about inputs and outputs
> here.)  The closest I can come to it is nxlog
> <http://nxlog-ce.sourceforge.net/about>, and I just really dislike that
> it's not more transparent and open-source.
>
> Anyway, I understand the rationale behind this decision and am hopeful
> that another org will continue work on this project.  Thanks for all of
> your efforts, Rob et al!
>
> -Ali
>
> P.S.  If anyone's interested, here's my situation right now:
> https://www.reddit.com/r/bigdata/comments/4m81vo/which_log_collectors_to_use_for_robust_handling/
>  and
> https://discuss.elastic.co/t/how-can-i-get-data-from-filebeat-to-flume/51734
>
>
> On Fri, May 6, 2016 at 12:51 PM Rob Miller <rmil...@mozilla.com> wrote:
>
>> Hi everyone,
>>
>> I'm loooong overdue in sending out an update about the current state of
>> and plans for Heka. Unfortunately, what I have to share here will
>> probably be disappointing for many of you, and it might impact whether
>> or not you want to continue using it, as all signs point to Heka getting
>> less support and fewer updates moving forward.
>>
>> The short version is that Heka has some design flaws that make it hard
>> to incrementally improve it enough to meet the high throughput and
>> reliability goals that we were hoping to achieve. While it would be
>> possible to do a major overhaul of the code to resolve most of these
>> issues, I don't have the personal bandwidth to do that work, since most
>> of my time is consumed working on Mozilla's immediate data processing
>> needs rather than general purpose tools these days. Hindsight
>> (https://github.com/trink/hindsight), built around the same Lua sandbox
>> technology as Heka, doesn't have these issues, and internally we're
>> using it more and more instead of Heka, so there's no organizational
>> imperative for me (or anyone else) to spend the time required to
>> overhaul the Go code base.
>>
>> Heka is still in use here, though, especially on our edge nodes, so it
>> will see a bit more improvement and at least a couple more releases.
>> Most notably, it's on my list to switch to using the most recent Lua
>> sandbox code, which will move most of the protobuf processing to custom
>> C code, and will likely improve performance as well as remove a lot of
>> the problematic cgo code, which is what's currently keeping us from
>> being able to upgrade to a recent Go version.
>>
>> Beyond that, however, Heka's future is uncertain. The code that's there
>> will still work, of course, but I may not be doing any further
>> improvements, and my ability to keep up with support requests and PRs,
>> already on the decline, will likely continue to wane.
>>
>> So what are the options? If you're using a significant amount of Lua
>> based functionality, you might consider transitioning to Hindsight. Any
>> Lua code that works in Heka will work in Hindsight. Hindsight is a much
>> leaner and more solid foundation. Hindsight has far fewer i/o plugins
>> than Heka, though, so for many it won't be a simple transition.
>>
>> Also, if there's someone out there (an organization, most likely) that
>> has a strong interest in keeping Heka's codebase alive, through funding
>> or coding contributions, I'd be happy to support that endeavor. Some
>> restrictions apply, however; the work that needs to be done to improve
>> Heka's foundation is not beginner level work, and my time to help is
>> very limited, so I'm only willing to support folks who demonstrate that
>> they are up to the task. Please contact me off-list if you or your
>> organization is interested.
>>
>> Anyone casually following along can probably stop reading here. Those of
>> you interested in the gory details can read on to hear more about what
>> the issues are and how they might be resolved.
>>
>> First, I'll say that I think there's a lot that Heka got right. The
>> basic composition of the pipeline (input -> split -> decode -> route ->
>> process -> encode -> output) seems to hit a sweet spot for composability
>> and reuse. The Lua sandbox, and especially the use of LPEG for text
>> parsing and transformation, has proven to be extremely efficient and
>> powerful; it's the most important and valuable part of the Heka stack.
>> The routing infrastructure is efficient and solid. And, perhaps most
>> importantly, Heka is useful; there are a lot of you out there using it
>> to get work done.
>>
>> There was one fundamental mistake made, however, which is that we
>> shouldn't have used channels. There are many competing opinions about Go
>> channels. I'm not going to get in to whether or not they're *ever* a
>> good idea, but I will say unequivocally that their use as the means of
>> pushing messages through the Heka pipeline was a mistake, for a number
>> of reasons.
>>
>> First, they don't perform well enough. While Heka performs many tasks
>> faster than some other popular tools, we've consistently hit a
>> throughput ceiling thanks to all of the synchronization that channels
>> require. And this ceiling, sadly, is generally lower than is acceptable
>> for the amount of data that we at Mozilla want to push through our
>> aggregators single system.
>>
>> Second, they make it very hard to prevent message loss. If unbuffered
>> channels are used everywhere, performance plummets unacceptably due to
>> context-switching costs. But using buffered channels means that many
>> messages are in flight at a time, most of which are sitting in channels
>> waiting to be processed. Keeping track of which messages have made it
>> all the way through the pipeline requires complicated coordination
>> between chunks of code that are conceptually quite far away from each
>> other.
>>
>> Third, the buffered channels mean that Heka consumes much more RAM than
>> would be otherwise needed, since we have to pre-allocate a pool of
>> messages. If the pool size is too small, then Heka becomes susceptible
>> to deadlocks, with all of the available packs sitting in channel queues,
>> unable to be processed because some plugin is blocked on waiting for an
>> available pack. But cranking up the pool size causes Heka to use more
>> memory, even when it's idle.
>>
>> Hindsight avoids all of these problems by using disk queues instead of
>> RAM buffers between all of the processing stages. It's a bit
>> counterintuitive, but at high throughput performance is actually better
>> than with RAM buffers, because a) there's no need for synchronization
>> locks and b) the data is typically read quickly enough after it's
>> written that it stays in the disk cache.
>>
>> There's much less chance of message loss, because every plugin is
>> holding on to only one message in memory at a time, while using a
>> written-to-disk cursor file to track the current position in the disk
>> buffer. If the plug is pulled mid-process, some messages that were
>> already processed might be processed again, but nothing will be lost,
>> and there's no need for complex coordination between different stages of
>> the pipeline.
>>
>> Finally, there's no need for a pool of messages. Each plugin is holding
>> some small number of packs (possibly as few as one) in its own memory
>> space, and those packs never escape that plugin's ownership. RAM usage
>> doesn't grow, and pool exhaustion related deadlocks are a thing of the
>> past.
>>
>> For Heka to have a viable future, it would basically need to be updated
>> to work almost exactly like Hindsight. First, all of the APIs would need
>> to be changed to no longer refer to channels. (The fact that we exposed
>> channels to the APIs is another mistake we made... it's now generally
>> frowned upon in Go land to expose channels as part of your public APIs.)
>> There's already a non-channel based API for filters and outputs, but
>> most of the plugins haven't yet been updated to use the new API, which
>> would need to happen.
>>
>> Then the hard work would start; a major overhaul of Heka's internals, to
>> switch from channel based message passing to disk queue based message
>> passing. The work that's been done to support disk buffering for filters
>> and outputs is useful, but not quite enough, because it's not scalable
>> for each plugin to have its own queue; the number of open file
>> descriptors would grow very quickly. Instead it would need to work like
>> Hindsight, where there's one queue that all of the inputs write to, and
>> another that filters write to. Each plugin reads through its specified
>> input queue, looking for messages that match its message matcher,
>> writing its location in the queue back to the shared cursors file.
>>
>> There would also be some complexity in reconciling Heka's breakdown of
>> the input stage into input/splitter/decoder with Hindsight's
>> encapsulation of all of these stages into a single sandbox.
>>
>> Ultimately I think this would be at least 2-3 months full time work for
>> me. I'm not the fastest coder around, but I know where the bodies are
>> buried, so I'd guess it would take anyone else at least as long,
>> possibly longer if they're not already familiar with how everything is
>> put together.
>>
>> And that's about it. If you've gotten this far, thanks for reading.
>> Also, thanks to everyone who's contributed to Heka in any way, be it by
>> code, doc fixes, bug reports, or even just appreciation. I'm sorry for
>> those of you using it regularly that there's not a more stable future.
>>
>> Regards,
>>
>> -r
>> _______________________________________________
>> Heka mailing list
>> Heka@mozilla.org
>> https://mail.mozilla.org/listinfo/heka
>>
>
> _______________________________________________
> Heka mailing list
> Heka@mozilla.org
> https://mail.mozilla.org/listinfo/heka
>
>
_______________________________________________
Heka mailing list
Heka@mozilla.org
https://mail.mozilla.org/listinfo/heka

Reply via email to