The Author Online Book Forums are Moving

The Author Online Book Forums will soon redirect to Manning's liveBook and liveVideo. All book forum content will migrate to liveBook's discussion forum and all video forum content will migrate to liveVideo. Log in to liveBook or liveVideo with your Manning credentials to join the discussion!

Thank you for your engagement in the AoF over the years! We look forward to offering you a more enhanced forum experience.

alexander.dean (12) [Avatar] Offline
Hi everybody,

If you have any questions about the MEAP, don't be shy - please go ahead and ask them here or create a dedicated thread!


Message was edited by:
justinc (16) [Avatar] Offline
Re: Any initial questions about the MEAP?
I'm having issues on Windows with kafka and zookeeper.

I am going to try with a linux VM

from inside my kafka directory

Error: Could not find or load main class org.apache.zookeeper.server.quorum.Quor

I looked at some online forums, they suggested a binary, not source version (same problem) and another mentioned the scripts were "updated in trunk but not backported to 8.1.1" I found code on github but the scripts were the same and from 2 years ago
justinc (16) [Avatar] Offline
Re: Any initial questions about the MEAP?
Tried to use Ubuntu desktop 14.04 for the exercises
Java installed, gradle installed

when I try gradle init --type java-library, I get this error
FAILURE: Could not determine which tasks to execute.

I created the directories by hand and added the and to src/main & src/test. I added the build.gradle file to the hellocalculator directory

running gradle jar is successful but the jar doesn't have anything inside it. I tried keeping the 2 java files in the root (hellocalculator) directory as well. same problem. gradle jar command runs but the jar only has a manifest. if I try to run it, I receive
Error: Could not find or load main class hellocalculator.HelloCalculator

so in windows I have the code working but can't run kafka/zookeeper. in Linux I cant get the code to run!

alexander.dean (12) [Avatar] Offline
Re: Sending events to Kafka
Thanks for the suggestion - it's a good idea to make that clear in chapter 2. I've added a ticket to remind myself!
alexander.dean (12) [Avatar] Offline
Re: Any initial questions about the MEAP?
Hi justinc,

Thanks for your messages. All the code examples in the book will assume a Linux/Ubuntu-like environment - so yes Ubuntu VM rather than Windows is the way to go.

Sorry to hear that your Gradle init is causing errors. Can you let me know:

- Which version of Java you've installed
- Which version of Gradle you've installed

I'll create a ticket so we can figure this one out and update the book accordingly:
alexander.dean (12) [Avatar] Offline
Re: Any initial questions about the MEAP?
Thanks Justin - I will post back as soon as I have a fix for your problem...
alexander.dean (12) [Avatar] Offline
Re: Any initial questions about the MEAP?
Hi Kayolan,

You raise a really interesting point - how far can we go in unifying our event streams when we have business requirements like PCI which demand effective silo'ing? There is a cousin issue in finance which is, how do you confirm that no events have been lost through a unified log processing flow (i.e. build a transaction for accounting purposes, paying media royalties etc). I will add tickets to make sure both of these get covered in the book:


Many thanks for raising!
21495 (1) [Avatar] Offline
Hello, just cloned the repository, cd into it, do a vagrant up and get the error below. Try to vagrant ssh anyway and when do the cd /vagrant/vagrant && ./grid bootstrap command from the bash prompt I just get : invalid option as response. Running Win10, Vagrant 1.8.1, Virtualbox 5.0.14

==> default: === finished ansible_playbooks ===
==> default: git clone
==> default: Cloning into bare repository '/vagrant/vagrant/.peru/cache/plugins/git/3bea42418f808e5e2cd6c307e10a7c887a5c818c/3d5cd1943db8a1f9ece48b68db31811e67634db2'...
==> default: remote: Counting objects: 1778, done.
remote: Total 1778 (delta 0), reused 0 (delta 0), pack-reused 1778
Receiving objects: 100% (1778/1778), 205.05 KiB | 36.00 KiB/s, done.KiB/s
Resolving deltas:  82% (619/754)    (0/754)
Resolving deltas: 100% (754/754), done.
==> default: Checking connectivity... done.
==> default: git fetch
==> default: ===
==> default: Traceback (most recent call last):
==> default:   File "/usr/local/bin/peru", line 9, in <module>
==> default:     load_entry_point('peru==0.3.2', 'console_scripts', 'peru')()
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 345, in main
==> default:     async.run_task(command_fn(params))
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 25, in run_task
==> default:     return asyncio.get_event_loop().run_until_complete(coro)
==> default:   File "/usr/lib/python3.4/asyncio/", line 316, in run_until_complete
==> default:     return future.result()
==> default:   File "/usr/lib/python3.4/asyncio/", line 275, in result
==> default:     raise self._exception
==> default:   File "/usr/lib/python3.4/asyncio/", line 236, in _step
==> default:     result = coro.send(value)
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 91, in do_sync
==> default:     params.runtime, params.scope, params.imports, params.runtime.sync_dir)
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 18, in checkout
==> default:     previous_index_file=index)
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 414, in export_tree
==> default:     yield from session.checkout_files_from_index()
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 189, in checkout_files_from_index
==> default:     yield from self.git('checkout-index', '--all')
==> default:   File "/usr/local/lib/python3.4/dist-packages/peru/", line 77, in git
==> default:     raise GitError(command, process.returncode, stdout, stderr)
==> default: peru.cache.GitError: git command "['git', '--git-dir=/vagrant/vagrant/.peru/cache/trees', '--work-tree=/vagrant/vagrant', 'checkout-index', '--all']" returned error code 128.
==> default: stdout:
==> default: stderr: ansible/docsite/_themes/srtd/ already exists, no checkout
==> default: ansible/lib/ansible/runner/action_plugins/ already exists, no checkout
==> default: ansible/library/cloud/rds already exists, no checkout
==> default: ansible/library/packaging/urpmi already exists, no checkout
==> default: ansible/plugins/inventory/ec2.ini already exists, no checkout
==> default: oss-playbooks/roles/scala/defaults/main.yml already exists, no checkout
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
319045 (2) [Avatar] Offline
Hello Alexander and thank you for this wonderful book, you did not disappoint me: very good approach and no reference to CQRS (I don't like buzzwords), very nice to see the event sourcing approach applied using the unified log. Very clean decoupling. Cool stuff.

I was very eager to see the chapter on Idempotency because of the timing issue that might arise when working with a producer/consumer approach like this. Kafka handles well the event offset retrieval/save but still, your code needs to be aware of it.

I was wondering whether you are still planning to add it.

Thanks a lot!
Marco Massenzio (6) [Avatar] Offline
So, three years on, and at least one year or more since the latest update, I'm wondering is there any plan to continue progress on this book?

At the very least, have decent diagrams beyond the "back-of-the-napkin" ones?

In other words, can we expect an update at any time over the next couple of months, or can we assume this to be an "abandoned" project?

Thanks in advance.