Secor: A service persisting Kafka logs to S3, GCS and Azure Blob Storage
github.com
github.com
> it is guaranteed that each message will be saved in exactly one S3 file
This can get expensive. Specifically a 1-to-1 write per message with S3 (or any cloud storage provider) gets expensive very, very quickly. Further, when reading from cloud storage, you've got to read one message (object) at a time which adds up as well. I'm not talking about egress bandwidth either, I'm talking about S3 PUT/GET operations. I'd love to see some kind of batching operation that takes groups of messages (perhaps configurable time/size limits?) and writes them as a blog to cloud storage.
> it is guaranteed that each message will be saved in exactly one S3 file
What you read:
> it is guaranteed that each S3 file will contain exactly one message
I'd love to see a queuing infrastructure that consists of two parallel clusters, running on the same machines:
• a set of write nodes, which each "own" partitions on a topic (in the sense of being that partition's sole writer); where a write-node receives writes to its partition until it fills up a chunk, at which point it shoves the chunk into object storage;
• a set of read nodes, which serve reads and/or streaming subscription requests by 1. streaming archival data by retrieving chunks from object storage into a read-node-local MRU-on-disk-pressure cache; and then 2. once the read stream "catches up" to the end of the archival data, it would switch to proxying to the relevant write-node, which would serve the query/stream from its uncommitted chunk.
-----
I feel like this queue architecture would be useful for all sorts of things, at least for my own use-cases. Especially because it'd scale perfectly-well down to running one read-node and one write-node on one machine, while still being able to make durability guarantees about the committed data. (The durability of uncommitted data, I don't much need to worry much about, personally.)
Is there anything like this on the market?
I’ve written that.
Edit: kafka jira did not get far: https://issues.apache.org/jira/plugins/servlet/mobile#issue/...
It's still up in the air as to whether this feature will make its way into the open-source Kafka though.
https://docs.confluent.io/current/connect/kafka-connect-s3/i...
It also supports going to other cloud object stores (other than S3).
Just to be clear, there are dozens of Kafka Connect Sinks and Sources, and finding Kafka Connect Sinks for other blob storage solutions should be easy. If you can't the KC framework makes it pretty easy to develop your own.
> You can use this connector for a 30-day trial period without a license key.
Ugh, you're right...
At that point, might as well set up a Kafka Connect cluster with a Kafka Connect Sink, and dump to S3 yourself.
But you're right, no reason not to start with kinesis in the first place, especially with all the AWS options around it including Kinesis Analytics (Streaming "SQL"), Flink (supported by AWS now) or plain old EMR (Spark, Flink, etc...).
There is a lot of work that goes into maintaining your own Kafka ecosystem, even if you use Confluent, Lenses, etc...
Kinesis Firehose doesn't read from Kafka, we switched our code to publish to Kinesis instead.