A dull, resilient stream processor in Go
github.com
github.com
It doesn't provide any tools for idempotent calculations yet, just at-least-once delivery guarantees. But when you use it as a framework you get the benefit of all the configurable processors in your new service.
Now that is how you advertise at me. I've seen more "minimal flexible generic configurable simple performant powerful easy extensible non-bloated" libraries than I can shake a stick at. But "this helps with the dull stuff"... that's a sales pitch I can get behind!
(A constructive hint to those describing their libraries: At this point, use of pretty much any of those words in your summary sentence is a massive negative to me. They are of null content, and you just burned the most valuable marketing space you had on these null-content words. Everybody says that about their libraries. Tell me what it does in the summary. If you really want to make the point for one of those words, do it later in the documentation, because if your summary sounds like you copy/pasted my quoted bit above, I'm not even going to read your extended documentation. And when you do, provide evidence; if you're "performant", show me competitive benchmarks. I get that they're going to be biased, but it at least shows me what's important. If you're "simple" show me in the sample code. Etc.)
These words aren't descriptors, they don't explain anything or give any further context about the nature of a library.
As someone who is getting into Golang quite a bit I found it very interesting to peer into the thought process that led to Benthos and how it was/is implemented.
* https://kafka.apache.org/documentation/streams/ - Kafka Streams (and its KTable)
* https://flink.apache.org/ - Flink
* https://spark.apache.org/streaming/ - Spark Streaming
* https://github.com/asavinov/bistro - Bistro Streams
The focus of Benthod seems to be performance and resilience (implemented without persistence).
* https://github.com/wallaroolabs/wallaroo - Wallaroo
I gave a quick intro to nsq talk at our local go meetup recently. If you haven't used NSQ before I highly recommend giving it a try.
https://docs.google.com/presentation/d/1e9yIm-0aNba_H1gX_u7D...
I'm in the process of rejigging our live telemetry pipeline (dealing with petabytes) to improve flexibility and resiliency and have been looking for something to replace our similar systems that have grown organically. This fits the bill exactly; it's designed exactly how I imagined our new system should look.
I'm wondering if HN has their personal favorite for these sorts of problems.
We have 100's of tenants, each of which could get their own stream with some delivery guarantees set. If one tenant's endpoint is down or another tenant fills the stream with 1M messages, it should not affect delivery rates of other tenants. Seems to fit the bill.
I see the HTTP output mentions some retries, but I guess these run as part of the delivery step, blocking this goroutine as opposed to rescheduling the message? Sometimes it takes hours for clients to restore their receiving systems and it would be great if messages for past N hours would still be delivered..
https://phoenixframework.org/blog/the-road-to-2-million-webs...
Streams mode lets you run as many isolated stream pipelines as you want in the same process, which in your case could be a simple queue -> webhook bridge. You can manage these pipelines either statically in config files, or dynamically through a REST API.
Thank you for making your work available!
My main focus has been providing general purpose stateless processors. So you can build a your own stream processor focusing on what makes it unique, and then the moment it's compiled and packaged it can read and write to anything, and convert any kind of payload to anything else just through configuration.
I'm curious, does Benthos manage state for the user/application like we do in Wallaroo or is it purely stateless computations at this point?
It would be a nice stretch goal to have standard tooling within Benthos to share distributed state, perhaps with some ability to do exactly-once processing, but that's not the focus of the project right now.