Get Started

Get Started

These guides demonstrate how to get started quickly with Hazelcast IMDG and Hazelcast Jet.

Hazelcast IMDG

Learn how to store and retrieve data from a distributed key-value store using Hazelcast IMDG. In this guide you’ll learn how to:

  • Create a cluster of 3 members.
  • Start Hazelcast Management Center
  • Add data to the cluster using a sample client in the language of your choice
  • Add and remove some cluster members to demonstrate data balancing capabilities of Hazelcast

Hazelcast Jet

Learn how to build a distributed data processing pipeline in Java using Hazelcast Jet. In this guide you’ll learn how to:

  • Install Hazelcast Jet and form a cluster on your computer
  • Build a simple pipeline that receives a stream of data, does some calculations and outputs some results
  • Submit the pipeline as a job to the cluster and observe the results
  • Scale the cluster up and down while the job is still running

Jet 3.0 Streaming Benchmark


Summary of Findings

The streaming benchmark is intended to measure the latency overhead for a streaming system under different conditions such as message rate and window size. It compares Hazelcast Jet, Apache Flink, and Apache Spark Streaming.

Summary of Findings

  1. Jet is the only system with a latency below one second across all benchmarks.
  2. Spark’s max latency exceeds five seconds in all benchmarks.
  3. Flink and Spark were unable to keep up for the 10-second window sliding by 100 milliseconds. Their reported max latency is therefore just an artifact of the duration of the benchmark. Actually, their max and average latency is unbounded.

Benchmark Design

The streaming benchmark is based on a stock exchange aggregation. Each message representing a trade is published to Kafka and then a simple windowed aggregation which calculates the number of traders per ticker symbol is done using various data processing frameworks.

The latency is measured as the delay between the earliest time we could have received results for the window the event is in, and the actual time the result was received.

For example, if we want the result for events happening between 12:00:00.000 and 12:00:01.000, theoretically, the earliest time we can get an aggregated result is at 12:00:01.000. However, this does not take into account that events happening at 12:00:00.999 might not reach the system immediately and there also can be some out of orderness due to partitioning (Kafka only guarantees ordering by partition).

As a solution, we need to allow for some delay to allow all the events to reach the system. If the delay is configured as one second, we should wait until receiving an event with timestamp 12:00:02 before we can compute the window for events that happened between 12:00:00-12:00:01. Based on this, the earliest time we can get a result will be the time when we received an event with a timestamp 12:00:02.000. If the system’s actual output happens at 12:00.02.100, then we define the latency as 100ms. This latency includes all of the following:

  • Time for message to be published to the broker
  • Time for message to be consumed by the framework
  • Time for message to be processed

Each framework is expected to output tuples to one or more files in the following format:


WINDOW_TIME is defined as the end time of a window. For example, for a window of events between 12:00:00 and 12:00:01, the WINDOW value would be 12:00:01. Latency can then be calculated based on the difference between the WINDOW and the CALCULATION_TIME.

A sample output could look as follows:


The first value is the window close timestamp, which indicates what time period this value is for (WINDOW_TIME). The second value is the stock ticker, and the third the count for that ticker within that window. The next value represents when the processing for that window was completed (CALCULATION_TIME), and the last value (LATENCY) is simply CALCULATION_TIME – WINDOW_TIME.

If the allowed latency was 1000 ms, then this number should also be subtracted from LATENCY to find the real latency of the processing framework.

The following windowing combinations are tested:

  • 1-second tumbling window
  • 10 seconds by 100 milliseconds sliding window
  • 60 seconds by 1-second sliding window

Allowed out of orderness is 1 sec

The output files as above are parsed by a simple log parser written in Python to calculate the average latencies.

All source is available here: big-data-benchmark

Tool Configuration

Benchmark Tool Configuration

  • Benchmark Tool Configuration T Clock drift was about 5-6 ms so the final values can be +-6ms off.
  • Used OpenJDK version 1.8.
  • All tests performed on AWS using 10Gbit network.






Benchmark Results

All latency results are given in milliseconds, to three significant digits.

Due to clock skew between machines, there is a ±20 ms uncertainty in the results. This is especially relevant to Jet’s results, where we measured about 22 ms minimum latency. The real minimum latency may be closer 0-2 ms and average latency about 20 ms.

Duration of a benchmark run: 140 seconds.

The tests used 2 million messages per second and 10,000 distinct keys.

Latency Distribution Charts

The 1-second tumbling window is the only benchmark for which it makes sense to compare all three of Jet, Flink and Spark on the same chart.

One-second tumbling window:Jet 3.0 Benchmark: One Second Tumbling Window


60-second window sliding by 1 second:
Jet 3.0 Benchmark: 10-second window sliding by 1 second


10-second window sliding by 0.1 seconds:
Jet 3.0 Benchmark: 10-second window sliding by 0.1 seconds

Open Gitter Chat