Skip to content
Golang framework for streaming ETL, observability data pipeline, and event processing apps
Go Makefile
Branch: master
Clone or download
taotetek Merge pull request #10 from digitalocean/install-librdkafka-docs
Add docs section describing librdkafka dependency [#4]
Latest commit f2176a8 Nov 23, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config Update all package paths Nov 11, 2019
docs Initial migration from DO internal repo Oct 31, 2019
executor Remove useless slice comparison (#9) Nov 15, 2019
fbcontext Remove useless slice comparison (#9) Nov 15, 2019
internal Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
inttest Update all package paths Nov 11, 2019
kafka Initial migration from DO internal repo Oct 31, 2019
leader Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
message Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
metrics Update all package paths Nov 11, 2019
node Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
util Initial migration from DO internal repo Oct 31, 2019
.gitignore Initial migration from DO internal repo Oct 31, 2019
.travis.yml Run integration tests during CI Nov 11, 2019
LICENSE Full text of license Nov 11, 2019
Makefile Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
README.md Add docs section describing librdkafka dependency [#4] Nov 16, 2019
coverage_badge.png Initial migration from DO internal repo Oct 31, 2019
error.go Initial migration from DO internal repo Oct 31, 2019
error_test.go Update all package paths Nov 11, 2019
event.go Initial migration from DO internal repo Oct 31, 2019
go.mod Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
go.sum Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019
helpers.go Adjust spelling, Address linter warnings for #5 (#8) Nov 14, 2019

README.md

firebolt Code Coverage Badge by Gopherbadger Build Status Go Report Card

A golang framework for streaming event processing & data pipeline apps

Introduction

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:

  • logging/observability pipelines
  • streaming ETL
  • event processing pipelines

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:

  • kafkaconsumer - Events come from a Kafka topic, and are passed to the root nodes as []byte

The 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, and must implement the node.SyncNode or node.AsyncNode interfaces accordingly.

We provide two built-in node types:

  • kafkaproducer - Events are produced onto a kafka topic by an asynchronous producer.
  • elasticsearch - Events are bulk indexed into Elasticsearch.

Firebolt has both run and compile-time dependencies on librdkafka, see Developing

Example: Logging Pipeline

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.

Logging Pipeline Node Diagram

What does Firebolt do for me?

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:

  • kafka sources Minimal configuration and no code required to consume from a Kafka topic, consumer lag metrics included
  • kafka sinks Same for producing to a Kafka topic
  • loose coupling Nodes in the pipeline are loosely coupled, making them easily testable and highly reusable
  • simple stream filtering Filter the stream by returning nil in your nodes
  • convenient error handling Send events that fail processing to a kafka topic for recovery or analysis with a few lines of config
  • outage recovery: offset management Configurable Kafka offset management during recovery lets you determine the maximum "catch up" to attempt after an outage, so you can quickly get back to realtime processing.
  • outage recovery: parallel recovery After an outage, process realtime data and "fill-in" the outage time window in parallel, with a rate limit on the recovery window.
  • monitorability Firebolt exposes Prometheus metrics to track the performance of your Source and all Nodes without writing code. Your nodes can expose their own custom internal metrics as needed.
  • leader election Firebolt uses Zookeeper to conduct leader elections, facilitating any processing that may need to be conducted on one-and-only-one instance.

Documentation

  1. Configuration The configuration file format

  2. Execution How Firebolt processes your data

  3. Registry Adding node types to the registry

  4. Sample Application Code Example code for running the Firebolt executor

  5. Sources Implementing and using sources

  6. Sync Nodes Implementing and using synchronous nodes

  7. Async Nodes Implementing and using asynchronous nodes

  8. Leader Election Starting leader election and accessing election results

  9. Messaging How to send and receive messages between the components of your system

  10. Metrics What metrics are exposed by default, and how to add custom metrics to your nodes

Built-In Types

  1. Kafka Producer Node for producing events onto a Kafka topic

  2. Elasticsearch Node for indexing documents to an Elasticsearch cluster

Developing

Firebolt depends on librdkafka v1.1.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.3/archive.key | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.confluent.io/deb/5.3 stable main"
sudo apt-get update
sudo apt-get install -y librdkafka1 librdkafka-dev
You can’t perform that action at this time.