Hi Regu,
Thanks for your interest in NetflixOSS and Zeno! Let me try to answer your questions in order:
1) I think your interpretation is correct, the idea is to apply your entire set of object data to the FastBlobStateEngine on each cycle. Zeno will automatically calculate the differences between the data states, then you can serialize a delta which will contain the calculated differences.
This doesn't necessarily mean you have to read the entire data set from your source of truth and reconstruct everything for each cycle (although this is what we do). Instead, for all or some of your data model, you can hold objects in memory on your "data origination server", then simply re-add them all to the FastBlobStateEngine on each cycle.
For your example, this would mean that you would update the price field for each Product, then add all of the Products to the state engine.
2) The "delta" files are set of changes to apply to your complete in-memory data set to bring it up to date. Hopefully you won't have to worry about the granularity of changes to blob consumers, these details should be transparent.
You won't require any versioning in your source of truth. However, if you choose to use a persistent file store for your "blob" data (as we do), you'll probably want to be able to version your blob files.
Your clients (blob consumers) will always try to get as up-to-date as possible, so each will always want to start with its current data state's version and load deltas until no more are available. The way we do this is to name the delta files in our persistent data store with the version to which they should be applied. Then the client logic is to always look for a delta blob file to apply to its current FastBlobStateEngine version.
I think each data state might be considered a "checkpoint" for your clients. Imagine the data states you are producing are chained together via deltas. A fast client may be at the state just before the latest, but a slow client may be a few states behind. The fast client can get up to date by consuming a single delta. The slower client will get up to date by consuming multiple deltas.
The only nod to blob transmission logic that Zeno provides is a version tag. Zeno's FastBlobStateEngine contains a field "latestVersion". On the server, set this field prior to producing blob files. On the client, when you load a blob file, this field will be set to whatever it was set to on the server when the blob file was produced.
Thanks for the pointer about LinkedIn Databus library; I'm actually unfamiliar with this. I'll have to take a look at the details and get back to you.
Please let me know if I've answered your questions. If you would like me to go into more detail about anything here, I'll be happy to, please let me know.
Thanks again,
Drew.