I see some differences, instead of Pulsar functions RedPanda has gone the extra step of using WASM, suspect the Pulsar community will end up going this direction as the whole community begins this push forward.
Got rid of Zookeeper, I've never truly understood the hatred toward Zookeeper aside from the viewpoint of it being one more external dependency the project requires.
Compatible Kafka API, this is a smart business choice to grab up any business using Kafka that is unhappy with the operational costs of Kafka and want to move off. Pulsar has a connector for Kafka which lets a business leave their existing work entirely untouched and stream to the new source taking the strangler pattern approach. The problem with compatible API is still the fact you need to touch the running system to point over from Kafka to RedPanda and then it opens the cans of worms on how to handle aborting RedPanda roll out and switching back to Kafka without losing data. Business now needs to modify all their existing code where Kafka is producing to also now write to RedPanda.
The other option I see is just the same which is RedPanda has a connector to Kafka and only streams off the existing Kafka which kind of makes the API compatible IMO pointless aside from marketing & sales standpoint with customers.
This is exactly the point. One more dependency, one more executable. Redpanda get rid of that.
Doesn't this just internalize the dependency within the project itself? Isn't Redpanda taking on all the effort that Zookeeper has been doing for years, all the edge cases, all the additional support and now the coupling of it within the very project itself?
We spend a ton of time ensuring it's correctness
That is our essential complexity. If you are trying to replicate data to machines, you need to replicate data to machines. We chose raft as the only way. In essence we are much simpler than upstream w.r.t protocols for data replication.
I have not experience this issue. I run a 5 pod ZK in K8s with each pod's memory: 256Mi & cpu: 0.1 for a couple hundred thousand messages a second with Pulsar.
I think 1.5 Gi and half a core for handling quorum & metadata locking for a stream storage isn't exactly what I would consider overhead. It isn't like deleting ZK tomorrow will not mean that Redpanda doesn't take on the additional resources itself.
I've never managed any of these, but I know that both ZK and Kafka have a reputation for being operationally complex. I've read comments by other people on HN about Pulsar being complex, too.
I'm optimistic about Pulsar becoming a widely deployed tool once they can get rid of the ZK dependency. In particular since Pulsar seems quite friendly to non-Java languages, while BK requires Java on the client and does not, and will not ever, support other languages.
(1) Over at the Apache Arrow FAQ I read that the overhead of serialization in analytical frameworks can be around 80 to 90 % of total compute costs (r_1). While having no concrete numbers on this, from using Kafka together with Kafka Streams I can at least confirm that the overhead of serialization is (very) significant. My question therefore is: Does your WASM engine avoid (de-)serialization between your storage/stream layer and the engine and if not are there plans for this?
(2) Are supported WASM transformations stateless (i.e. single message) only or can they be stateful (i.e. window-ing and stream-stream/table join functionality)
(3) I could not find any reference to the WASM inline lambdas at all in the docs actually, am I missing something?
(1) arrow is great! currently, it does not, but yes it will when we move out of nodejs impl into our own v8 isolates inside an alien thread (seastar concept)
(2) stateful but only for a single partition
(3) will be released in the next week or so. If you look in the github repo you can look into `coproc`
Though the explanation went a bit over my head just one (two) follow up question(s): How did you end up with WASM for the inline lambdas? Did you have some discussion on alternatives like Lua? I am curious about insights on choosing scripting engines/implementations, hence why I am asking.
A different question for this could also be if alternatives to V8 where considered I guess as I believe there are quite a few pure WASM engine implementations out there (unless I did not get some feature that requires you to use V8 and rules out pure WASM engines).
2) I like Lua a lot. Such a good tool. It just didn't have the target compatibilities of wasm + the security guarantees of wasm
Afaik, there are just a couple vms with superb performance. V8 and anotherone targeting x86 only. We want to support the AWS graviton instances, so only one choice
I was a bit surprised to see the announcement about making Redpanda open source (although very interesting for poking around!).
Question: are you, as a company (Vectorized) pursuing the same business model as the Confluent one?
OSS Kafka, but paid official support, cloud, connectors and registry?
I think there is a big shift when you have a single binary. i.e.: no one really complains from running ngix, etc because it's easy to get up and running.
so the gist we wanted to let everyone use it and reserve the right to be the only hosted redpanda provider.
It seems totally fair to me. Good luck with this approach. I think yours odds are good.
i.e.: think GDPR compliance as long as your data streams are in JSON or some predefined format.
WASM basically allows us to push computational guarantees to the storage engine itself without a separate cluster.
I've failed to grasp if it's an "alternative plugin-engine" kind of system to extend Redpanda, or you're storing data as WASM and therefore it's executable (to take your example: GDPR compliant auto-expire if it's past a certain date).
1. You can't just take this and make money from it
2. They don't accept or expect external inputs.
Its the same as cockroachdb in that regard
If you have any questions or think your use may be confusing please reach out to us.
This is simply not true. The restriction applies to 100% of everyone using the software under the license.
If an alternative service provider can't legally host the service for me, I am restricted from selecting an alternative vendor if my needs converge from the available vendors offerings.
Further, it still isn't open source.
Looks like the project is mostly written in C++ and Go. What was the reason for this choice? Have you considered other languages, like Rust, Zig or similar instead of C++? TBH not sure what an alternative to Go would be, maybe JVM AOT-compiled with NativeImage (but AFAIK that's still experimental).
Did Go's GC and/or C++'s lack of GC help/impede the project? IMO memory management is one of the main differences between languages... the other is concurrency / memory model / undefined behavior, where JVM is significantly ahead of the rest (no undefined behavior), I'm not sure exactly where Go stands (there seems to be a memory model, but no mention of undefined behavior or lack thereof).
Sure thing. I basically was playing with an RPC framework to make my old company project fast in 2017 see github.com/smfrpc/smf
I wanted to play with dpdk then.
When I started this in 2019 I wanted to use a framework that was battle tested, so seastar.io fit the bill.
There is also a big part of it that I had been professionally programming in c++ for many many years.
Last, this evolved from a prototype on my laptop in miami to company.
I think rust would he am excellent choice as well and I bet we'll write a bunch of rust in the not too distant future.
As a satisfied Scylla convert, I'm looking forward to trying Redpanda.
Main departure is we are only API compatible. It was an explicit choice to use Raft vs ISR and to not use ZK, etc.
but indeed, seastar is a really fun framework to build storage systems in. I know ceph is also doing a re-write of a subsystem in seastar for example.
there is no substitute to testing tho
there are 2 levels here. 1) raft has a proof (and a great phd dissertation from diego), but what matters is if we actually implemented it correctly. so 2) is we need to continuously test it. Denis did a lot of similar work at CosmosDB (microsoft) and has spent his career working on consensus.
Hopefully these eases some concerns.
I'm asking partly because we must be able to offer closed on-prem installations as well as SaaS on a cloud. I'm looking for a low-ops component that will not fail me (as often as alternatives would) :)
I'd be interested in the write amplification since you went pretty low level in your IO layer. How do you guarantee atomic writes when virtually no disk provides guarantees other than on a page level which could result in destroying already written data if a write to the same page fails - at least in theory - and so one has to resort to writing data multiple times.
Seems like a lot of questions on here are just: how much better is the performance and why?, so maybe showing is better than telling.
Best of luck!
Though what is to me more interesting, is what happens when you inject failures while the benchmarks are running.
I'm a big fan of kafka as an abstract building block, but not so much the actual implementation, which is as painful to setup as a consultancy-based business model might make you suspect it would be, especially if you need reliability. The other problem is that performance kind of sucks, apart from potential latency spikes due to GC pauses I found even the average latencies for reliable end to end (in a fast local network and on decent sized hardware) not in right order of magnitude ballpark.
-Redpanda (free) - comparable features to Kafka, no limits
-Redpanda Enterprise (paid) - Additional features (security, WASM, tiered storage, support etc)
-Vectorized cloud (Free and paid tiers) - Hosted in AWS+ GCP
In general it probably best to run with:
--smp <n> --overprovisioned
for a container with <n> CPUs.
These are standard Seastar flags.
we also have a container image `vectorized/redpanda:latest`
I think people LOVE the kafka _api_ but they have a hard time operating clusters at scale. So we decided to keep the same API but solve the problem of operational complexity.
That is very true, and this is what you should emphasise. Wish you the best of luck!
The actual speed of Kafka has rarely been a concern (but huge numbers of partitions are, which makes rebalancing a pain) in my experience, in fact it was mostly overkill. But operational complexity was definitely an issue!
Without scrolling, all the text thats displayed is this:
A Kafka® API compatible streaming platform for mission-critical workloads.
Try Redpanda today"
It tells me what it is, which is good. It does not tell me why it is better, for that I have to scroll. Kafka is already suited for mission-critical workloads, so that is not a unique value proposition. Maybe:
"Redpanda - 100% Kafka API compatible, but without the headaches. Forget Zookeeper, forget rebalancing issues. Instead, enjoy reliable message delivery, 10x faster speed and ultra-low latencies due to our thread-per-core architecture."
Something like that, plus a visible "call to action" button, maybe "try it out" or "download".
Could also think about a pretty graph comparing latencies or smth. People love pretty graphs.
In some cases, the performance, efficiency, and reliability gains from caching and consolidation make sense.
But, I’ve seen enough poor architectural decisions and lack of architectural oversight result in use of various log streaming, cloud messenging, app monitoring, object DBs, etc., all discounting the request overhead in time and traffic, points of failure, and overall complexity for some false sense of scalability enough to where things that seemed cool ten years ago make me physically sick now.
What are some questions to use to help determine whether Kafka/RedPanda actually make sense to use, without having to first baseline, then implement, then compare request time, reliability, and data freshness to gauge whether it was worth it?
BTW- I think there are valid cases for using it and appreciate all of the work!
If you use transactions, we don't support it yet. We are in active development here.
Notice that folks love speed but the operational simplicity of having one binary/fault domain makes a lot of our enterprise users use the tech.
Last is if you like the product direction which is to my knowledge fundamentally different from the other engines out there. WASM in particular solves around 60% of all streaming work we see in the wild. It is effectively good at one shot transformations (gdpr, simple enriching, simple connection to downstream system like elastic, etc) as well as tiered storage.
Think the idea was to build something as easy as nginx - apt-get install redpanda and et voila
I hope to continue to focus on the developer experience.
It'd be great to know where do the improvements came from.
Is it from a different architectural design, is it from better exploitation of new hardware, is it from JVM limitations? For example, when Valhalla and Loom land in the JDK, how much of this improvement will stay?
Skimming the repository it doesn't seem to be an unreasonable claim. C++ with Seastar compared to Scala on JVM. It's in line with the Scylla/Cassandra improvements.
The throughput is 4x, the latency is 10x.
The reads are more complex since it involves understanding io priority scheduling etc
You ack writes before they're written?
On the other hand, the storage device can fail so what does it even mean to have written the data? :)
No use of page cache instead custom built read ahead and write behind strategy
Io scheduling groups from seastar
Custom intra cluster RPC to optimize for fragmented buffers native support (most storage work is small materialized metadata and large blob)
Thread per core design with zero locks on the hotpath
If you watch our chat with the LinkedIn kafka team, you will learn a bit more too
Hopefully this helps
Custom strategies for reading and writing have a huge impact. (orders of magnitude for specific workloads rather than generic page cache scheduling)
Optimizing for fragmented buffers. Etc. See the LinkedIn vid from the blog posts for more low level deets.
I've been waiting for a long time for someone to think outside the JVM, and I really hope this is a growing trend. The "big data" industry has seemingly been joined at the hip with Java ever since Hadoop came onto the scene, and the Apache community in particular has a lot of apps that are deeply unfriendly to non-Java apps. For example, you can't use Apache BookKeeper from a non-Java app.
Would you say Redpanda is ready for production use?
We hope to announce our early product partnerships in the coming months. Big Corporate law is incredibly slow.... you have no idea. haha.
Here is a post on building a dummy key-value db to test jepsen https://vectorized.io/validating-consistency/
One question: I assume RedPanda using raft to replicate the topic content not just metadata. Is that correct? If so, how does it perform better compared to Kafka’s ISR? Since raft might be slow for this kind of workload. If I remember correctly, Liftbridge was using raft for log replication and switched away from that because of the performance problems.
To quote my colleague Denis -
The results fit the theory. Raft’s (and Redpanda’s) performance is proportional to the best of the majority of nodes, while sync replication (Kafka) works only as well as its worst-performing node.
AFAIK we can push the limits of hardware on throughput.
The gist is that I'd need more details exactly on what you mean raft is slow.
We support the same level of acks as kafka except acks=-1 is much stronger gurantees due to the log completeness guarantee of raft.
for 0 and 1 we short circuit the raft acknowledgement and return to the client to match the exepectations of acknowledgements come to be known by users.
There should be no perf penalty vis-a-vis kafka in any setting I can think of. If it is, is probably a bug on our side.
Are you hoping to achieve no-downtime leader kills by going with the latest Paxos improvements, as you mention at the end?
First we need to finish multi partition transactions that we don't yet support.
We need to balance eager cluster balancing based on saturation (network, cpu, disk, etc) with other performance improvements.
As is the cluster achieves steady state in a couple of seconds for affected partitions and clients in Kafka retry.
We just give you optimal prod settings for saturating boxes.
See rpk container
the entire eng team is there.
Are the tail latencies critical though? Messages are expected to be async and delivery latency usually are not hyper critical.