1,748 karma · joined December 9, 2013
Disclaimer: I'm the author and former core contributor of NATS and NATS Streaming.
Re: consumer-offset checkpointing, this will be implemented in the form of consumer groups, similar to how Kafka works where a consumer group checkpoints its position in the log by writing it to the log itself.
I have yet to run into a use case where a graph provided more value than a relational model. I'm sure they exist, but I haven't found them yet.
First, branching/PRs are not automatically process-heavy. If it is for your company, there's probably something else wrong.
Second, this process—if done right—dramatically INCREASES code quality and DECREASES defects. This can be backed up with data. Code reviews, if they're not rubber stamps, are extremely valuable.
Third, the trunk-based model described in the article often leads to big-bang release branches. Master should be gold. This facilitates rapid and small releases, which directly impacts the business. This can also be backed up by data (e.g. see the Accelerate book).
Fourth, this model (again if done right), plays an instrumental role in compliance. The article doesn't even mention compliance, which is a HUGE thing bogging down a lot of companies trying to adopt DevOps practices right now. It has nothing to do with discipline or trust.
> we will focus on what it takes to build something like this using Kafka and NATS Streaming as case studies of sorts—Kafka because of its ubiquity, NATS Streaming because it’s something with which I have personal experience.
A proper comparison would need to include the forwarding device for ZeroMQ.
There is no persistence so consistency is irrelevant. NATS does everything in the name of availability to the point of dropping connections for slow consumers.
> * security - is there any authentication? authorization for certain resources? TLS?
TLS is planned, not sure on timeline. It sounds like Apcera has plans for some form of authentication and multitenancy as well.
> * guarantuees for delivery? Transactional modes?
At-most-once delivery. No transactions. There may be some form of more reliable delivery coming in the future, but I'm not sure of the details.
> * what does the wire protocol look like? Support for meta data?
Very simple text-based protocol. I don't think it's formally documented anywhere currently though.
We also have cases where we need many consumers reading a stream, so having that effectively limited to 5 concurrent consumers is a pretty tough limitation. Their solution to this is to just have consumers sleep on a failed poll, but that doesn't really help if you want to scale out your ingestion. You don't have that problem with Kafka.
The point is there are certain realities inherent in distributed systems which can’t be papered over, and those realities often manifest themselves at all levels in the stack. Sure, we can try to build abstractions which hide those problems, but they often leak or simply eschew the problems in dangerously subtle ways.
Frontend and UX folks need to understand what they are building on. They need to understand the potential pitfalls of these abstractions and why they are as such. Sometimes there is a good business case for apologizing, sometimes there’s not. These things are never black and white, but if everyone can understand how systems work, we can build better ones and make better choices.
Good one :)