
A golang framework for streaming event processing & data pipeline apps
Firebolt has a simple model intended to make it easier to write reliable pipeline applications that process a stream of data.
It can be used to build systems such as:
Every application's pipeline starts with a single source, the component that receives events from some external system. Sources
must implement the node.Source interface.
We provide one built-in source:
[]byteThe processing of your application is executed by its nodes which form a processing tree. Data - events - flow down
this tree. A parent node passes results down to it's child nodes. Nodes may process events synchronously or
asynchronously. A synchronous node type node.FanoutNode returns a slice of results for fanout or 'demultiplexing' use
cases. Each node must implement the node.SyncNode, node.FanoutNode, or node.AsyncNode interfaces accordingly.
We provide two built-in node types:
Firebolt has both run and compile-time dependencies on librdkafka, see Developing
At DigitalOcean, our first use of Firebolt was in our logging pipeline. This pipeline consumes logs from just about every system we run. The diagram below depicts the source and nodes in this application.
This system uses the built-in kafkaconsumer source (in yellow) and kafkaproducer and elasticsearch nodes (in green).
The blue nodes are custom to this application.

Firebolt is intended to address a number of concerns that are common to near-realtime data pipeline applications, making it easy to run a clustered application that scales predictably to handle large data volume.
It is not an analytics tool - it does not provide an easy way to support 'wide operations' like record grouping, windowing, or sorting that require shuffling data within the cluster. Firebolt is for 'straight through' processing pipelines that are not sensitive to the order in which events are processed.
Some of the concerns Firebolt addresses include:
nil in your nodesConfiguration The configuration file format
Execution How Firebolt processes your data
Registry Adding node types to the registry
Sample Application Code Example code for running the Firebolt executor
Sources Implementing and using sources
Sync Nodes Implementing and using synchronous nodes
Fanout Nodes Implementing and using fanout nodes
Async Nodes Implementing and using asynchronous nodes
Leader Election Starting leader election and accessing election results
Messaging How to send and receive messages between the components of your system
Metrics What metrics are exposed by default, and how to add custom metrics to your nodes
Kafka Producer Node for producing events onto a Kafka topic
Elasticsearch Node for indexing documents to an Elasticsearch cluster
Firebolt depends on librdkafka v1.3.0 or later. To get started building a firebolt app (or working on firebolt itself), install it following the instructions here.
An example for debian-based distros:
sudo wget -qO - https://packages.confluent.io/deb/5.4/archive.key | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.confluent.io/deb/5.4 stable main"
sudo apt-get update
sudo apt-get install -y librdkafka1 librdkafka-dev
Go
99.4%

A golang framework for streaming event processing & data pipeline apps
Firebolt has a simple model intended to make it easier to write reliable pipeline applications that process a stream of data.
It can be used to build systems such as:
Every application's pipeline starts with a single source, the component that receives events from some external system. Sources
must implement the node.Source interface.
We provide one built-in source:
[]byteThe processing of your application is executed by its nodes which form a processing tree. Data - events - flow down
this tree. A parent node passes results down to it's child nodes. Nodes may process events synchronously or
asynchronously. A synchronous node type node.FanoutNode returns a slice of results for fanout or 'demultiplexing' use
cases. Each node must implement the node.SyncNode, node.FanoutNode, or node.AsyncNode interfaces accordingly.
We provide two built-in node types:
Firebolt has both run and compile-time dependencies on librdkafka, see Developing
At DigitalOcean, our first use of Firebolt was in our logging pipeline. This pipeline consumes logs from just about every system we run. The diagram below depicts the source and nodes in this application.
This system uses the built-in kafkaconsumer source (in yellow) and kafkaproducer and elasticsearch nodes (in green).
The blue nodes are custom to this application.

Firebolt is intended to address a number of concerns that are common to near-realtime data pipeline applications, making it easy to run a clustered application that scales predictably to handle large data volume.
It is not an analytics tool - it does not provide an easy way to support 'wide operations' like record grouping, windowing, or sorting that require shuffling data within the cluster. Firebolt is for 'straight through' processing pipelines that are not sensitive to the order in which events are processed.
Some of the concerns Firebolt addresses include:
nil in your nodesConfiguration The configuration file format
Execution How Firebolt processes your data
Registry Adding node types to the registry
Sample Application Code Example code for running the Firebolt executor
Sources Implementing and using sources
Sync Nodes Implementing and using synchronous nodes
Fanout Nodes Implementing and using fanout nodes
Async Nodes Implementing and using asynchronous nodes
Leader Election Starting leader election and accessing election results
Messaging How to send and receive messages between the components of your system
Metrics What metrics are exposed by default, and how to add custom metrics to your nodes
Kafka Producer Node for producing events onto a Kafka topic
Elasticsearch Node for indexing documents to an Elasticsearch cluster
Firebolt depends on librdkafka v1.3.0 or later. To get started building a firebolt app (or working on firebolt itself), install it following the instructions here.
An example for debian-based distros:
sudo wget -qO - https://packages.confluent.io/deb/5.4/archive.key | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.confluent.io/deb/5.4 stable main"
sudo apt-get update
sudo apt-get install -y librdkafka1 librdkafka-dev
Go
99.4%