Awesome
Hailstorm
Hailstorm is a distributed stream computation system that uses exactly once semantics.
Written by Thomas Dimson (@cosbynator) and Milind Ganjoo (@mganjoo).
References
The architecture of Hailstorm is based on Apache Storm (which is also the inspiration for the name).
The exactly-one semantics implemented in Hailstorm are based on a high-level description in an essay by @jasonjckn.
Dependencies
Zookeeper
Hailstorm requires Apache Zookeeper, its C
bindings, and its Haskell bindings
hzk
to run.
On OSX, the zookeeper
package on homebrew contains the
binaries and C bindings for Zookeeper. You can install it as follows:
brew install --c zookeeper
On Ubuntu, we recommend following the official instructions to obtain and set up the Zookeeper binaries. To install the C bindings:
sudo apt-get install libzookeeper-mt-dev
Finally, to build and install hzk
on Mac OS X, run the following command in
your cabal sandbox:
cabal install --extra-include-dirs=/usr/local/include/zookeeper hzk
The above command is required on Mac OS X because of the non-standard include
directory location. On Ubuntu, cabal install hzk
should work.
Kafka
Hailstorm requires Apache Kafka to be installed and operating. See the official instructions for details.
Haskakafka
Hailstorm uses
Haskakafka, the Haskell bindings
written by our very own @cosbynator. Haskakfka, in
turn, depends on librdkafka
(see the Haskakafka project page for installation
instructions).
Haskakafka itself is not available yet on Cabal, so install
cabalg
and
c2hs
into your sandbox:
cabal install c2hs
cabal install cabalg
.cabal-sandbox/bin/cabalg https://github.com/cosbynator/haskakafka.git
On OS X, you may get 'stdio.h'
errors, in which case you should try:
.cabal-sandbox/bin/cabalg https://github.com/cosbynator/haskakafka.git -- --with-gcc=gcc-4.8
And you are done!
Running
First, start an instance of Zookeeper (zkServer start
on Mac or zkServer.sh start
on Ubuntu).
Before running Hailstorm for the first time, you will have to initialize your
topology using the zk_init
subcommand:
hailstorm zk_init
Finally, run a sample topology:
hailstorm -f data/test.txt run_sample
While it is running, you can extract debug metadata by executing
hailstorm zk_show