I broadly support it, with one big proviso. One of the attractive things about Kafka has been its minimalism -- the fact that it solves one part of the problem, simply, and very well. It is very important that it continues to do that, and that people continue to perceive it that way. Make Kafka into a stack, if you must, but make sure that the architectural layers remain clear.
Making perfectly good software components into a muddled stack is one of the pitfalls of success, and in particular a pitfall of being a software company with a sales team looking for a bigger pieces to sell and customers looking for "simpler" large components to install. Avoid at all costs! 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 >> >> > > > > >> > >>>>>> >> >> > > > > >> > >>>>> >> >> > > > > >> > >>>> >> >> > > > > >> > >> >> >> > > > > >> > >> >> >> > > > > >> > >> >> > > > > >> > >> >> > > > > >> > >> >> > > > > >> >> >> > > > > > >> >> > > > > > >> >> > > > > >> >> > > > >> >> > > >> >> > >> >> >>