Hey all, I want to start by saying that I'm absolutely thrilled to be a part of this community. The amount of level-headed, thoughtful, educated discussion that's gone on over the past ~10 days is overwhelming. Wonderful.
It seems like discussion is waning a bit, and we've reached some conclusions. There are several key emails in this threat, which I want to call out: 1. Jakob's summary of the three potential ways forward. http://mail-archives.apache.org/mod_mbox/samza-dev/201507.mbox/%3CCADiKvVu-hxdBfyQ4qm3LDC55cUQbPdmbe4zGzTOOatYF1Pz43A%40mail.gmail.com%3E 2. Julian's call out that we should be focusing on community over code. http://mail-archives.apache.org/mod_mbox/samza-dev/201507.mbox/%3CCAPSgeESZ_7bVFbwN%2Bzqi5MH%3D4CWu9MZUSanKg0-1woMqt55Fvg%40mail.gmail.com%3E 3. Martin's summary about the benefits of merging communities. http://mail-archives.apache.org/mod_mbox/samza-dev/201507.mbox/%3CBFB866B6-D9D8-4578-93C0-FFAEB1DF00FC%40kleppmann.com%3E 4. Jakob's comments about the distinction between community and code paths. http://mail-archives.apache.org/mod_mbox/samza-dev/201507.mbox/%3CCADiKvVtWPjHLLDsmxvz9KggVA5DfBi-nUvfqB6QdA-du%2B_a9Ng%40mail.gmail.com%3E I agree with the comments on all of these emails. I think Martin's summary of his position aligns very closely with my own. To that end, I think we should get concrete about what the proposal is, and call a vote on it. Given that Jay, Martin, and I seem to be aligning fairly closely, I think we should start with: 1. [community] Make Samza a subproject of Kafka. 2. [community] Make all Samza PMC/committers committers of the subproject. 3. [community] Migrate Samza's website/documentation into Kafka's. 4. [code] Have the Samza community and the Kafka community start a from-scratch reboot together in the new Kafka subproject. We can borrow/copy & paste significant chunks of code from Samza's code base. 5. [code] The subproject would intentionally eliminate support for both other streaming systems and all deployment systems. 6. [code] Attempt to provide a bridge from our SystemConsumer to KIP-26 (copy cat) 7. [code] Attempt to provide a bridge from the new subproject's processor interface to our legacy StreamTask interface. 8. [code/community] Sunset Samza as a TLP when we have a working Kafka subproject that has a fault-tolerant container with state management. It's likely that (6) and (7) won't be fully drop-in. Still, the closer we can get, the better it's going to be for our existing community. One thing that I didn't touch on with (2) is whether any Samza PMC members should be rolled into Kafka PMC membership as well (though, Jay and Jakob are already PMC members on both). I think that Samza's community deserves a voice on the PMC, so I'd propose that we roll at least a few PMC members into the Kafka PMC, but I don't have a strong framework for which people to pick. Before (8), I think that Samza's TLP can continue to commit bug fixes and patches as it sees fit, provided that we openly communicate that we won't necessarily migrate new features to the new subproject, and that the TLP will be shut down after the migration to the Kafka subproject occurs. Jakob, I could use your guidance here about about how to achieve this from an Apache process perspective (sorry). * Should I just call a vote on this proposal? * Should it happen on dev or private? * Do committers have binding votes, or just PMC? Having trouble finding much detail on the Apache wikis. :( Cheers, Chris On Fri, Jul 10, 2015 at 2:38 PM, Yan Fang <yanfang...@gmail.com> wrote: > Thanks, Jay. This argument persuaded me actually. :) > > Fang, Yan > yanfang...@gmail.com > > On Fri, Jul 10, 2015 at 2:33 PM, Jay Kreps <j...@confluent.io> wrote: > > > Hey Yan, > > > > Yeah philosophically I think the argument is that you should capture the > > stream in Kafka independent of the transformation. This is obviously a > > Kafka-centric view point. > > > > Advantages of this: > > - In practice I think this is what e.g. Storm people often end up doing > > anyway. You usually need to throttle any access to a live serving > database. > > - Can have multiple subscribers and they get the same thing without > > additional load on the source system. > > - Applications can tap into the stream if need be by subscribing. > > - You can debug your transformation by tailing the Kafka topic with the > > console consumer > > - Can tee off the same data stream for batch analysis or Lambda arch > style > > re-processing > > > > The disadvantage is that it will use Kafka resources. But the idea is > > eventually you will have multiple subscribers to any data source (at > least > > for monitoring) so you will end up there soon enough anyway. > > > > Down the road the technical benefit is that I think it gives us a good > path > > towards end-to-end exactly once semantics from source to destination. > > Basically the connectors need to support idempotence when talking to > Kafka > > and we need the transactional write feature in Kafka to make the > > transformation atomic. This is actually pretty doable if you separate > > connector=>kafka problem from the generic transformations which are > always > > kafka=>kafka. However I think it is quite impossible to do in a > all_things > > => all_things environment. Today you can say "well the semantics of the > > Samza APIs depend on the connectors you use" but it is actually worse > then > > that because the semantics actually depend on the pairing of > connectors--so > > not only can you probably not get a usable "exactly once" guarantee > > end-to-end it can actually be quite hard to reverse engineer what > property > > (if any) your end-to-end flow has if you have heterogenous systems. > > > > -Jay > > > > On Fri, Jul 10, 2015 at 2:00 PM, Yan Fang <yanfang...@gmail.com> wrote: > > > > > {quote} > > > maintained in a separate repository and retaining the existing > > > committership but sharing as much else as possible (website, etc) > > > {quote} > > > > > > Overall, I agree on this idea. Now the question is more about "how to > do > > > it". > > > > > > On the other hand, one thing I want to point out is that, if we decide > to > > > go this way, how do we want to support > > > otherSystem-transformation-otherSystem use case? > > > > > > Basically, there are four user groups here: > > > > > > 1. Kafka-transformation-Kafka > > > 2. Kafka-transformation-otherSystem > > > 3. otherSystem-transformation-Kafka > > > 4. otherSystem-transformation-otherSystem > > > > > > For group 1, they can easily use the new Samza library to achieve. For > > > group 2 and 3, they can use copyCat -> transformation -> Kafka or > Kafka-> > > > transformation -> copyCat. > > > > > > The problem is for group 4. Do we want to abandon this or still support > > it? > > > Of course, this use case can be achieved by using copyCat -> > > transformation > > > -> Kafka -> transformation -> copyCat, the thing is how we persuade > them > > to > > > do this long chain. If yes, it will also be a win for Kafka too. Or if > > > there is no one in this community actually doing this so far, maybe ok > to > > > not support the group 4 directly. > > > > > > Thanks, > > > > > > Fang, Yan > > > yanfang...@gmail.com > > > > > > On Fri, Jul 10, 2015 at 12:58 PM, Jay Kreps <j...@confluent.io> wrote: > > > > > > > Yeah I agree with this summary. I think there are kind of two > questions > > > > here: > > > > 1. Technically does alignment/reliance on Kafka make sense > > > > 2. Branding wise (naming, website, concepts, etc) does alignment with > > > Kafka > > > > make sense > > > > > > > > Personally I do think both of these things would be really valuable, > > and > > > > would dramatically alter the trajectory of the project. > > > > > > > > My preference would be to see if people can mostly agree on a > direction > > > > rather than splintering things off. From my point of view the ideal > > > outcome > > > > of all the options discussed would be to make Samza a closely aligned > > > > subproject, maintained in a separate repository and retaining the > > > existing > > > > committership but sharing as much else as possible (website, etc). No > > > idea > > > > about how these things work, Jacob, you probably know more. > > > > > > > > No discussion amongst the Kafka folks has happened on this, but > likely > > we > > > > should figure out what the Samza community actually wants first. > > > > > > > > I admit that this is a fairly radical departure from how things are. > > > > > > > > If that doesn't fly, I think, yeah we could leave Samza as it is and > do > > > the > > > > more radical reboot inside Kafka. From my point of view that does > leave > > > > things in a somewhat confusing state since now there are two stream > > > > processing systems more or less coupled to Kafka in large part made > by > > > the > > > > same people. But, arguably that might be a cleaner way to make the > > > cut-over > > > > and perhaps less risky for Samza community since if it works people > can > > > > switch and if it doesn't nothing will have changed. Dunno, how do > > people > > > > feel about this? > > > > > > > > -Jay > > > > > > > > On Fri, Jul 10, 2015 at 11:49 AM, Jakob Homan <jgho...@gmail.com> > > wrote: > > > > > > > > > > This leads me to thinking that merging projects and communities > > > might > > > > > be a good idea: with the union of experience from both communities, > > we > > > > will > > > > > probably build a better system that is better for users. > > > > > Is this what's being proposed though? Merging the projects seems > like > > > > > a consequence of at most one of the three directions under > > discussion: > > > > > 1) Samza 2.0: The Samza community relies more heavily on Kafka for > > > > > configuration, etc. (to a greater or lesser extent to be > determined) > > > > > but the Samza community would not automatically merge withe Kafka > > > > > community (the Phoenix/HBase example is a good one here). > > > > > 2) Samza Reboot: The Samza community continues to exist with a > > limited > > > > > project scope, but similarly would not need to be part of the Kafka > > > > > community (ie given committership) to progress. Here, maybe the > > Samza > > > > > team would become a subproject of Kafka (the Board frowns on > > > > > subprojects at the moment, so I'm not sure if that's even > feasible), > > > > > but that would not be required. > > > > > 3) Hey Samza! FYI, Kafka does streaming now: In this option the > Kafka > > > > > team builds its own streaming library, possibly off of Jay's > > > > > prototype, which has not direct lineage to the Samza team. There's > > no > > > > > reason for the Kafka team to bring in the Samza team. > > > > > > > > > > Is the Kafka community on board with this? > > > > > > > > > > To be clear, all three options under discussion are interesting, > > > > > technically valid and likely healthy directions for the project. > > > > > Also, they are not mutually exclusive. The Samza community could > > > > > decide to pursue, say, 'Samza 2.0', while the Kafka community went > > > > > forward with 'Hey Samza!' My points above are directed entirely at > > > > > the community aspect of these choices. > > > > > -Jakob > > > > > > > > > > On 10 July 2015 at 09:10, Roger Hoover <roger.hoo...@gmail.com> > > wrote: > > > > > > That's great. Thanks, Jay. > > > > > > > > > > > > On Fri, Jul 10, 2015 at 8:46 AM, Jay Kreps <j...@confluent.io> > > wrote: > > > > > > > > > > > >> Yeah totally agree. I think you have this issue even today, > right? > > > > I.e. > > > > > if > > > > > >> you need to make a simple config change and you're running in > YARN > > > > today > > > > > >> you end up bouncing the job which then rebuilds state. I think > the > > > fix > > > > > is > > > > > >> exactly what you described which is to have a long timeout on > > > > partition > > > > > >> movement for stateful jobs so that if a job is just getting > > bounced, > > > > and > > > > > >> the cluster manager (or admin) is smart enough to restart it on > > the > > > > same > > > > > >> host when possible, it can optimistically reuse any existing > state > > > it > > > > > finds > > > > > >> on disk (if it is valid). > > > > > >> > > > > > >> So in this model the charter of the CM is to place processes as > > > > > stickily as > > > > > >> possible and to restart or re-place failed processes. The > charter > > of > > > > the > > > > > >> partition management system is to control the assignment of work > > to > > > > > these > > > > > >> processes. The nice thing about this is that the work > assignment, > > > > > timeouts, > > > > > >> behavior, configs, and code will all be the same across all > > cluster > > > > > >> managers. > > > > > >> > > > > > >> So I think that prototype would actually give you exactly what > you > > > > want > > > > > >> today for any cluster manager (or manual placement + restart > > script) > > > > > that > > > > > >> was sticky in terms of host placement since there is already a > > > > > configurable > > > > > >> partition movement timeout and task-by-task state reuse with a > > check > > > > on > > > > > >> state validity. > > > > > >> > > > > > >> -Jay > > > > > >> > > > > > >> On Fri, Jul 10, 2015 at 8:34 AM, Roger Hoover < > > > roger.hoo...@gmail.com > > > > > > > > > > >> wrote: > > > > > >> > > > > > >> > That would be great to let Kafka do as much heavy lifting as > > > > possible > > > > > and > > > > > >> > make it easier for other languages to implement Samza apis. > > > > > >> > > > > > > >> > One thing to watch out for is the interplay between Kafka's > > group > > > > > >> > management and the external scheduler/process manager's fault > > > > > tolerance. > > > > > >> > If a container dies, the Kafka group membership protocol will > > try > > > to > > > > > >> assign > > > > > >> > it's tasks to other containers while at the same time the > > process > > > > > manager > > > > > >> > is trying to relaunch the container. Without some > consideration > > > for > > > > > this > > > > > >> > (like a configurable amount of time to wait before Kafka > alters > > > the > > > > > group > > > > > >> > membership), there may be thrashing going on which is > especially > > > bad > > > > > for > > > > > >> > containers with large amounts of local state. > > > > > >> > > > > > > >> > Someone else pointed this out already but I thought it might > be > > > > worth > > > > > >> > calling out again. > > > > > >> > > > > > > >> > Cheers, > > > > > >> > > > > > > >> > Roger > > > > > >> > > > > > > >> > > > > > > >> > On Tue, Jul 7, 2015 at 11:35 AM, Jay Kreps <j...@confluent.io> > > > > wrote: > > > > > >> > > > > > > >> > > Hey Roger, > > > > > >> > > > > > > > >> > > I couldn't agree more. We spent a bunch of time talking to > > > people > > > > > and > > > > > >> > that > > > > > >> > > is exactly the stuff we heard time and again. What makes it > > > hard, > > > > of > > > > > >> > > course, is that there is some tension between compatibility > > with > > > > > what's > > > > > >> > > there now and making things better for new users. > > > > > >> > > > > > > > >> > > I also strongly agree with the importance of multi-language > > > > > support. We > > > > > >> > are > > > > > >> > > talking now about Java, but for application development use > > > cases > > > > > >> people > > > > > >> > > want to work in whatever language they are using elsewhere. > I > > > > think > > > > > >> > moving > > > > > >> > > to a model where Kafka itself does the group membership, > > > lifecycle > > > > > >> > control, > > > > > >> > > and partition assignment has the advantage of putting all > that > > > > > complex > > > > > >> > > stuff behind a clean api that the clients are already going > to > > > be > > > > > >> > > implementing for their consumer, so the added functionality > > for > > > > > stream > > > > > >> > > processing beyond a consumer becomes very minor. > > > > > >> > > > > > > > >> > > -Jay > > > > > >> > > > > > > > >> > > On Tue, Jul 7, 2015 at 10:49 AM, Roger Hoover < > > > > > roger.hoo...@gmail.com> > > > > > >> > > wrote: > > > > > >> > > > > > > > >> > > > Metamorphosis...nice. :) > > > > > >> > > > > > > > > >> > > > This has been a great discussion. As a user of Samza > who's > > > > > recently > > > > > >> > > > integrated it into a relatively large organization, I just > > > want > > > > to > > > > > >> add > > > > > >> > > > support to a few points already made. > > > > > >> > > > > > > > > >> > > > The biggest hurdles to adoption of Samza as it currently > > > exists > > > > > that > > > > > >> > I've > > > > > >> > > > experienced are: > > > > > >> > > > 1) YARN - YARN is overly complex in many environments > where > > > > Puppet > > > > > >> > would > > > > > >> > > do > > > > > >> > > > just fine but it was the only mechanism to get fault > > > tolerance. > > > > > >> > > > 2) Configuration - I think I like the idea of configuring > > most > > > > of > > > > > the > > > > > >> > job > > > > > >> > > > in code rather than config files. In general, I think the > > > goal > > > > > >> should > > > > > >> > be > > > > > >> > > > to make it harder to make mistakes, especially of the kind > > > where > > > > > the > > > > > >> > code > > > > > >> > > > expects something and the config doesn't match. The > current > > > > > config > > > > > >> is > > > > > >> > > > quite intricate and error-prone. For example, the > > application > > > > > logic > > > > > >> > may > > > > > >> > > > depend on bootstrapping a topic but rather than asserting > > that > > > > in > > > > > the > > > > > >> > > code, > > > > > >> > > > you have to rely on getting the config right. Likewise > with > > > > > serdes, > > > > > >> > the > > > > > >> > > > Java representations produced by various serdes (JSON, > Avro, > > > > etc.) > > > > > >> are > > > > > >> > > not > > > > > >> > > > equivalent so you cannot just reconfigure a serde without > > > > changing > > > > > >> the > > > > > >> > > > code. It would be nice for jobs to be able to assert > what > > > they > > > > > >> expect > > > > > >> > > > from their input topics in terms of partitioning. This is > > > > > getting a > > > > > >> > > little > > > > > >> > > > off topic but I was even thinking about creating a "Samza > > > config > > > > > >> > linter" > > > > > >> > > > that would sanity check a set of configs. Especially in > > > > > >> organizations > > > > > >> > > > where config is managed by a different team than the > > > application > > > > > >> > > developer, > > > > > >> > > > it's very hard to get avoid config mistakes. > > > > > >> > > > 3) Java/Scala centric - for many teams (especially > > DevOps-type > > > > > >> folks), > > > > > >> > > the > > > > > >> > > > pain of the Java toolchain (maven, slow builds, weak > command > > > > line > > > > > >> > > support, > > > > > >> > > > configuration over convention) really inhibits > productivity. > > > As > > > > > more > > > > > >> > and > > > > > >> > > > more high-quality clients become available for Kafka, I > hope > > > > > they'll > > > > > >> > > follow > > > > > >> > > > Samza's model. Not sure how much it affects the proposals > > in > > > > this > > > > > >> > thread > > > > > >> > > > but please consider other languages in the ecosystem as > > well. > > > > > From > > > > > >> > what > > > > > >> > > > I've heard, Spark has more Python users than Java/Scala. > > > > > >> > > > (FYI, we added a Jython wrapper for the Samza API > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > https://github.com/Quantiply/rico/tree/master/jython/src/main/java/com/quantiply/samza > > > > > >> > > > and are working on a Yeoman generator > > > > > >> > > > https://github.com/Quantiply/generator-rico for > > Jython/Samza > > > > > >> projects > > > > > >> > to > > > > > >> > > > alleviate some of the pain) > > > > > >> > > > > > > > > >> > > > I also want to underscore Jay's point about improving the > > user > > > > > >> > > experience. > > > > > >> > > > That's a very important factor for adoption. I think the > > goal > > > > > should > > > > > >> > be > > > > > >> > > to > > > > > >> > > > make Samza as easy to get started with as something like > > > > Logstash. > > > > > >> > > > Logstash is vastly inferior in terms of capabilities to > > Samza > > > > but > > > > > >> it's > > > > > >> > > easy > > > > > >> > > > to get started and that makes a big difference. > > > > > >> > > > > > > > > >> > > > Cheers, > > > > > >> > > > > > > > > >> > > > Roger > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > On Tue, Jul 7, 2015 at 3:29 AM, Gianmarco De Francisci > > > Morales < > > > > > >> > > > g...@apache.org> wrote: > > > > > >> > > > > > > > > >> > > > > Forgot to add. On the naming issues, Kafka Metamorphosis > > is > > > a > > > > > clear > > > > > >> > > > winner > > > > > >> > > > > :) > > > > > >> > > > > > > > > > >> > > > > -- > > > > > >> > > > > Gianmarco > > > > > >> > > > > > > > > > >> > > > > On 7 July 2015 at 13:26, Gianmarco De Francisci Morales > < > > > > > >> > > g...@apache.org > > > > > >> > > > > > > > > > >> > > > > wrote: > > > > > >> > > > > > > > > > >> > > > > > Hi, > > > > > >> > > > > > > > > > > >> > > > > > @Martin, thanks for you comments. > > > > > >> > > > > > Maybe I'm missing some important point, but I think > > > coupling > > > > > the > > > > > >> > > > releases > > > > > >> > > > > > is actually a *good* thing. > > > > > >> > > > > > To make an example, would it be better if the MR and > > HDFS > > > > > >> > components > > > > > >> > > of > > > > > >> > > > > > Hadoop had different release schedules? > > > > > >> > > > > > > > > > > >> > > > > > Actually, keeping the discussion in a single place > would > > > > make > > > > > >> > > agreeing > > > > > >> > > > on > > > > > >> > > > > > releases (and backwards compatibility) much easier, as > > > > > everybody > > > > > >> > > would > > > > > >> > > > be > > > > > >> > > > > > responsible for the whole codebase. > > > > > >> > > > > > > > > > > >> > > > > > That said, I like the idea of absorbing samza-core as > a > > > > > >> > sub-project, > > > > > >> > > > and > > > > > >> > > > > > leave the fancy stuff separate. > > > > > >> > > > > > It probably gives 90% of the benefits we have been > > > > discussing > > > > > >> here. > > > > > >> > > > > > > > > > > >> > > > > > Cheers, > > > > > >> > > > > > > > > > > >> > > > > > -- > > > > > >> > > > > > Gianmarco > > > > > >> > > > > > > > > > > >> > > > > > On 7 July 2015 at 02:30, Jay Kreps < > jay.kr...@gmail.com > > > > > > > > wrote: > > > > > >> > > > > > > > > > > >> > > > > >> Hey Martin, > > > > > >> > > > > >> > > > > > >> > > > > >> I agree coupling release schedules is a downside. > > > > > >> > > > > >> > > > > > >> > > > > >> Definitely we can try to solve some of the > integration > > > > > problems > > > > > >> in > > > > > >> > > > > >> Confluent Platform or in other distributions. But I > > think > > > > > this > > > > > >> > ends > > > > > >> > > up > > > > > >> > > > > >> being really shallow. I guess I feel to really get a > > good > > > > > user > > > > > >> > > > > experience > > > > > >> > > > > >> the two systems have to kind of feel like part of the > > > same > > > > > thing > > > > > >> > and > > > > > >> > > > you > > > > > >> > > > > >> can't really add that in later--you can put both in > the > > > > same > > > > > >> > > > > downloadable > > > > > >> > > > > >> tar file but it doesn't really give a very cohesive > > > > feeling. > > > > > I > > > > > >> > agree > > > > > >> > > > > that > > > > > >> > > > > >> ultimately any of the project stuff is as much social > > and > > > > > naming > > > > > >> > as > > > > > >> > > > > >> anything else--theoretically two totally independent > > > > projects > > > > > >> > could > > > > > >> > > > work > > > > > >> > > > > >> to > > > > > >> > > > > >> tightly align. In practice this seems to be quite > > > difficult > > > > > >> > though. > > > > > >> > > > > >> > > > > > >> > > > > >> For the frameworks--totally agree it would be good to > > > > > maintain > > > > > >> the > > > > > >> > > > > >> framework support with the project. In some cases > there > > > may > > > > > not > > > > > >> be > > > > > >> > > too > > > > > >> > > > > >> much > > > > > >> > > > > >> there since the integration gets lighter but I think > > > > whatever > > > > > >> > stubs > > > > > >> > > > you > > > > > >> > > > > >> need should be included. So no I definitely wasn't > > trying > > > > to > > > > > >> imply > > > > > >> > > > > >> dropping > > > > > >> > > > > >> support for these frameworks, just making the > > integration > > > > > >> lighter > > > > > >> > by > > > > > >> > > > > >> separating process management from partition > > management. > > > > > >> > > > > >> > > > > > >> > > > > >> You raise two good points we would have to figure out > > if > > > we > > > > > went > > > > > >> > > down > > > > > >> > > > > the > > > > > >> > > > > >> alignment path: > > > > > >> > > > > >> 1. With respect to the name, yeah I think the first > > > > question > > > > > is > > > > > >> > > > whether > > > > > >> > > > > >> some "re-branding" would be worth it. If so then I > > think > > > we > > > > > can > > > > > >> > > have a > > > > > >> > > > > big > > > > > >> > > > > >> thread on the name. I'm definitely not set on Kafka > > > > > Streaming or > > > > > >> > > Kafka > > > > > >> > > > > >> Streams I was just using them to be kind of > > > illustrative. I > > > > > >> agree > > > > > >> > > with > > > > > >> > > > > >> your > > > > > >> > > > > >> critique of these names, though I think people would > > get > > > > the > > > > > >> idea. > > > > > >> > > > > >> 2. Yeah you also raise a good point about how to > > "factor" > > > > it. > > > > > >> Here > > > > > >> > > are > > > > > >> > > > > the > > > > > >> > > > > >> options I see (I could get enthusiastic about any of > > > them): > > > > > >> > > > > >> a. One repo for both Kafka and Samza > > > > > >> > > > > >> b. Two repos, retaining the current seperation > > > > > >> > > > > >> c. Two repos, the equivalent of samza-api and > > > samza-core > > > > > is > > > > > >> > > > absorbed > > > > > >> > > > > >> almost like a third client > > > > > >> > > > > >> > > > > > >> > > > > >> Cheers, > > > > > >> > > > > >> > > > > > >> > > > > >> -Jay > > > > > >> > > > > >> > > > > > >> > > > > >> On Mon, Jul 6, 2015 at 1:18 PM, Martin Kleppmann < > > > > > >> > > > mar...@kleppmann.com> > > > > > >> > > > > >> wrote: > > > > > >> > > > > >> > > > > > >> > > > > >> > Ok, thanks for the clarifications. Just a few > > follow-up > > > > > >> > comments. > > > > > >> > > > > >> > > > > > > >> > > > > >> > - I see the appeal of merging with Kafka or > becoming > > a > > > > > >> > subproject: > > > > > >> > > > the > > > > > >> > > > > >> > reasons you mention are good. The risk I see is > that > > > > > release > > > > > >> > > > schedules > > > > > >> > > > > >> > become coupled to each other, which can slow > everyone > > > > down, > > > > > >> and > > > > > >> > > > large > > > > > >> > > > > >> > projects with many contributors are harder to > manage. > > > > > (Jakob, > > > > > >> > can > > > > > >> > > > you > > > > > >> > > > > >> speak > > > > > >> > > > > >> > from experience, having seen a wider range of > Hadoop > > > > > ecosystem > > > > > >> > > > > >> projects?) > > > > > >> > > > > >> > > > > > > >> > > > > >> > Some of the goals of a better unified developer > > > > experience > > > > > >> could > > > > > >> > > > also > > > > > >> > > > > be > > > > > >> > > > > >> > solved by integrating Samza nicely into a Kafka > > > > > distribution > > > > > >> > (such > > > > > >> > > > as > > > > > >> > > > > >> > Confluent's). I'm not against merging projects if > we > > > > decide > > > > > >> > that's > > > > > >> > > > the > > > > > >> > > > > >> way > > > > > >> > > > > >> > to go, just pointing out the same goals can perhaps > > > also > > > > be > > > > > >> > > achieved > > > > > >> > > > > in > > > > > >> > > > > >> > other ways. > > > > > >> > > > > >> > > > > > > >> > > > > >> > - With regard to dropping the YARN dependency: are > > you > > > > > >> proposing > > > > > >> > > > that > > > > > >> > > > > >> > Samza doesn't give any help to people wanting to > run > > on > > > > > >> > > > > >> YARN/Mesos/AWS/etc? > > > > > >> > > > > >> > So the docs would basically have a link to Slider > and > > > > > nothing > > > > > >> > > else? > > > > > >> > > > Or > > > > > >> > > > > >> > would we maintain integrations with a bunch of > > popular > > > > > >> > deployment > > > > > >> > > > > >> methods > > > > > >> > > > > >> > (e.g. the necessary glue and shell scripts to make > > > Samza > > > > > work > > > > > >> > with > > > > > >> > > > > >> Slider)? > > > > > >> > > > > >> > > > > > > >> > > > > >> > I absolutely think it's a good idea to have the > "as a > > > > > library" > > > > > >> > and > > > > > >> > > > > "as a > > > > > >> > > > > >> > process" (using Yi's taxonomy) options for people > who > > > > want > > > > > >> them, > > > > > >> > > > but I > > > > > >> > > > > >> > think there should also be a low-friction path for > > > common > > > > > "as > > > > > >> a > > > > > >> > > > > service" > > > > > >> > > > > >> > deployment methods, for which we probably need to > > > > maintain > > > > > >> > > > > integrations. > > > > > >> > > > > >> > > > > > > >> > > > > >> > - Project naming: "Kafka Streams" seems odd to me, > > > > because > > > > > >> Kafka > > > > > >> > > is > > > > > >> > > > > all > > > > > >> > > > > >> > about streams already. Perhaps "Kafka Transformers" > > or > > > > > "Kafka > > > > > >> > > > Filters" > > > > > >> > > > > >> > would be more apt? > > > > > >> > > > > >> > > > > > > >> > > > > >> > One suggestion: perhaps the core of Samza (stream > > > > > >> transformation > > > > > >> > > > with > > > > > >> > > > > >> > state management -- i.e. the "Samza as a library" > > bit) > > > > > could > > > > > >> > > become > > > > > >> > > > > >> part of > > > > > >> > > > > >> > Kafka, while higher-level tools such as streaming > SQL > > > and > > > > > >> > > > integrations > > > > > >> > > > > >> with > > > > > >> > > > > >> > deployment frameworks remain in a separate project? > > In > > > > > other > > > > > >> > > words, > > > > > >> > > > > >> Kafka > > > > > >> > > > > >> > would absorb the proven, stable core of Samza, > which > > > > would > > > > > >> > become > > > > > >> > > > the > > > > > >> > > > > >> > "third Kafka client" mentioned early in this > thread. > > > The > > > > > Samza > > > > > >> > > > project > > > > > >> > > > > >> > would then target that third Kafka client as its > base > > > > API, > > > > > and > > > > > >> > the > > > > > >> > > > > >> project > > > > > >> > > > > >> > would be freed up to explore more experimental new > > > > > horizons. > > > > > >> > > > > >> > > > > > > >> > > > > >> > Martin > > > > > >> > > > > >> > > > > > > >> > > > > >> > On 6 Jul 2015, at 18:51, Jay Kreps < > > > jay.kr...@gmail.com> > > > > > >> wrote: > > > > > >> > > > > >> > > > > > > >> > > > > >> > > Hey Martin, > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > For the YARN/Mesos/etc decoupling I actually > don't > > > > think > > > > > it > > > > > >> > ties > > > > > >> > > > our > > > > > >> > > > > >> > hands > > > > > >> > > > > >> > > at all, all it does is refactor things. The > > division > > > of > > > > > >> > > > > >> responsibility is > > > > > >> > > > > >> > > that Samza core is responsible for task > lifecycle, > > > > state, > > > > > >> and > > > > > >> > > > > >> partition > > > > > >> > > > > >> > > management (using the Kafka co-ordinator) but it > is > > > NOT > > > > > >> > > > responsible > > > > > >> > > > > >> for > > > > > >> > > > > >> > > packaging, configuration deployment or execution > of > > > > > >> processes. > > > > > >> > > The > > > > > >> > > > > >> > problem > > > > > >> > > > > >> > > of packaging and starting these processes is > > > > > >> > > > > >> > > framework/environment-specific. This leaves > > > individual > > > > > >> > > frameworks > > > > > >> > > > to > > > > > >> > > > > >> be > > > > > >> > > > > >> > as > > > > > >> > > > > >> > > fancy or vanilla as they like. So you can get > > simple > > > > > >> stateless > > > > > >> > > > > >> support in > > > > > >> > > > > >> > > YARN, Mesos, etc using their off-the-shelf app > > > > framework > > > > > >> > > (Slider, > > > > > >> > > > > >> > Marathon, > > > > > >> > > > > >> > > etc). These are well known by people and have > nice > > > UIs > > > > > and a > > > > > >> > lot > > > > > >> > > > of > > > > > >> > > > > >> > > flexibility. I don't think they have node > affinity > > > as a > > > > > >> built > > > > > >> > in > > > > > >> > > > > >> option > > > > > >> > > > > >> > > (though I could be wrong). So if we want that we > > can > > > > > either > > > > > >> > wait > > > > > >> > > > for > > > > > >> > > > > >> them > > > > > >> > > > > >> > > to add it or do a custom framework to add that > > > feature > > > > > (as > > > > > >> > now). > > > > > >> > > > > >> > Obviously > > > > > >> > > > > >> > > if you manage things with old-school ops tools > > > > > >> > (puppet/chef/etc) > > > > > >> > > > you > > > > > >> > > > > >> get > > > > > >> > > > > >> > > locality easily. The nice thing, though, is that > > all > > > > the > > > > > >> samza > > > > > >> > > > > >> "business > > > > > >> > > > > >> > > logic" around partition management and fault > > > tolerance > > > > > is in > > > > > >> > > Samza > > > > > >> > > > > >> core > > > > > >> > > > > >> > so > > > > > >> > > > > >> > > it is shared across frameworks and the framework > > > > specific > > > > > >> bit > > > > > >> > is > > > > > >> > > > > just > > > > > >> > > > > >> > > whether it is smart enough to try to get the same > > > host > > > > > when > > > > > >> a > > > > > >> > > job > > > > > >> > > > is > > > > > >> > > > > >> > > restarted. > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > With respect to the Kafka-alignment, yeah I think > > the > > > > > goal > > > > > >> > would > > > > > >> > > > be > > > > > >> > > > > >> (a) > > > > > >> > > > > >> > > actually get better alignment in user experience, > > and > > > > (b) > > > > > >> > > express > > > > > >> > > > > >> this in > > > > > >> > > > > >> > > the naming and project branding. Specifically: > > > > > >> > > > > >> > > 1. Website/docs, it would be nice for the > > > > > "transformation" > > > > > >> api > > > > > >> > > to > > > > > >> > > > be > > > > > >> > > > > >> > > discoverable in the main Kafka docs--i.e. be able > > to > > > > > explain > > > > > >> > > when > > > > > >> > > > to > > > > > >> > > > > >> use > > > > > >> > > > > >> > > the consumer and when to use the stream > processing > > > > > >> > functionality > > > > > >> > > > and > > > > > >> > > > > >> lead > > > > > >> > > > > >> > > people into that experience. > > > > > >> > > > > >> > > 2. Align releases so if you get Kafkza 1.4.2 (or > > > > > whatever) > > > > > >> > that > > > > > >> > > > has > > > > > >> > > > > >> both > > > > > >> > > > > >> > > Kafka and the stream processing part and they > > > actually > > > > > work > > > > > >> > > > > together. > > > > > >> > > > > >> > > 3. Unify the programming experience so the client > > and > > > > > Samza > > > > > >> > api > > > > > >> > > > > share > > > > > >> > > > > >> > > config/monitoring/naming/packaging/etc. > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > I think sub-projects keep separate committers and > > can > > > > > have a > > > > > >> > > > > separate > > > > > >> > > > > >> > repo, > > > > > >> > > > > >> > > but I'm actually not really sure (I can't find a > > > > > definition > > > > > >> > of a > > > > > >> > > > > >> > subproject > > > > > >> > > > > >> > > in Apache). > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > Basically at a high-level you want the experience > > to > > > > > "feel" > > > > > >> > > like a > > > > > >> > > > > >> single > > > > > >> > > > > >> > > system, not to relatively independent things that > > are > > > > > kind > > > > > >> of > > > > > >> > > > > >> awkwardly > > > > > >> > > > > >> > > glued together. > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > I think if we did that they having naming or > > branding > > > > > like > > > > > >> > > "kafka > > > > > >> > > > > >> > > streaming" or "kafka streams" or something like > > that > > > > > would > > > > > >> > > > actually > > > > > >> > > > > >> do a > > > > > >> > > > > >> > > good job of conveying what it is. I do that this > > > would > > > > > help > > > > > >> > > > adoption > > > > > >> > > > > >> > quite > > > > > >> > > > > >> > > a lot as it would correctly convey that using > Kafka > > > > > >> Streaming > > > > > >> > > with > > > > > >> > > > > >> Kafka > > > > > >> > > > > >> > is > > > > > >> > > > > >> > > a fairly seamless experience and Kafka is pretty > > > > heavily > > > > > >> > adopted > > > > > >> > > > at > > > > > >> > > > > >> this > > > > > >> > > > > >> > > point. > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > Fwiw we actually considered this model originally > > > when > > > > > open > > > > > >> > > > sourcing > > > > > >> > > > > >> > Samza, > > > > > >> > > > > >> > > however at that time Kafka was relatively unknown > > and > > > > we > > > > > >> > decided > > > > > >> > > > not > > > > > >> > > > > >> to > > > > > >> > > > > >> > do > > > > > >> > > > > >> > > it since we felt it would be limiting. From my > > point > > > of > > > > > view > > > > > >> > the > > > > > >> > > > > three > > > > > >> > > > > >> > > things have changed (1) Kafka is now really > heavily > > > > used > > > > > for > > > > > >> > > > stream > > > > > >> > > > > >> > > processing, (2) we learned that abstracting out > the > > > > > stream > > > > > >> > well > > > > > >> > > is > > > > > >> > > > > >> > > basically impossible, (3) we learned it is really > > > hard > > > > to > > > > > >> keep > > > > > >> > > the > > > > > >> > > > > two > > > > > >> > > > > >> > > things feeling like a single product. > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > -Jay > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > On Mon, Jul 6, 2015 at 3:37 AM, Martin Kleppmann > < > > > > > >> > > > > >> mar...@kleppmann.com> > > > > > >> > > > > >> > > wrote: > > > > > >> > > > > >> > > > > > > > >> > > > > >> > >> Hi all, > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> Lots of good thoughts here. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> I agree with the general philosophy of tying > Samza > > > > more > > > > > >> > firmly > > > > > >> > > to > > > > > >> > > > > >> Kafka. > > > > > >> > > > > >> > >> After I spent a while looking at integrating > other > > > > > message > > > > > >> > > > brokers > > > > > >> > > > > >> (e.g. > > > > > >> > > > > >> > >> Kinesis) with SystemConsumer, I came to the > > > conclusion > > > > > that > > > > > >> > > > > >> > SystemConsumer > > > > > >> > > > > >> > >> tacitly assumes a model so much like Kafka's > that > > > > pretty > > > > > >> much > > > > > >> > > > > nobody > > > > > >> > > > > >> but > > > > > >> > > > > >> > >> Kafka actually implements it. (Databus is > perhaps > > an > > > > > >> > exception, > > > > > >> > > > but > > > > > >> > > > > >> it > > > > > >> > > > > >> > >> isn't widely used outside of LinkedIn.) Thus, > > making > > > > > Samza > > > > > >> > > fully > > > > > >> > > > > >> > dependent > > > > > >> > > > > >> > >> on Kafka acknowledges that the > system-independence > > > was > > > > > >> never > > > > > >> > as > > > > > >> > > > > real > > > > > >> > > > > >> as > > > > > >> > > > > >> > we > > > > > >> > > > > >> > >> perhaps made it out to be. The gains of code > reuse > > > are > > > > > >> real. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> The idea of decoupling Samza from YARN has also > > > always > > > > > been > > > > > >> > > > > >> appealing to > > > > > >> > > > > >> > >> me, for various reasons already mentioned in > this > > > > > thread. > > > > > >> > > > Although > > > > > >> > > > > >> > making > > > > > >> > > > > >> > >> Samza jobs deployable on anything > > > (YARN/Mesos/AWS/etc) > > > > > >> seems > > > > > >> > > > > >> laudable, > > > > > >> > > > > >> > I am > > > > > >> > > > > >> > >> a little concerned that it will restrict us to a > > > > lowest > > > > > >> > common > > > > > >> > > > > >> > denominator. > > > > > >> > > > > >> > >> For example, would host affinity (SAMZA-617) > still > > > be > > > > > >> > possible? > > > > > >> > > > For > > > > > >> > > > > >> jobs > > > > > >> > > > > >> > >> with large amounts of state, I think SAMZA-617 > > would > > > > be > > > > > a > > > > > >> big > > > > > >> > > > boon, > > > > > >> > > > > >> > since > > > > > >> > > > > >> > >> restoring state off the changelog on every > single > > > > > restart > > > > > >> is > > > > > >> > > > > painful, > > > > > >> > > > > >> > due > > > > > >> > > > > >> > >> to long recovery times. It would be a shame if > the > > > > > >> decoupling > > > > > >> > > > from > > > > > >> > > > > >> YARN > > > > > >> > > > > >> > >> made host affinity impossible. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> Jay, a question about the proposed API for > > > > > instantiating a > > > > > >> > job > > > > > >> > > in > > > > > >> > > > > >> code > > > > > >> > > > > >> > >> (rather than a properties file): when > submitting a > > > job > > > > > to a > > > > > >> > > > > cluster, > > > > > >> > > > > >> is > > > > > >> > > > > >> > the > > > > > >> > > > > >> > >> idea that the instantiation code runs on a > client > > > > > >> somewhere, > > > > > >> > > > which > > > > > >> > > > > >> then > > > > > >> > > > > >> > >> pokes the necessary endpoints on > > YARN/Mesos/AWS/etc? > > > > Or > > > > > >> does > > > > > >> > > that > > > > > >> > > > > >> code > > > > > >> > > > > >> > run > > > > > >> > > > > >> > >> on each container that is part of the job (in > > which > > > > > case, > > > > > >> how > > > > > >> > > > does > > > > > >> > > > > >> the > > > > > >> > > > > >> > job > > > > > >> > > > > >> > >> submission to the cluster work)? > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> I agree with Garry that it doesn't feel right to > > > make > > > > a > > > > > 1.0 > > > > > >> > > > release > > > > > >> > > > > >> > with a > > > > > >> > > > > >> > >> plan for it to be immediately obsolete. So if > this > > > is > > > > > going > > > > > >> > to > > > > > >> > > > > >> happen, I > > > > > >> > > > > >> > >> think it would be more honest to stick with 0.* > > > > version > > > > > >> > numbers > > > > > >> > > > > until > > > > > >> > > > > >> > the > > > > > >> > > > > >> > >> library-ified Samza has been implemented, is > > stable > > > > and > > > > > >> > widely > > > > > >> > > > > used. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> Should the new Samza be a subproject of Kafka? > > There > > > > is > > > > > >> > > precedent > > > > > >> > > > > for > > > > > >> > > > > >> > >> tight coupling between different Apache projects > > > (e.g. > > > > > >> > Curator > > > > > >> > > > and > > > > > >> > > > > >> > >> Zookeeper, or Slider and YARN), so I think > > remaining > > > > > >> separate > > > > > >> > > > would > > > > > >> > > > > >> be > > > > > >> > > > > >> > ok. > > > > > >> > > > > >> > >> Even if Samza is fully dependent on Kafka, there > > is > > > > > enough > > > > > >> > > > > substance > > > > > >> > > > > >> in > > > > > >> > > > > >> > >> Samza that it warrants being a separate project. > > An > > > > > >> argument > > > > > >> > in > > > > > >> > > > > >> favour > > > > > >> > > > > >> > of > > > > > >> > > > > >> > >> merging would be if we think Kafka has a much > > > stronger > > > > > >> "brand > > > > > >> > > > > >> presence" > > > > > >> > > > > >> > >> than Samza; I'm ambivalent on that one. If the > > Kafka > > > > > >> project > > > > > >> > is > > > > > >> > > > > >> willing > > > > > >> > > > > >> > to > > > > > >> > > > > >> > >> endorse Samza as the "official" way of doing > > > stateful > > > > > >> stream > > > > > >> > > > > >> > >> transformations, that would probably have much > the > > > > same > > > > > >> > effect > > > > > >> > > as > > > > > >> > > > > >> > >> re-branding Samza as "Kafka Stream Processors" > or > > > > > suchlike. > > > > > >> > > Close > > > > > >> > > > > >> > >> collaboration between the two projects will be > > > needed > > > > in > > > > > >> any > > > > > >> > > > case. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> From a project management perspective, I guess > the > > > > "new > > > > > >> > Samza" > > > > > >> > > > > would > > > > > >> > > > > >> > have > > > > > >> > > > > >> > >> to be developed on a branch alongside ongoing > > > > > maintenance > > > > > >> of > > > > > >> > > the > > > > > >> > > > > >> current > > > > > >> > > > > >> > >> line of development? I think it would be > important > > > to > > > > > >> > continue > > > > > >> > > > > >> > supporting > > > > > >> > > > > >> > >> existing users, and provide a graceful migration > > > path > > > > to > > > > > >> the > > > > > >> > > new > > > > > >> > > > > >> > version. > > > > > >> > > > > >> > >> Leaving the current versions unsupported and > > forcing > > > > > people > > > > > >> > to > > > > > >> > > > > >> rewrite > > > > > >> > > > > >> > >> their jobs would send a bad signal. > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> Best, > > > > > >> > > > > >> > >> Martin > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> On 2 Jul 2015, at 16:59, Jay Kreps < > > > j...@confluent.io> > > > > > >> wrote: > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >>> Hey Garry, > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>> Yeah that's super frustrating. I'd be happy to > > chat > > > > > more > > > > > >> > about > > > > > >> > > > > this > > > > > >> > > > > >> if > > > > > >> > > > > >> > >>> you'd be interested. I think Chris and I > started > > > with > > > > > the > > > > > >> > idea > > > > > >> > > > of > > > > > >> > > > > >> "what > > > > > >> > > > > >> > >>> would it take to make Samza a kick-ass > ingestion > > > > tool" > > > > > but > > > > > >> > > > > >> ultimately > > > > > >> > > > > >> > we > > > > > >> > > > > >> > >>> kind of came around to the idea that ingestion > > and > > > > > >> > > > transformation > > > > > >> > > > > >> had > > > > > >> > > > > >> > >>> pretty different needs and coupling the two > made > > > > things > > > > > >> > hard. > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>> For what it's worth I think copycat (KIP-26) > > > actually > > > > > will > > > > > >> > do > > > > > >> > > > what > > > > > >> > > > > >> you > > > > > >> > > > > >> > >> are > > > > > >> > > > > >> > >>> looking for. > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>> With regard to your point about slider, I don't > > > > > >> necessarily > > > > > >> > > > > >> disagree. > > > > > >> > > > > >> > >> But I > > > > > >> > > > > >> > >>> think getting good YARN support is quite doable > > > and I > > > > > >> think > > > > > >> > we > > > > > >> > > > can > > > > > >> > > > > >> make > > > > > >> > > > > >> > >>> that work well. I think the issue this proposal > > > > solves > > > > > is > > > > > >> > that > > > > > >> > > > > >> > >> technically > > > > > >> > > > > >> > >>> it is pretty hard to support multiple cluster > > > > > management > > > > > >> > > systems > > > > > >> > > > > the > > > > > >> > > > > >> > way > > > > > >> > > > > >> > >>> things are now, you need to write an "app > master" > > > or > > > > > >> > > "framework" > > > > > >> > > > > for > > > > > >> > > > > >> > each > > > > > >> > > > > >> > >>> and they are all a little different so testing > is > > > > > really > > > > > >> > hard. > > > > > >> > > > In > > > > > >> > > > > >> the > > > > > >> > > > > >> > >>> absence of this we have been stuck with just > YARN > > > > which > > > > > >> has > > > > > >> > > > > >> fantastic > > > > > >> > > > > >> > >>> penetration in the Hadoopy part of the org, but > > > zero > > > > > >> > > penetration > > > > > >> > > > > >> > >> elsewhere. > > > > > >> > > > > >> > >>> Given the huge amount of work being put in to > > > slider, > > > > > >> > > marathon, > > > > > >> > > > > aws > > > > > >> > > > > >> > >>> tooling, not to mention the umpteen related > > > packaging > > > > > >> > > > technologies > > > > > >> > > > > >> > people > > > > > >> > > > > >> > >>> want to use (Docker, Kubernetes, various > > > > cloud-specific > > > > > >> > deploy > > > > > >> > > > > >> tools, > > > > > >> > > > > >> > >> etc) > > > > > >> > > > > >> > >>> I really think it is important to get this > right. > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>> -Jay > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>> On Thu, Jul 2, 2015 at 4:17 AM, Garry > Turkington > > < > > > > > >> > > > > >> > >>> g.turking...@improvedigital.com> wrote: > > > > > >> > > > > >> > >>> > > > > > >> > > > > >> > >>>> Hi all, > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> I think the question below re does Samza > become > > a > > > > > >> > sub-project > > > > > >> > > > of > > > > > >> > > > > >> Kafka > > > > > >> > > > > >> > >>>> highlights the broader point around migration. > > > Chris > > > > > >> > mentions > > > > > >> > > > > >> Samza's > > > > > >> > > > > >> > >>>> maturity is heading towards a v1 release but > I'm > > > not > > > > > sure > > > > > >> > it > > > > > >> > > > > feels > > > > > >> > > > > >> > >> right to > > > > > >> > > > > >> > >>>> launch a v1 then immediately plan to deprecate > > > most > > > > of > > > > > >> it. > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> From a selfish perspective I have some guys > who > > > have > > > > > >> > started > > > > > >> > > > > >> working > > > > > >> > > > > >> > >> with > > > > > >> > > > > >> > >>>> Samza and building some new > consumers/producers > > > was > > > > > next > > > > > >> > up. > > > > > >> > > > > Sounds > > > > > >> > > > > >> > like > > > > > >> > > > > >> > >>>> that is absolutely not the direction to go. I > > need > > > > to > > > > > >> look > > > > > >> > > into > > > > > >> > > > > the > > > > > >> > > > > >> > KIP > > > > > >> > > > > >> > >> in > > > > > >> > > > > >> > >>>> more detail but for me the attractiveness of > > > adding > > > > > new > > > > > >> > Samza > > > > > >> > > > > >> > >>>> consumer/producers -- even if yes all they > were > > > > doing > > > > > was > > > > > >> > > > really > > > > > >> > > > > >> > getting > > > > > >> > > > > >> > >>>> data into and out of Kafka -- was to avoid > > > having > > > > to > > > > > >> > worry > > > > > >> > > > > about > > > > > >> > > > > >> the > > > > > >> > > > > >> > >>>> lifecycle management of external clients. If > > there > > > > is > > > > > a > > > > > >> > > generic > > > > > >> > > > > >> Kafka > > > > > >> > > > > >> > >>>> ingress/egress layer that I can plug a new > > > connector > > > > > into > > > > > >> > and > > > > > >> > > > > have > > > > > >> > > > > >> a > > > > > >> > > > > >> > >> lot of > > > > > >> > > > > >> > >>>> the heavy lifting re scale and reliability > done > > > for > > > > me > > > > > >> then > > > > > >> > > it > > > > > >> > > > > >> gives > > > > > >> > > > > >> > me > > > > > >> > > > > >> > >> all > > > > > >> > > > > >> > >>>> the pushing new consumers/producers would. If > > not > > > > > then it > > > > > >> > > > > >> complicates > > > > > >> > > > > >> > my > > > > > >> > > > > >> > >>>> operational deployments. > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> Which is similar to my other question with the > > > > > proposal > > > > > >> -- > > > > > >> > if > > > > > >> > > > we > > > > > >> > > > > >> > build a > > > > > >> > > > > >> > >>>> fully available/stand-alone Samza plus the > > > requisite > > > > > >> shims > > > > > >> > to > > > > > >> > > > > >> > integrate > > > > > >> > > > > >> > >>>> with Slider etc I suspect the former may be a > > lot > > > > more > > > > > >> work > > > > > >> > > > than > > > > > >> > > > > we > > > > > >> > > > > >> > >> think. > > > > > >> > > > > >> > >>>> We may make it much easier for a newcomer to > get > > > > > >> something > > > > > >> > > > > running > > > > > >> > > > > >> but > > > > > >> > > > > >> > >>>> having them step up and get a reliable > > production > > > > > >> > deployment > > > > > >> > > > may > > > > > >> > > > > >> still > > > > > >> > > > > >> > >>>> dominate mailing list traffic, if for > different > > > > > reasons > > > > > >> > than > > > > > >> > > > > >> today. > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> Don't get me wrong -- I'm comfortable with > > making > > > > the > > > > > >> Samza > > > > > >> > > > > >> dependency > > > > > >> > > > > >> > >> on > > > > > >> > > > > >> > >>>> Kafka much more explicit and I absolutely see > > the > > > > > >> benefits > > > > > >> > > in > > > > > >> > > > > the > > > > > >> > > > > >> > >>>> reduction of duplication and clashing > > > > > >> > > > terminologies/abstractions > > > > > >> > > > > >> that > > > > > >> > > > > >> > >>>> Chris/Jay describe. Samza as a library would > > > likely > > > > > be a > > > > > >> > very > > > > > >> > > > > nice > > > > > >> > > > > >> > tool > > > > > >> > > > > >> > >> to > > > > > >> > > > > >> > >>>> add to the Kafka ecosystem. I just have the > > > concerns > > > > > >> above > > > > > >> > re > > > > > >> > > > the > > > > > >> > > > > >> > >>>> operational side. > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> Garry > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> -----Original Message----- > > > > > >> > > > > >> > >>>> From: Gianmarco De Francisci Morales [mailto: > > > > > >> > g...@apache.org > > > > > >> > > ] > > > > > >> > > > > >> > >>>> Sent: 02 July 2015 12:56 > > > > > >> > > > > >> > >>>> To: dev@samza.apache.org > > > > > >> > > > > >> > >>>> Subject: Re: Thoughts and obesrvations on > Samza > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> Very interesting thoughts. > > > > > >> > > > > >> > >>>> From outside, I have always perceived Samza > as a > > > > > >> computing > > > > > >> > > > layer > > > > > >> > > > > >> over > > > > > >> > > > > >> > >>>> Kafka. > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> The question, maybe a bit provocative, is > > "should > > > > > Samza > > > > > >> be > > > > > >> > a > > > > > >> > > > > >> > sub-project > > > > > >> > > > > >> > >>>> of Kafka then?" > > > > > >> > > > > >> > >>>> Or does it make sense to keep it as a separate > > > > project > > > > > >> > with a > > > > > >> > > > > >> separate > > > > > >> > > > > >> > >>>> governance? > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> Cheers, > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> -- > > > > > >> > > > > >> > >>>> Gianmarco > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>> On 2 July 2015 at 08:59, Yan Fang < > > > > > yanfang...@gmail.com> > > > > > >> > > > wrote: > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >>>>> Overall, I agree to couple with Kafka more > > > tightly. > > > > > >> > Because > > > > > >> > > > > Samza > > > > > >> > > > > >> de > > > > > >> > > > > >> > >>>>> facto is based on Kafka, and it should > leverage > > > > what > > > > > >> Kafka > > > > > >> > > > has. > > > > > >> > > > > At > > > > > >> > > > > >> > the > > > > > >> > > > > >> > >>>>> same time, Kafka does not need to reinvent > what > > > > Samza > > > > > >> > > already > > > > > >> > > > > >> has. I > > > > > >> > > > > >> > >>>>> also like the idea of separating the > ingestion > > > and > > > > > >> > > > > transformation. > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> But it is a little difficult for me to image > > how > > > > the > > > > > >> Samza > > > > > >> > > > will > > > > > >> > > > > >> look > > > > > >> > > > > >> > >>>> like. > > > > > >> > > > > >> > >>>>> And I feel Chris and Jay have a little > > difference > > > > in > > > > > >> terms > > > > > >> > > of > > > > > >> > > > > how > > > > > >> > > > > >> > >>>>> Samza should look like. > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> *** Will it look like what Jay's code shows > (A > > > > > client of > > > > > >> > > > Kakfa) > > > > > >> > > > > ? > > > > > >> > > > > >> And > > > > > >> > > > > >> > >>>>> user's application code calls this client? > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> 1. If we make Samza be a library of Kafka > (like > > > > what > > > > > the > > > > > >> > > code > > > > > >> > > > > >> shows), > > > > > >> > > > > >> > >>>>> how do we implement auto-balance and > > > > fault-tolerance? > > > > > >> Are > > > > > >> > > they > > > > > >> > > > > >> taken > > > > > >> > > > > >> > >>>>> care by the Kafka broker or other mechanism, > > such > > > > as > > > > > >> > "Samza > > > > > >> > > > > >> worker" > > > > > >> > > > > >> > >>>>> (just make up the name) ? > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> 2. What about other features, such as > > > auto-scaling, > > > > > >> shared > > > > > >> > > > > state, > > > > > >> > > > > >> > >>>>> monitoring? > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> *** If we have Samza standalone, (is this > what > > > > Chris > > > > > >> > > > suggests?) > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> 1. we still need to ingest data from Kakfa > and > > > > > produce > > > > > >> to > > > > > >> > > it. > > > > > >> > > > > >> Then it > > > > > >> > > > > >> > >>>>> becomes the same as what Samza looks like > now, > > > > > except it > > > > > >> > > does > > > > > >> > > > > not > > > > > >> > > > > >> > rely > > > > > >> > > > > >> > >>>>> on Yarn anymore. > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> 2. if it is standalone, how can it leverage > > > Kafka's > > > > > >> > metrics, > > > > > >> > > > > logs, > > > > > >> > > > > >> > >>>>> etc? Use Kafka code as the dependency? > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> Thanks, > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> Fang, Yan > > > > > >> > > > > >> > >>>>> yanfang...@gmail.com > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>> On Wed, Jul 1, 2015 at 5:46 PM, Guozhang > Wang < > > > > > >> > > > > wangg...@gmail.com > > > > > >> > > > > >> > > > > > > >> > > > > >> > >>>> wrote: > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>>>> Read through the code example and it looks > > good > > > to > > > > > me. > > > > > >> A > > > > > >> > > few > > > > > >> > > > > >> > >>>>>> thoughts regarding deployment: > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> Today Samza deploys as executable runnable > > like: > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> deploy/samza/bin/run-job.sh > > --config-factory=... > > > > > >> > > > > >> > >>>> --config-path=file://... > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> And this proposal advocate for deploying > Samza > > > > more > > > > > as > > > > > >> > > > embedded > > > > > >> > > > > >> > >>>>>> libraries in user application code (ignoring > > the > > > > > >> > > terminology > > > > > >> > > > > >> since > > > > > >> > > > > >> > >>>>>> it is not the > > > > > >> > > > > >> > >>>>> same > > > > > >> > > > > >> > >>>>>> as the prototype code): > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> StreamTask task = new MyStreamTask(configs); > > > > Thread > > > > > >> > thread > > > > > >> > > = > > > > > >> > > > > new > > > > > >> > > > > >> > >>>>>> Thread(task); thread.start(); > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> I think both of these deployment modes are > > > > important > > > > > >> for > > > > > >> > > > > >> different > > > > > >> > > > > >> > >>>>>> types > > > > > >> > > > > >> > >>>>> of > > > > > >> > > > > >> > >>>>>> users. That said, I think making Samza > purely > > > > > >> standalone > > > > > >> > is > > > > > >> > > > > still > > > > > >> > > > > >> > >>>>>> sufficient for either runnable or library > > modes. > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> Guozhang > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> On Tue, Jun 30, 2015 at 11:33 PM, Jay Kreps > < > > > > > >> > > > j...@confluent.io> > > > > > >> > > > > >> > wrote: > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>>> Looks like gmail mangled the code example, > it > > > was > > > > > >> > supposed > > > > > >> > > > to > > > > > >> > > > > >> look > > > > > >> > > > > >> > >>>>>>> like > > > > > >> > > > > >> > >>>>>>> this: > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>>> Properties props = new Properties(); > > > > > >> > > > > >> > >>>>>>> props.put("bootstrap.servers", > > > "localhost:4242"); > > > > > >> > > > > >> StreamingConfig > > > > > >> > > > > >> > >>>>>>> config = new StreamingConfig(props); > > > > > >> > > > > >> > >>>>>>> config.subscribe("test-topic-1", > > > "test-topic-2"); > > > > > >> > > > > >> > >>>>>>> > > config.processor(ExampleStreamProcessor.class); > > > > > >> > > > > >> > >>>>>>> config.serialization(new > StringSerializer(), > > > new > > > > > >> > > > > >> > >>>>>>> StringDeserializer()); KafkaStreaming > > > container = > > > > > new > > > > > >> > > > > >> > >>>>>>> KafkaStreaming(config); container.run(); > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>>> -Jay > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>>> On Tue, Jun 30, 2015 at 11:32 PM, Jay > Kreps < > > > > > >> > > > j...@confluent.io > > > > > >> > > > > > > > > > > >> > > > > >> > >>>> wrote: > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>>>> Hey guys, > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> This came out of some conversations Chris > > and > > > I > > > > > were > > > > > >> > > having > > > > > >> > > > > >> > >>>>>>>> around > > > > > >> > > > > >> > >>>>>>> whether > > > > > >> > > > > >> > >>>>>>>> it would make sense to use Samza as a kind > > of > > > > data > > > > > >> > > > ingestion > > > > > >> > > > > >> > >>>>> framework > > > > > >> > > > > >> > >>>>>>> for > > > > > >> > > > > >> > >>>>>>>> Kafka (which ultimately lead to KIP-26 > > > > "copycat"). > > > > > >> This > > > > > >> > > > kind > > > > > >> > > > > of > > > > > >> > > > > >> > >>>>>> combined > > > > > >> > > > > >> > >>>>>>>> with complaints around config and YARN and > > the > > > > > >> > discussion > > > > > >> > > > > >> around > > > > > >> > > > > >> > >>>>>>>> how > > > > > >> > > > > >> > >>>>> to > > > > > >> > > > > >> > >>>>>>>> best do a standalone mode. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> So the thought experiment was, given that > > > Samza > > > > > was > > > > > >> > > > basically > > > > > >> > > > > >> > >>>>>>>> already totally Kafka specific, what if > you > > > just > > > > > >> > embraced > > > > > >> > > > > that > > > > > >> > > > > >> > >>>>>>>> and turned it > > > > > >> > > > > >> > >>>>>> into > > > > > >> > > > > >> > >>>>>>>> something less like a heavyweight > framework > > > and > > > > > more > > > > > >> > > like a > > > > > >> > > > > >> > >>>>>>>> third > > > > > >> > > > > >> > >>>>> Kafka > > > > > >> > > > > >> > >>>>>>>> client--a kind of "producing consumer" > with > > > > state > > > > > >> > > > management > > > > > >> > > > > >> > >>>>>> facilities. > > > > > >> > > > > >> > >>>>>>>> Basically a library. Instead of a complex > > > stream > > > > > >> > > processing > > > > > >> > > > > >> > >>>>>>>> framework > > > > > >> > > > > >> > >>>>>>> this > > > > > >> > > > > >> > >>>>>>>> would actually be a very simple thing, not > > > much > > > > > more > > > > > >> > > > > >> complicated > > > > > >> > > > > >> > >>>>>>>> to > > > > > >> > > > > >> > >>>>> use > > > > > >> > > > > >> > >>>>>>> or > > > > > >> > > > > >> > >>>>>>>> operate than a Kafka consumer. As Chris > said > > > we > > > > > >> thought > > > > > >> > > > about > > > > > >> > > > > >> it > > > > > >> > > > > >> > >>>>>>>> a > > > > > >> > > > > >> > >>>>> lot > > > > > >> > > > > >> > >>>>>> of > > > > > >> > > > > >> > >>>>>>>> what Samza (and the other stream > processing > > > > > systems > > > > > >> > were > > > > > >> > > > > doing) > > > > > >> > > > > >> > >>>>> seemed > > > > > >> > > > > >> > >>>>>>> like > > > > > >> > > > > >> > >>>>>>>> kind of a hangover from MapReduce. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> Of course you need to ingest/output data > to > > > and > > > > > from > > > > > >> > the > > > > > >> > > > > stream > > > > > >> > > > > >> > >>>>>>>> processing. But when we actually looked > into > > > how > > > > > that > > > > > >> > > would > > > > > >> > > > > >> > >>>>>>>> work, > > > > > >> > > > > >> > >>>>> Samza > > > > > >> > > > > >> > >>>>>>>> isn't really an ideal data ingestion > > framework > > > > > for a > > > > > >> > > bunch > > > > > >> > > > of > > > > > >> > > > > >> > >>>>> reasons. > > > > > >> > > > > >> > >>>>>> To > > > > > >> > > > > >> > >>>>>>>> really do that right you need a pretty > > > different > > > > > >> > internal > > > > > >> > > > > data > > > > > >> > > > > >> > >>>>>>>> model > > > > > >> > > > > >> > >>>>>> and > > > > > >> > > > > >> > >>>>>>>> set of apis. So what if you split them and > > had > > > > an > > > > > api > > > > > >> > for > > > > > >> > > > > Kafka > > > > > >> > > > > >> > >>>>>>>> ingress/egress (copycat AKA KIP-26) and a > > > > separate > > > > > >> api > > > > > >> > > for > > > > > >> > > > > >> Kafka > > > > > >> > > > > >> > >>>>>>>> transformation (Samza). > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> This would also allow really embracing the > > > same > > > > > >> > > terminology > > > > > >> > > > > and > > > > > >> > > > > >> > >>>>>>>> conventions. One complaint about the > current > > > > > state is > > > > > >> > > that > > > > > >> > > > > the > > > > > >> > > > > >> > >>>>>>>> two > > > > > >> > > > > >> > >>>>>>> systems > > > > > >> > > > > >> > >>>>>>>> kind of feel bolted on. Terminology like > > > > "stream" > > > > > vs > > > > > >> > > > "topic" > > > > > >> > > > > >> and > > > > > >> > > > > >> > >>>>>>> different > > > > > >> > > > > >> > >>>>>>>> config and monitoring systems means you > kind > > > of > > > > > have > > > > > >> to > > > > > >> > > > learn > > > > > >> > > > > >> > >>>>>>>> Kafka's > > > > > >> > > > > >> > >>>>>>> way, > > > > > >> > > > > >> > >>>>>>>> then learn Samza's slightly different way, > > > then > > > > > kind > > > > > >> of > > > > > >> > > > > >> > >>>>>>>> understand > > > > > >> > > > > >> > >>>>> how > > > > > >> > > > > >> > >>>>>>> they > > > > > >> > > > > >> > >>>>>>>> map to each other, which having walked a > few > > > > > people > > > > > >> > > through > > > > > >> > > > > >> this > > > > > >> > > > > >> > >>>>>>>> is surprisingly tricky for folks to get. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> Since I have been spending a lot of time > on > > > > > >> airplanes I > > > > > >> > > > > hacked > > > > > >> > > > > >> > >>>>>>>> up an ernest but still somewhat incomplete > > > > > prototype > > > > > >> of > > > > > >> > > > what > > > > > >> > > > > >> > >>>>>>>> this would > > > > > >> > > > > >> > >>>>> look > > > > > >> > > > > >> > >>>>>>>> like. This is just unceremoniously dumped > > into > > > > > Kafka > > > > > >> as > > > > > >> > > it > > > > > >> > > > > >> > >>>>>>>> required a > > > > > >> > > > > >> > >>>>>> few > > > > > >> > > > > >> > >>>>>>>> changes to the new consumer. Here is the > > code: > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > > > > > > >> > > > > > > > > > >> > > > > > > > > https://github.com/jkreps/kafka/tree/streams/clients/src/main/java/org > > > > > >> > > > > >> > >>>>> /apache/kafka/clients/streaming > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> For the purpose of the prototype I just > > > > liberally > > > > > >> > renamed > > > > > >> > > > > >> > >>>>>>>> everything > > > > > >> > > > > >> > >>>>> to > > > > > >> > > > > >> > >>>>>>>> try to align it with Kafka with no regard > > for > > > > > >> > > > compatibility. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> To use this would be something like this: > > > > > >> > > > > >> > >>>>>>>> Properties props = new Properties(); > > > > > >> > > > > >> > >>>>>>>> props.put("bootstrap.servers", > > > > "localhost:4242"); > > > > > >> > > > > >> > >>>>>>>> StreamingConfig config = new > > > > > >> > > > > >> > >>>>> StreamingConfig(props); > > > > > >> > > > > >> > >>>>>>> config.subscribe("test-topic-1", > > > > > >> > > > > >> > >>>>>>>> "test-topic-2"); > > > > > >> > > > > >> config.processor(ExampleStreamProcessor.class); > > > > > >> > > > > >> > >>>>>>> config.serialization(new > > > > > >> > > > > >> > >>>>>>>> StringSerializer(), new > > StringDeserializer()); > > > > > >> > > > KafkaStreaming > > > > > >> > > > > >> > >>>>>> container = > > > > > >> > > > > >> > >>>>>>>> new KafkaStreaming(config); > container.run(); > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> KafkaStreaming is basically the > > > SamzaContainer; > > > > > >> > > > > StreamProcessor > > > > > >> > > > > >> > >>>>>>>> is basically StreamTask. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> So rather than putting all the class names > > in > > > a > > > > > file > > > > > >> > and > > > > > >> > > > then > > > > > >> > > > > >> > >>>>>>>> having > > > > > >> > > > > >> > >>>>>> the > > > > > >> > > > > >> > >>>>>>>> job assembled by reflection, you just > > > > instantiate > > > > > the > > > > > >> > > > > container > > > > > >> > > > > >> > >>>>>>>> programmatically. Work is balanced over > > > however > > > > > many > > > > > >> > > > > instances > > > > > >> > > > > >> > >>>>>>>> of > > > > > >> > > > > >> > >>>>> this > > > > > >> > > > > >> > >>>>>>> are > > > > > >> > > > > >> > >>>>>>>> alive at any time (i.e. if an instance > dies, > > > new > > > > > >> tasks > > > > > >> > > are > > > > > >> > > > > >> added > > > > > >> > > > > >> > >>>>>>>> to > > > > > >> > > > > >> > >>>>> the > > > > > >> > > > > >> > >>>>>>>> existing containers without shutting them > > > down). > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> We would provide some glue for running > this > > > > stuff > > > > > in > > > > > >> > YARN > > > > > >> > > > via > > > > > >> > > > > >> > >>>>>>>> Slider, Mesos via Marathon, and AWS using > > some > > > > of > > > > > >> their > > > > > >> > > > tools > > > > > >> > > > > >> > >>>>>>>> but from the > > > > > >> > > > > >> > >>>>>> point > > > > > >> > > > > >> > >>>>>>> of > > > > > >> > > > > >> > >>>>>>>> view of these frameworks these stream > > > processing > > > > > jobs > > > > > >> > are > > > > > >> > > > > just > > > > > >> > > > > >> > >>>>>> stateless > > > > > >> > > > > >> > >>>>>>>> services that can come and go and expand > and > > > > > contract > > > > > >> > at > > > > > >> > > > > will. > > > > > >> > > > > >> > >>>>>>>> There > > > > > >> > > > > >> > >>>>> is > > > > > >> > > > > >> > >>>>>>> no > > > > > >> > > > > >> > >>>>>>>> more custom scheduler. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> Here are some relevant details: > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> 1. It is only ~1300 lines of code, it > would > > > get > > > > > >> larger > > > > > >> > > if > > > > > >> > > > we > > > > > >> > > > > >> > >>>>>>>> productionized but not vastly larger. We > > > really > > > > > do > > > > > >> > get a > > > > > >> > > > ton > > > > > >> > > > > >> > >>>>>>>> of > > > > > >> > > > > >> > >>>>>>> leverage > > > > > >> > > > > >> > >>>>>>>> out of Kafka. > > > > > >> > > > > >> > >>>>>>>> 2. Partition management is fully > delegated > > to > > > > the > > > > > >> new > > > > > >> > > > > >> consumer. > > > > > >> > > > > >> > >>>>> This > > > > > >> > > > > >> > >>>>>>>> is nice since now any partition > management > > > > > strategy > > > > > >> > > > > available > > > > > >> > > > > >> > >>>>>>>> to > > > > > >> > > > > >> > >>>>>> Kafka > > > > > >> > > > > >> > >>>>>>>> consumer is also available to Samza (and > > vice > > > > > versa) > > > > > >> > and > > > > > >> > > > > with > > > > > >> > > > > >> > >>>>>>>> the > > > > > >> > > > > >> > >>>>>>> exact > > > > > >> > > > > >> > >>>>>>>> same configs. > > > > > >> > > > > >> > >>>>>>>> 3. It supports state as well as state > reuse > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> Anyhow take a look, hopefully it is > thought > > > > > >> provoking. > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> -Jay > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> On Tue, Jun 30, 2015 at 6:55 PM, Chris > > > > Riccomini < > > > > > >> > > > > >> > >>>>>> criccom...@apache.org> > > > > > >> > > > > >> > >>>>>>>> wrote: > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Hey all, > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> I have had some discussions with Samza > > > > engineers > > > > > at > > > > > >> > > > LinkedIn > > > > > >> > > > > >> > >>>>>>>>> and > > > > > >> > > > > >> > >>>>>>> Confluent > > > > > >> > > > > >> > >>>>>>>>> and we came up with a few observations > and > > > > would > > > > > >> like > > > > > >> > to > > > > > >> > > > > >> > >>>>>>>>> propose > > > > > >> > > > > >> > >>>>> some > > > > > >> > > > > >> > >>>>>>>>> changes. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> We've observed some things that I want to > > > call > > > > > out > > > > > >> > about > > > > > >> > > > > >> > >>>>>>>>> Samza's > > > > > >> > > > > >> > >>>>>> design, > > > > > >> > > > > >> > >>>>>>>>> and I'd like to propose some changes. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> * Samza is dependent upon a dynamic > > > deployment > > > > > >> system. > > > > > >> > > > > >> > >>>>>>>>> * Samza is too pluggable. > > > > > >> > > > > >> > >>>>>>>>> * Samza's SystemConsumer/SystemProducer > and > > > > > Kafka's > > > > > >> > > > consumer > > > > > >> > > > > >> > >>>>>>>>> APIs > > > > > >> > > > > >> > >>>>> are > > > > > >> > > > > >> > >>>>>>>>> trying to solve a lot of the same > problems. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> All three of these issues are related, > but > > > I'll > > > > > >> > address > > > > > >> > > > them > > > > > >> > > > > >> in > > > > > >> > > > > >> > >>>>> order. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Deployment > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Samza strongly depends on the use of a > > > dynamic > > > > > >> > > deployment > > > > > >> > > > > >> > >>>>>>>>> scheduler > > > > > >> > > > > >> > >>>>>> such > > > > > >> > > > > >> > >>>>>>>>> as > > > > > >> > > > > >> > >>>>>>>>> YARN, Mesos, etc. When we initially built > > > > Samza, > > > > > we > > > > > >> > bet > > > > > >> > > > that > > > > > >> > > > > >> > >>>>>>>>> there > > > > > >> > > > > >> > >>>>>> would > > > > > >> > > > > >> > >>>>>>>>> be > > > > > >> > > > > >> > >>>>>>>>> one or two winners in this area, and we > > could > > > > > >> support > > > > > >> > > > them, > > > > > >> > > > > >> and > > > > > >> > > > > >> > >>>>>>>>> the > > > > > >> > > > > >> > >>>>>> rest > > > > > >> > > > > >> > >>>>>>>>> would go away. In reality, there are many > > > > > >> variations. > > > > > >> > > > > >> > >>>>>>>>> Furthermore, > > > > > >> > > > > >> > >>>>>> many > > > > > >> > > > > >> > >>>>>>>>> people still prefer to just start their > > > > > processors > > > > > >> > like > > > > > >> > > > > normal > > > > > >> > > > > >> > >>>>>>>>> Java processes, and use traditional > > > deployment > > > > > >> scripts > > > > > >> > > > such > > > > > >> > > > > as > > > > > >> > > > > >> > >>>>>>>>> Fabric, > > > > > >> > > > > >> > >>>>>> Chef, > > > > > >> > > > > >> > >>>>>>>>> Ansible, etc. Forcing a deployment system > > on > > > > > users > > > > > >> > makes > > > > > >> > > > the > > > > > >> > > > > >> > >>>>>>>>> Samza start-up process really painful for > > > first > > > > > time > > > > > >> > > > users. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Dynamic deployment as a requirement was > > also > > > a > > > > > bit > > > > > >> of > > > > > >> > a > > > > > >> > > > > >> > >>>>>>>>> mis-fire > > > > > >> > > > > >> > >>>>>> because > > > > > >> > > > > >> > >>>>>>>>> of > > > > > >> > > > > >> > >>>>>>>>> a fundamental misunderstanding between > the > > > > > nature of > > > > > >> > > batch > > > > > >> > > > > >> jobs > > > > > >> > > > > >> > >>>>>>>>> and > > > > > >> > > > > >> > >>>>>>> stream > > > > > >> > > > > >> > >>>>>>>>> processing jobs. Early on, we made > > conscious > > > > > effort > > > > > >> to > > > > > >> > > > favor > > > > > >> > > > > >> > >>>>>>>>> the > > > > > >> > > > > >> > >>>>>> Hadoop > > > > > >> > > > > >> > >>>>>>>>> (Map/Reduce) way of doing things, since > it > > > > worked > > > > > >> and > > > > > >> > > was > > > > > >> > > > > well > > > > > >> > > > > >> > >>>>>>> understood. > > > > > >> > > > > >> > >>>>>>>>> One thing that we missed was that batch > > jobs > > > > > have a > > > > > >> > > > definite > > > > > >> > > > > >> > >>>>>> beginning, > > > > > >> > > > > >> > >>>>>>>>> and > > > > > >> > > > > >> > >>>>>>>>> end, and stream processing jobs don't > > > > (usually). > > > > > >> This > > > > > >> > > > leads > > > > > >> > > > > to > > > > > >> > > > > >> > >>>>>>>>> a > > > > > >> > > > > >> > >>>>> much > > > > > >> > > > > >> > >>>>>>>>> simpler scheduling problem for stream > > > > processors. > > > > > >> You > > > > > >> > > > > >> basically > > > > > >> > > > > >> > >>>>>>>>> just > > > > > >> > > > > >> > >>>>>>> need > > > > > >> > > > > >> > >>>>>>>>> to find a place to start the processor, > and > > > > start > > > > > >> it. > > > > > >> > > The > > > > > >> > > > > way > > > > > >> > > > > >> > >>>>>>>>> we run grids, at LinkedIn, there's no > > concept > > > > of > > > > > a > > > > > >> > > cluster > > > > > >> > > > > >> > >>>>>>>>> being "full". We always > > > > > >> > > > > >> > >>>>>> add > > > > > >> > > > > >> > >>>>>>>>> more machines. The problem with coupling > > > Samza > > > > > with > > > > > >> a > > > > > >> > > > > >> scheduler > > > > > >> > > > > >> > >>>>>>>>> is > > > > > >> > > > > >> > >>>>>> that > > > > > >> > > > > >> > >>>>>>>>> Samza (as a framework) now has to handle > > > > > deployment. > > > > > >> > > This > > > > > >> > > > > >> pulls > > > > > >> > > > > >> > >>>>>>>>> in a > > > > > >> > > > > >> > >>>>>>> bunch > > > > > >> > > > > >> > >>>>>>>>> of things such as configuration > > distribution > > > > > (config > > > > > >> > > > > stream), > > > > > >> > > > > >> > >>>>>>>>> shell > > > > > >> > > > > >> > >>>>>>> scrips > > > > > >> > > > > >> > >>>>>>>>> (bin/run-job.sh, JobRunner), packaging > (all > > > the > > > > > .tgz > > > > > >> > > > stuff), > > > > > >> > > > > >> etc. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Another reason for requiring dynamic > > > deployment > > > > > was > > > > > >> to > > > > > >> > > > > support > > > > > >> > > > > >> > >>>>>>>>> data locality. If you want to have > > locality, > > > > you > > > > > >> need > > > > > >> > to > > > > > >> > > > put > > > > > >> > > > > >> > >>>>>>>>> your > > > > > >> > > > > >> > >>>>>> processors > > > > > >> > > > > >> > >>>>>>>>> close to the data they're processing. > Upon > > > > > further > > > > > >> > > > > >> > >>>>>>>>> investigation, > > > > > >> > > > > >> > >>>>>>> though, > > > > > >> > > > > >> > >>>>>>>>> this feature is not that beneficial. > There > > is > > > > > some > > > > > >> > good > > > > > >> > > > > >> > >>>>>>>>> discussion > > > > > >> > > > > >> > >>>>>> about > > > > > >> > > > > >> > >>>>>>>>> some problems with it on SAMZA-335. > Again, > > we > > > > > took > > > > > >> the > > > > > >> > > > > >> > >>>>>>>>> Map/Reduce > > > > > >> > > > > >> > >>>>>> path, > > > > > >> > > > > >> > >>>>>>>>> but > > > > > >> > > > > >> > >>>>>>>>> there are some fundamental differences > > > between > > > > > HDFS > > > > > >> > and > > > > > >> > > > > Kafka. > > > > > >> > > > > >> > >>>>>>>>> HDFS > > > > > >> > > > > >> > >>>>>> has > > > > > >> > > > > >> > >>>>>>>>> blocks, while Kafka has partitions. This > > > leads > > > > to > > > > > >> less > > > > > >> > > > > >> > >>>>>>>>> optimization potential with stream > > processors > > > > on > > > > > top > > > > > >> > of > > > > > >> > > > > Kafka. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> This feature is also used as a crutch. > > Samza > > > > > doesn't > > > > > >> > > have > > > > > >> > > > > any > > > > > >> > > > > >> > >>>>>>>>> built > > > > > >> > > > > >> > >>>>> in > > > > > >> > > > > >> > >>>>>>>>> fault-tolerance logic. Instead, it > depends > > on > > > > the > > > > > >> > > dynamic > > > > > >> > > > > >> > >>>>>>>>> deployment scheduling system to handle > > > restarts > > > > > >> when a > > > > > >> > > > > >> > >>>>>>>>> processor dies. This has > > > > > >> > > > > >> > >>>>>>> made > > > > > >> > > > > >> > >>>>>>>>> it very difficult to write a standalone > > Samza > > > > > >> > container > > > > > >> > > > > >> > >>>> (SAMZA-516). > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Pluggability > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> In some cases pluggability is good, but I > > > think > > > > > that > > > > > >> > > we've > > > > > >> > > > > >> gone > > > > > >> > > > > >> > >>>>>>>>> too > > > > > >> > > > > >> > >>>>>> far > > > > > >> > > > > >> > >>>>>>>>> with it. Currently, Samza has: > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> * Pluggable config. > > > > > >> > > > > >> > >>>>>>>>> * Pluggable metrics. > > > > > >> > > > > >> > >>>>>>>>> * Pluggable deployment systems. > > > > > >> > > > > >> > >>>>>>>>> * Pluggable streaming systems > > > (SystemConsumer, > > > > > >> > > > > SystemProducer, > > > > > >> > > > > >> > >>>> etc). > > > > > >> > > > > >> > >>>>>>>>> * Pluggable serdes. > > > > > >> > > > > >> > >>>>>>>>> * Pluggable storage engines. > > > > > >> > > > > >> > >>>>>>>>> * Pluggable strategies for just about > every > > > > > >> component > > > > > >> > > > > >> > >>>>> (MessageChooser, > > > > > >> > > > > >> > >>>>>>>>> SystemStreamPartitionGrouper, > > ConfigRewriter, > > > > > etc). > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> There's probably more that I've > forgotten, > > as > > > > > well. > > > > > >> > Some > > > > > >> > > > of > > > > > >> > > > > >> > >>>>>>>>> these > > > > > >> > > > > >> > >>>>> are > > > > > >> > > > > >> > >>>>>>>>> useful, but some have proven not to be. > > This > > > > all > > > > > >> comes > > > > > >> > > at > > > > > >> > > > a > > > > > >> > > > > >> cost: > > > > > >> > > > > >> > >>>>>>>>> complexity. This complexity is making it > > > harder > > > > > for > > > > > >> > our > > > > > >> > > > > users > > > > > >> > > > > >> > >>>>>>>>> to > > > > > >> > > > > >> > >>>>> pick > > > > > >> > > > > >> > >>>>>> up > > > > > >> > > > > >> > >>>>>>>>> and use Samza out of the box. It also > makes > > > it > > > > > >> > difficult > > > > > >> > > > for > > > > > >> > > > > >> > >>>>>>>>> Samza developers to reason about what the > > > > > >> > > characteristics > > > > > >> > > > of > > > > > >> > > > > >> > >>>>>>>>> the container (since the characteristics > > > change > > > > > >> > > depending > > > > > >> > > > on > > > > > >> > > > > >> > >>>>>>>>> which plugins are use). > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> The issues with pluggability are most > > visible > > > > in > > > > > the > > > > > >> > > > System > > > > > >> > > > > >> APIs. > > > > > >> > > > > >> > >>>>> What > > > > > >> > > > > >> > >>>>>>>>> Samza really requires to be functional is > > > Kafka > > > > > as > > > > > >> its > > > > > >> > > > > >> > >>>>>>>>> transport > > > > > >> > > > > >> > >>>>>> layer. > > > > > >> > > > > >> > >>>>>>>>> But > > > > > >> > > > > >> > >>>>>>>>> we've conflated two unrelated use cases > > into > > > > one > > > > > >> API: > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> 1. Get data into/out of Kafka. > > > > > >> > > > > >> > >>>>>>>>> 2. Process the data in Kafka. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> The current System API supports both of > > these > > > > use > > > > > >> > cases. > > > > > >> > > > The > > > > > >> > > > > >> > >>>>>>>>> problem > > > > > >> > > > > >> > >>>>>> is, > > > > > >> > > > > >> > >>>>>>>>> we > > > > > >> > > > > >> > >>>>>>>>> actually want different features for each > > use > > > > > case. > > > > > >> By > > > > > >> > > > > >> papering > > > > > >> > > > > >> > >>>>>>>>> over > > > > > >> > > > > >> > >>>>>>> these > > > > > >> > > > > >> > >>>>>>>>> two use cases, and providing a single > API, > > > > we've > > > > > >> > > > introduced > > > > > >> > > > > a > > > > > >> > > > > >> > >>>>>>>>> ton of > > > > > >> > > > > >> > >>>>>>> leaky > > > > > >> > > > > >> > >>>>>>>>> abstractions. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> For example, what we'd really like in (2) > > is > > > to > > > > > have > > > > > >> > > > > >> > >>>>>>>>> monotonically increasing longs for > offsets > > > > (like > > > > > >> > Kafka). > > > > > >> > > > > This > > > > > >> > > > > >> > >>>>>>>>> would be at odds > > > > > >> > > > > >> > >>>>> with > > > > > >> > > > > >> > >>>>>>> (1), > > > > > >> > > > > >> > >>>>>>>>> though, since different systems have > > > different > > > > > >> > > > > >> > >>>>>>> SCNs/Offsets/UUIDs/vectors. > > > > > >> > > > > >> > >>>>>>>>> There was discussion both on the mailing > > list > > > > and > > > > > >> the > > > > > >> > > SQL > > > > > >> > > > > >> JIRAs > > > > > >> > > > > >> > >>>>> about > > > > > >> > > > > >> > >>>>>>> the > > > > > >> > > > > >> > >>>>>>>>> need for this. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> The same thing holds true for > > replayability. > > > > > Kafka > > > > > >> > > allows > > > > > >> > > > us > > > > > >> > > > > >> to > > > > > >> > > > > >> > >>>>> rewind > > > > > >> > > > > >> > >>>>>>>>> when > > > > > >> > > > > >> > >>>>>>>>> we have a failure. Many other systems > > don't. > > > In > > > > > some > > > > > >> > > > cases, > > > > > >> > > > > >> > >>>>>>>>> systems > > > > > >> > > > > >> > >>>>>>> return > > > > > >> > > > > >> > >>>>>>>>> null for their offsets (e.g. > > > > > >> WikipediaSystemConsumer) > > > > > >> > > > > because > > > > > >> > > > > >> > >>>>>>>>> they > > > > > >> > > > > >> > >>>>>> have > > > > > >> > > > > >> > >>>>>>> no > > > > > >> > > > > >> > >>>>>>>>> offsets. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Partitioning is another example. Kafka > > > supports > > > > > >> > > > > partitioning, > > > > > >> > > > > >> > >>>>>>>>> but > > > > > >> > > > > >> > >>>>> many > > > > > >> > > > > >> > >>>>>>>>> systems don't. We model this by having a > > > single > > > > > >> > > partition > > > > > >> > > > > for > > > > > >> > > > > >> > >>>>>>>>> those systems. Still, other systems model > > > > > >> partitioning > > > > > >> > > > > >> > >>>> differently (e.g. > > > > > >> > > > > >> > >>>>>>>>> Kinesis). > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> The SystemAdmin interface is also a mess. > > > > > Creating > > > > > >> > > streams > > > > > >> > > > > in > > > > > >> > > > > >> a > > > > > >> > > > > >> > >>>>>>>>> system-agnostic way is almost impossible. > > As > > > is > > > > > >> > modeling > > > > > >> > > > > >> > >>>>>>>>> metadata > > > > > >> > > > > >> > >>>>> for > > > > > >> > > > > >> > >>>>>>> the > > > > > >> > > > > >> > >>>>>>>>> system (replication factor, partitions, > > > > location, > > > > > >> > etc). > > > > > >> > > > The > > > > > >> > > > > >> > >>>>>>>>> list > > > > > >> > > > > >> > >>>>> goes > > > > > >> > > > > >> > >>>>>>> on. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Duplicate work > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> At the time that we began writing Samza, > > > > Kafka's > > > > > >> > > consumer > > > > > >> > > > > and > > > > > >> > > > > >> > >>>>> producer > > > > > >> > > > > >> > >>>>>>>>> APIs > > > > > >> > > > > >> > >>>>>>>>> had a relatively weak feature set. On the > > > > > >> > consumer-side, > > > > > >> > > > you > > > > > >> > > > > >> > >>>>>>>>> had two > > > > > >> > > > > >> > >>>>>>>>> options: use the high level consumer, or > > the > > > > > simple > > > > > >> > > > > consumer. > > > > > >> > > > > >> > >>>>>>>>> The > > > > > >> > > > > >> > >>>>>>> problem > > > > > >> > > > > >> > >>>>>>>>> with the high-level consumer was that it > > > > > controlled > > > > > >> > your > > > > > >> > > > > >> > >>>>>>>>> offsets, partition assignments, and the > > order > > > > in > > > > > >> which > > > > > >> > > you > > > > > >> > > > > >> > >>>>>>>>> received messages. The > > > > > >> > > > > >> > >>>>> problem > > > > > >> > > > > >> > >>>>>>>>> with > > > > > >> > > > > >> > >>>>>>>>> the simple consumer is that it's not > > simple. > > > > It's > > > > > >> > basic. > > > > > >> > > > You > > > > > >> > > > > >> > >>>>>>>>> end up > > > > > >> > > > > >> > >>>>>>> having > > > > > >> > > > > >> > >>>>>>>>> to handle a lot of really low-level stuff > > > that > > > > > you > > > > > >> > > > > shouldn't. > > > > > >> > > > > >> > >>>>>>>>> We > > > > > >> > > > > >> > >>>>>> spent a > > > > > >> > > > > >> > >>>>>>>>> lot of time to make Samza's > > > KafkaSystemConsumer > > > > > very > > > > > >> > > > robust. > > > > > >> > > > > >> It > > > > > >> > > > > >> > >>>>>>>>> also allows us to support some cool > > features: > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> * Per-partition message ordering and > > > > > prioritization. > > > > > >> > > > > >> > >>>>>>>>> * Tight control over partition assignment > > to > > > > > support > > > > > >> > > > joins, > > > > > >> > > > > >> > >>>>>>>>> global > > > > > >> > > > > >> > >>>>>> state > > > > > >> > > > > >> > >>>>>>>>> (if we want to implement it :)), etc. > > > > > >> > > > > >> > >>>>>>>>> * Tight control over offset > checkpointing. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> What we didn't realize at the time is > that > > > > these > > > > > >> > > features > > > > > >> > > > > >> > >>>>>>>>> should > > > > > >> > > > > >> > >>>>>>> actually > > > > > >> > > > > >> > >>>>>>>>> be in Kafka. A lot of Kafka consumers > (not > > > just > > > > > >> Samza > > > > > >> > > > stream > > > > > >> > > > > >> > >>>>>> processors) > > > > > >> > > > > >> > >>>>>>>>> end up wanting to do things like joins > and > > > > > partition > > > > > >> > > > > >> > >>>>>>>>> assignment. The > > > > > >> > > > > >> > >>>>>>> Kafka > > > > > >> > > > > >> > >>>>>>>>> community has come to the same > conclusion. > > > > > They're > > > > > >> > > adding > > > > > >> > > > a > > > > > >> > > > > >> ton > > > > > >> > > > > >> > >>>>>>>>> of upgrades into their new Kafka consumer > > > > > >> > > implementation. > > > > > >> > > > > To a > > > > > >> > > > > >> > >>>>>>>>> large extent, > > > > > >> > > > > >> > >>>>> it's > > > > > >> > > > > >> > >>>>>>>>> duplicate work to what we've already done > > in > > > > > Samza. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> On top of this, Kafka ended up taking a > > very > > > > > similar > > > > > >> > > > > approach > > > > > >> > > > > >> > >>>>>>>>> to > > > > > >> > > > > >> > >>>>>> Samza's > > > > > >> > > > > >> > >>>>>>>>> KafkaCheckpointManager implementation for > > > > > handling > > > > > >> > > offset > > > > > >> > > > > >> > >>>>>> checkpointing. > > > > > >> > > > > >> > >>>>>>>>> Like Samza, Kafka's new offset management > > > > feature > > > > > >> > stores > > > > > >> > > > > >> offset > > > > > >> > > > > >> > >>>>>>>>> checkpoints in a topic, and allows you to > > > fetch > > > > > them > > > > > >> > > from > > > > > >> > > > > the > > > > > >> > > > > >> > >>>>>>>>> broker. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> A lot of this seems like a waste, since > we > > > > could > > > > > >> have > > > > > >> > > > shared > > > > > >> > > > > >> > >>>>>>>>> the > > > > > >> > > > > >> > >>>>> work > > > > > >> > > > > >> > >>>>>> if > > > > > >> > > > > >> > >>>>>>>>> it > > > > > >> > > > > >> > >>>>>>>>> had been done in Kafka from the get-go. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Vision > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> All of this leads me to a rather radical > > > > > proposal. > > > > > >> > Samza > > > > > >> > > > is > > > > > >> > > > > >> > >>>>> relatively > > > > > >> > > > > >> > >>>>>>>>> stable at this point. I'd venture to say > > that > > > > > we're > > > > > >> > > near a > > > > > >> > > > > 1.0 > > > > > >> > > > > >> > >>>>>> release. > > > > > >> > > > > >> > >>>>>>>>> I'd > > > > > >> > > > > >> > >>>>>>>>> like to propose that we take what we've > > > > learned, > > > > > and > > > > > >> > > begin > > > > > >> > > > > >> > >>>>>>>>> thinking > > > > > >> > > > > >> > >>>>>>> about > > > > > >> > > > > >> > >>>>>>>>> Samza beyond 1.0. What would we change if > > we > > > > were > > > > > >> > > starting > > > > > >> > > > > >> from > > > > > >> > > > > >> > >>>>>> scratch? > > > > > >> > > > > >> > >>>>>>>>> My > > > > > >> > > > > >> > >>>>>>>>> proposal is to: > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> 1. Make Samza standalone the *only* way > to > > > run > > > > > Samza > > > > > >> > > > > >> > >>>>>>>>> processors, and eliminate all direct > > > > dependences > > > > > on > > > > > >> > > YARN, > > > > > >> > > > > >> Mesos, > > > > > >> > > > > >> > >>>> etc. > > > > > >> > > > > >> > >>>>>>>>> 2. Make a definitive call to support only > > > Kafka > > > > > as > > > > > >> the > > > > > >> > > > > stream > > > > > >> > > > > >> > >>>>>> processing > > > > > >> > > > > >> > >>>>>>>>> layer. > > > > > >> > > > > >> > >>>>>>>>> 3. Eliminate Samza's metrics, logging, > > > > > >> serialization, > > > > > >> > > and > > > > > >> > > > > >> > >>>>>>>>> config > > > > > >> > > > > >> > >>>>>>> systems, > > > > > >> > > > > >> > >>>>>>>>> and simply use Kafka's instead. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> This would fix all of the issues that I > > > > outlined > > > > > >> > above. > > > > > >> > > It > > > > > >> > > > > >> > >>>>>>>>> should > > > > > >> > > > > >> > >>>>> also > > > > > >> > > > > >> > >>>>>>>>> shrink the Samza code base pretty > > > dramatically. > > > > > >> > > Supporting > > > > > >> > > > > >> only > > > > > >> > > > > >> > >>>>>>>>> a standalone container will allow Samza > to > > be > > > > > >> executed > > > > > >> > > on > > > > > >> > > > > YARN > > > > > >> > > > > >> > >>>>>>>>> (using Slider), Mesos (using > > > Marathon/Aurora), > > > > or > > > > > >> most > > > > > >> > > > other > > > > > >> > > > > >> > >>>>>>>>> in-house > > > > > >> > > > > >> > >>>>>>> deployment > > > > > >> > > > > >> > >>>>>>>>> systems. This should make life a lot > easier > > > for > > > > > new > > > > > >> > > users. > > > > > >> > > > > >> > >>>>>>>>> Imagine > > > > > >> > > > > >> > >>>>>>> having > > > > > >> > > > > >> > >>>>>>>>> the hello-samza tutorial without YARN. > The > > > drop > > > > > in > > > > > >> > > mailing > > > > > >> > > > > >> list > > > > > >> > > > > >> > >>>>>> traffic > > > > > >> > > > > >> > >>>>>>>>> will be pretty dramatic. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Coupling with Kafka seems long overdue to > > me. > > > > The > > > > > >> > > reality > > > > > >> > > > > is, > > > > > >> > > > > >> > >>>>> everyone > > > > > >> > > > > >> > >>>>>>>>> that > > > > > >> > > > > >> > >>>>>>>>> I'm aware of is using Samza with Kafka. > We > > > > > basically > > > > > >> > > > require > > > > > >> > > > > >> it > > > > > >> > > > > >> > >>>>>> already > > > > > >> > > > > >> > >>>>>>> in > > > > > >> > > > > >> > >>>>>>>>> order for most features to work. Those > that > > > are > > > > > >> using > > > > > >> > > > other > > > > > >> > > > > >> > >>>>>>>>> systems > > > > > >> > > > > >> > >>>>>> are > > > > > >> > > > > >> > >>>>>>>>> generally using it for ingest into Kafka > > (1), > > > > and > > > > > >> then > > > > > >> > > > they > > > > > >> > > > > do > > > > > >> > > > > >> > >>>>>>>>> the processing on top. There is already > > > > > discussion ( > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > > > > > > >> > > > > > > > > > >> > > > > > > > > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=58851 > > > > > >> > > > > >> > >>>>> 767 > > > > > >> > > > > >> > >>>>>>>>> ) > > > > > >> > > > > >> > >>>>>>>>> in Kafka to make ingesting into Kafka > > > extremely > > > > > >> easy. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Once we make the call to couple with > Kafka, > > > we > > > > > can > > > > > >> > > > leverage > > > > > >> > > > > a > > > > > >> > > > > >> > >>>>>>>>> ton of > > > > > >> > > > > >> > >>>>>>> their > > > > > >> > > > > >> > >>>>>>>>> ecosystem. We no longer have to maintain > > our > > > > own > > > > > >> > config, > > > > > >> > > > > >> > >>>>>>>>> metrics, > > > > > >> > > > > >> > >>>>> etc. > > > > > >> > > > > >> > >>>>>>> We > > > > > >> > > > > >> > >>>>>>>>> can all share the same libraries, and > make > > > them > > > > > >> > better. > > > > > >> > > > This > > > > > >> > > > > >> > >>>>>>>>> will > > > > > >> > > > > >> > >>>>> also > > > > > >> > > > > >> > >>>>>>>>> allow us to share the consumer/producer > > APIs, > > > > and > > > > > >> will > > > > > >> > > let > > > > > >> > > > > us > > > > > >> > > > > >> > >>>>> leverage > > > > > >> > > > > >> > >>>>>>>>> their offset management and partition > > > > management, > > > > > >> > rather > > > > > >> > > > > than > > > > > >> > > > > >> > >>>>>>>>> having > > > > > >> > > > > >> > >>>>>> our > > > > > >> > > > > >> > >>>>>>>>> own. All of the coordinator stream code > > would > > > > go > > > > > >> away, > > > > > >> > > as > > > > > >> > > > > >> would > > > > > >> > > > > >> > >>>>>>>>> most > > > > > >> > > > > >> > >>>>>> of > > > > > >> > > > > >> > >>>>>>>>> the > > > > > >> > > > > >> > >>>>>>>>> YARN AppMaster code. We'd probably have > to > > > push > > > > > some > > > > > >> > > > > partition > > > > > >> > > > > >> > >>>>>>> management > > > > > >> > > > > >> > >>>>>>>>> features into the Kafka broker, but > they're > > > > > already > > > > > >> > > moving > > > > > >> > > > > in > > > > > >> > > > > >> > >>>>>>>>> that direction with the new consumer API. > > The > > > > > >> features > > > > > >> > > we > > > > > >> > > > > have > > > > > >> > > > > >> > >>>>>>>>> for > > > > > >> > > > > >> > >>>>>> partition > > > > > >> > > > > >> > >>>>>>>>> assignment aren't unique to Samza, and > seem > > > > like > > > > > >> they > > > > > >> > > > should > > > > > >> > > > > >> be > > > > > >> > > > > >> > >>>>>>>>> in > > > > > >> > > > > >> > >>>>>> Kafka > > > > > >> > > > > >> > >>>>>>>>> anyway. There will always be some niche > > > usages > > > > > which > > > > > >> > > will > > > > > >> > > > > >> > >>>>>>>>> require > > > > > >> > > > > >> > >>>>>> extra > > > > > >> > > > > >> > >>>>>>>>> care and hence full control over > partition > > > > > >> assignments > > > > > >> > > > much > > > > > >> > > > > >> > >>>>>>>>> like the > > > > > >> > > > > >> > >>>>>>> Kafka > > > > > >> > > > > >> > >>>>>>>>> low level consumer api. These would > > continue > > > to > > > > > be > > > > > >> > > > > supported. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> These items will be good for the Samza > > > > community. > > > > > >> > > They'll > > > > > >> > > > > make > > > > > >> > > > > >> > >>>>>>>>> Samza easier to use, and make it easier > for > > > > > >> developers > > > > > >> > > to > > > > > >> > > > > add > > > > > >> > > > > >> > >>>>>>>>> new features. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Obviously this is a fairly large (and > > > somewhat > > > > > >> > backwards > > > > > >> > > > > >> > >>>>> incompatible > > > > > >> > > > > >> > >>>>>>>>> change). If we choose to go this route, > > it's > > > > > >> important > > > > > >> > > > that > > > > > >> > > > > we > > > > > >> > > > > >> > >>>>> openly > > > > > >> > > > > >> > >>>>>>>>> communicate how we're going to provide a > > > > > migration > > > > > >> > path > > > > > >> > > > from > > > > > >> > > > > >> > >>>>>>>>> the > > > > > >> > > > > >> > >>>>>>> existing > > > > > >> > > > > >> > >>>>>>>>> APIs to the new ones (if we make > > incompatible > > > > > >> > changes). > > > > > >> > > I > > > > > >> > > > > >> think > > > > > >> > > > > >> > >>>>>>>>> at a minimum, we'd probably need to > > provide a > > > > > >> wrapper > > > > > >> > to > > > > > >> > > > > allow > > > > > >> > > > > >> > >>>>>>>>> existing StreamTask implementations to > > > continue > > > > > >> > running > > > > > >> > > on > > > > > >> > > > > the > > > > > >> > > > > >> > >>>> new container. > > > > > >> > > > > >> > >>>>>>> It's > > > > > >> > > > > >> > >>>>>>>>> also important that we openly communicate > > > about > > > > > >> > timing, > > > > > >> > > > and > > > > > >> > > > > >> > >>>>>>>>> stages > > > > > >> > > > > >> > >>>>> of > > > > > >> > > > > >> > >>>>>>> the > > > > > >> > > > > >> > >>>>>>>>> migration. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> If you made it this far, I'm sure you > have > > > > > opinions. > > > > > >> > :) > > > > > >> > > > > Please > > > > > >> > > > > >> > >>>>>>>>> send > > > > > >> > > > > >> > >>>>>> your > > > > > >> > > > > >> > >>>>>>>>> thoughts and feedback. > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>>> Cheers, > > > > > >> > > > > >> > >>>>>>>>> Chris > > > > > >> > > > > >> > >>>>>>>>> > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>>> > > > > > >> > > > > >> > >>>>>>> > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>>> -- > > > > > >> > > > > >> > >>>>>> -- Guozhang > > > > > >> > > > > >> > >>>>>> > > > > > >> > > > > >> > >>>>> > > > > > >> > > > > >> > >>>> > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > >> > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > > > > > > > > > >